|
本次更新的版本是v0.0.2, 在v0.0.1的基础上,对TCP/UDP/HTTP等协议的服务端、客户端类库进行改造,都支持了服务注册发现。 Agileutil既支持客户端与服务端直连,也支持服务注册发现 (客户端与服务端直连的例子,请参考上面的TcpRpcServer部分)。 目前仅支持基于Consul的服务发现,未来计划支持etcd。TCP/UDP/HTTP这些协议的服务端、客户端类库均支持服务注册发现,下面的例子以TCP为例。 健康检查基于Consul的Check机制。服务注册后,自动添加一个定期的健康检查(默认为TCP端口检查,未来有计划支持HTTP健康检查)。一旦服务进程挂掉,那么客户端将请求到其他健康的服务节点上。同时客户端也存在重试机制,由于健康检查存在时间间隔,可能服务端进程挂掉后,仍需等待一段时间才被Consul发现,这时客户端如果请求到挂掉的服务节点上失败后,客户端会尝试请求其他服务节点进行重试。 快速开始服务注册发现的使用也很简单,请耐心看完。
from agileutil.rpc.discovery import DiscoveryConfig
disconf = DiscoveryConfig(
consulHost = '192.168.19.103',
consulPort = 8500,
serviceName = 'test-rpc-server',
serviceHost = local_ip(),
servicePort = 9988
)
s = TcpRpcServer('0.0.0.0', 9988)
s.regist(sayHello)
disconf = DiscoveryConfig(
consulHost = '192.168.19.103',
consulPort = 8500,
serviceName = 'test-rpc-server',
serviceHost = local_ip(),
servicePort = 9988
)
s.setDiscoverConfig(disconf)
s.serve()
完整的服务端示例 (UDP/HTTP调用方式相同)
from agileutil.rpc.server import TcpRpcServer
from agileutil.rpc.discovery import DiscoveryConfig
disconf = DiscoveryConfig(
consulHost = '192.168.19.103',
consulPort = 8500,
serviceName = 'test-rpc-server',
serviceHost = local_ip(),
servicePort = 10001
)
server = TcpRpcServer('0.0.0.0', 10001)
server.setDiscoverConfig(disconf)
server.regist(sayHello)
server.serve()
完整的客户端示例(UDP/HTTP调用方式相同)
from agileutil.rpc.client import TcpRpcClient
from agileutil.rpc.discovery import DiscoveryConfig
cli = TcpRpcClient()
disconf = DiscoveryConfig(
consulHost= '192.168.19.103',
consulPort= 8500,
serviceName='test-rpc-server'
)
cli.setDiscoveryConfig(disconf)
for i in range(3):
resp = cli.call(func = 'sayHello', args=('mary'))
(责任编辑:IT) |
