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


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

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

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

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

    1.  
      from tornado.ioloop import IOLoop
    2.  
      from tornado.gen import coroutine
    3.  
      from consul.base import Timeout
    4.  
      from consul.tornado import Consul
    5.  
       
    6.  
       
    7.  
      class Config(object):
    8.  
      def __init__(self, loop):
    9.  
      self.foo = None
    10.  
      loop.add_callback(self.watch)
    11.  
       
    12.  
      @coroutine
    13.  
      def watch(self):
    14.  
      c = Consul()
    15.  
       
    16.  
      # asynchronously poll for updates
    17.  
      index = None
    18.  
      while True:
    19.  
      try:
    20.  
      index, data = yield c.kv.get('foo', index=index)
    21.  
      if data is not None:
    22.  
      self.foo = data['Value']
    23.  
      except Timeout:
    24.  
      # gracefully handle request timeout
    25.  
      pass
    26.  
       
    27.  
      if __name__ == '__main__':
    28.  
      loop = IOLoop.instance()
    29.  
      _ = Config(loop)
    30.  
      loop.start()
    31.  
      复制代码

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

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

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

    1.  
      $ brew install consul-template
    2.  
      复制代码

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

    1.  
      $ cd python-web-service && docker-compose up -d
    2.  
      复制代码

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

    1.  
      $ curl http://localhost:8888
    2.  
      Hello World
    3.  
      复制代码

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

    1.  
      $ cd ../consul-template
    2.  
      $ tree
    3.  
      .
    4.  
      ├── config.hcl # consul-template 配置文件
    5.  
      └── config.py.ctmpl # python-web-service 配置模版文件
    6.  
      复制代码

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

    1.  
      consul {
    2.  
      address = "127.0.0.1:8500"
    3.  
       
    4.  
      }
    5.  
       
    6.  
      template {
    7.  
       
    8.  
      source = "./config.py.ctmpl"
    9.  
      destination = "../python-web-service/config.py"
    10.  
      command = "docker restart python-web-service_python-web-service_1"
    11.  
       
    12.  
      }
    13.  
      复制代码

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

    • address —— Consul Client 的访问地址和端口
    • source —— 需要配置的服务的配置文件模板
    • destination —— 配置文件渲染后输出的路径
    • command —— 当配置变更后,需要执行的命令

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

    1.  
      # -*- coding: utf-8 -*-
    2.  
      __author__ = 'gzp'
    3.  
       
    4.  
      GREETING = '{{ keyOrDefault "python-web-service/greeting" "Hello World" }}'
    5.  
      复制代码

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

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

    1.  
      $ consul-template -config config.hcl
    2.  
      复制代码

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

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

    1.  
      $ consul-template -config config.hcl
    2.  
      python-web-service_python-web-service_1
    3.  
      复制代码

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

    1.  
      $ curl http://localhost:8888
    2.  
      Hello Consul
    3.  
      复制代码

    可以看到配置已经生效。

  • 相关阅读:
    【重点】Java大厂面试10个知识点汇总
    TEC-2机微程序设计
    Component 'TABCTL32.OCX'错误的处理方法
    Azure DevOps的使用入门
    Mac + VMware Fusion + Windows 11尝鲜
    Golang接口类型-下篇
    Golang接口类型-上篇
    基于Python实现原生的登录验证码
    一套帮助你理解C语言的测试题(转)
    KMP算法详解
  • 原文地址:https://www.cnblogs.com/ExMan/p/11945129.html
Copyright © 2020-2023  润新知