python微服务网关-使用 Consul 作为 Python 微服务的配置中心

使用 Consul 作为 Python 微服务的配置中心

Consul 作为数据中心,提供了 k/v 存储的功能,我们可以利用这个功能为 Python 微服务提供配置中心。

Consul 提供了 HTTP 接口,我们可以从他的接口获取数据,当然我们不用自己去实现,python-consul 已经帮我们造好了轮子。

而且官方文档非常贴心,已经贴好了 Python 常用框架的一些 demo 代码:

from tornado.ioloop import IOLoop

from tornado.gen import coroutine

from consul.base import Timeout

from consul.tornado import Consul

classConfig(object):

def__init__(self, loop):

self.foo = None

loop.add_callback(self.watch)

@coroutine

defwatch(self):

c = Consul()

# asynchronously poll for updates

index = None

while True:

try:

index, data = yield c.kv.get("foo", index=index)

if data is not None:

self.foo = data["Value"]

except Timeout:

# gracefully handle request timeout

pass

if __name__ == "__main__":

loop = IOLoop.instance()

_ = Config(loop)

loop.start()

复制代码

结合 consul-template 用解藕的方式去配置微服务

Consul Template 提供一个方便的方式从 Consul 获取数据通过 consul-template 的后台程序保存到文件系统。

这个后台进程监控 Consul 示例的变化并更新任意数量的模板到文件系统.作为一个附件功能,模板更新完成后 consul-template 可以运行任何命令.可以查看示例部分看这个功能将会对哪些应用场景产生帮助。

首先需要在 Consul Client 所在的宿主机安装 consul-template,由于 Demo 宿主机环境为 Mac OS,所以可以直接用 HomeBrew 进行安装。

$brew install consul-template

复制代码

安装完成后进入仓库的 python-web-service 路径,这是一个用 tornado 写的简单的 Web 服务。执行如下命令:

$cd python-web-service && docker-compose up -d

复制代码

等待命令运行完成,服务启动后,访问 localhost:8888 可以看到返回内容:

$curl http://localhost:8888

Hello World

复制代码

然后我们回到仓库路径,进入 consul-template 目录,该目录主要包含以下两个文件:

$cd ../consul-template

$tree

.

├── config.hcl # consul-template 配置文件

└── config.py.ctmpl # python-web-service 配置模版文件

复制代码

查看一下 config.hcl 文件的内容:

consul {

address = "127.0.0.1:8500"

}

template {

source = "./config.py.ctmpl"

destination = "../python-web-service/config.py"

command = "docker restart python-web-service_python-web-service_1"

}

复制代码

先介绍一下 *.hcl 配置文件,这个是 Consul 中非常常见的配置文件格式,也是 HashiCorp 下的产品所用的主要配置文件格式。配置文件中包含了 4 个重要的参数:

address —— Consul Client 的访问地址和端口

source —— 需要配置的服务的配置文件模板

destination —— 配置文件渲染后输出的路径

command —— 当配置变更后,需要执行的命令

再来看看模板文件 config.py.ctmpl:

# -*- coding: utf-8 -*-

__author__ = "gzp"

GREETING = "{{ keyOrDefault "python-web-service/greeting" "Hello World" }}"

复制代码

模版文件的格式非常类似 Jinja2 的语法,这里的意思获取 key 为 python-web-service/greeting 下的值,默认值为 HelloWorld。

接下来运行命令使 consul-template 生效:

$consul-template -config config.hcl

复制代码

我们可以访问 Consul Web UI 的 Key/Value 来修改我们的值:

将 Hello World 修改为 Hello Consul,配置可能没有立即生效,若看到 consul-template 输出,则代表配置生效,服务以及重启:

$consul-template -config config.hcl

python-web-service_python-web-service_1

复制代码

然后再次访问一下 web 服务:

$curl http://localhost:8888

Hello Consul

复制代码

可以看到配置已经生效。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值