结构服务请求
klempner的Python项目详细描述
构造以其他服务为目标的URL。
这个库使构建用于服务间通信的url更加安全 更容易建造。
URL生成
url=klempner.url.build_url('account','path','with spaces',query='arg',multi=['arg','support'])print(url)# http://account/path/with%20spaces?query=arg&multi=arg&multi=support
build_url负责正确格式化路径和查询参数 除了发现服务名之外。在本例中,服务名 按原样使用(请参阅下面的未配置用法)。真正的力量在build_url 它能够根据 操作环境。
build_url默认使用http方案。如果端口已确定 通过发现机制,使用一个简单的全局 从端口号映射到方案。
发现示例
未配置的用法
url=klempner.url.build_url('account')print(url)# http://account/
这不是很有用,但是如果不配置发现机制, 然后build_url假设请求的服务可以直接访问 按名字。
领事服务发现
使用consul的基本形式根本不是discovery。很简单 遵循consul的dns命名约定的url构造 接口公开。
os.environ['KLEMPNER_DISCOVERY']='consul'os.environ['CONSUL_DATACENTER']='production'url=klempner.url.build_url('account')print(url)# http://account.service.production.consul/
如果将+agent附加到发现方法,则build_url将 连接到领事馆代理并检索服务的端口号。如果 端口具有与其关联的注册服务,则服务名称将 作为方案。
假设帐户服务在consul中注册了一个服务端口 8000人:
os.environ['KLEMPNER_DISCOVERY']='consul+agent'url=klempner.url.build_url('account')print(url)# http://account.service.production.consul:8000/
现在让我们看看rabbitmq连接会发生什么:
url=klempner.url.build_url('rabbit')print(url)# amqp://rabbit.service.production.consul:5432/
该方案是通过在 klempner.config.URL_SCHEME_MAP并在查找时使用结果 成功。
库将连接到由^{tt9}指定的代理$ 环境变量。如果未指定环境变量,则 将使用在本地主机上侦听的代理。
kubernetes服务发现
os.environ['KLEMPNER_DISCOVERY']='kubernetes'url=klempner.url.build_url('account')print(url)# http://account.default.svc.cluster.local/
os.environ['KLEMPNER_DISCOVERY']='kubernetes'os.environ['KUBERNETES_NAMESPACE']='my-team'url=klempner.url.build_url('account')print(url)# http://account.my-team.svc.cluster.local/
Docker合成服务发现
os.environ['KLEMPNER_DISCOVERY']='docker-compose'os.environ['COMPOSE_PROJECT_NAME']='foo'url=klempner.url.build_url('account')print(url)# http://127.0.0.1:32867/
此发现机制使用 Docker API。build_url从Docker检索服务列表 宿主,使用“com.docker.compose.project”标签筛选列表,并 使用“com.docker.compose.service”标签选择服务。
环境变量发现
这种形式的发现使用服务名编码的环境变量 他们:
os.environ['KLEMPNER_DISCOVERY']='environment'os.environ['ACCOUNT_HOST']='10.2.12.23'os.environ['ACCOUNT_PORT']='11223'url=klempner.url.build_url('account')print(url)# http://10.2.12.23:11223/
对于名为adder的服务,使用以下环境变量 如果他们准备好了。
Name | URL component | Default |
^{tt12}$ | host portion of the authority | none |
^{tt13}$ | port portion of the authority | omitted |
^{tt14}$ | scheme | see below |
url方案默认为在 klempner.config.URL_SCHEME_MAP字典。如果端口号不是 在字典中,http用作默认值。
os.environ['KLEMPNER_DISCOVERY']='environment'os.environ['ACCOUNT_HOST']='10.2.12.23'os.environ['ACCOUNT_PORT']='443'url=klempner.url.build_url('account')print(url)# https://10.2.12.23:443/
想做贡献吗?
谢谢。见docs/contributing.rst或 https://klempner.readthedocs.io/en/latest/contributing.html你需要什么 去做。