结构服务请求

klempner的Python项目详细描述


构造以其他服务为目标的URL。

VersionPythonSourceCoverageQualityDocsCI

这个库使构建用于服务间通信的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的服务,使用以下环境变量 如果他们准备好了。

NameURL componentDefault
^{tt12}$host portion of the authoritynone
^{tt13}$port portion of the authorityomitted
^{tt14}$schemesee 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.rsthttps://klempner.readthedocs.io/en/latest/contributing.html你需要什么 去做。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Selenium运行ChromeDriver而不修改路径   java软件包sun。网www.protocol。https不可见   java AEM中的哪个类实现了javax。servlet。请求调度器接口?   在java/scala中读取zip或7z文件时的性能问题   java将一个文件写入另一个二进制文件   java在类本身中创建实例   Java中C#Action()委托的等价物?   java如何在任何类中使用@Context或类似工具获取ServletRequest?   重构(java)应该/如何重构此代码?   hibernate中的java TransientObject异常   gwt使用Java在CouchDB 2.0 fauxton中创建文档   xml错误Java Jersey:NotAuthorizedException:HTTP 401未经授权   java heroku错误:无法找到或加载主类   java从CAS 5.0检索已发布的属性。Spring Security中的x 3.2.5