在Spring Cloud的Netfix技术框架中,有一个很重要的管家:Eureka,它作为服务注册中心,提供给各个微服务注册进去,方便整合监控各个微服务等,其以Java语言为基础,同时也有部分客户端实现了服务注册协议,也可以注册进去,这里就试试用python吧,首先搜索一下:

    

flask python 注册短信 python 注册服务_flask python 注册短信

注意:要安装使用这个库,Python版本需要大于等于3.5,这里使用最新版本3.6),安装完成后就可以使用了,因为每个微服务都是提供API的,这里就使用tornado作为Web服务器吧

    首先,创建一个Eureka服务注册中心,不难,这里就不演示了,创建按默认配置启动后界面如下,可以看到,目前还没有微服务注册进来:

    

flask python 注册短信 python 注册服务_flask python 注册短信_02

    然后实现python客户端,并注册到服务中心,代码如下:


# -*- coding: utf-8 -*-
# Create By LinJK At 09/22/2017 22:52:28
import asyncio
import tornado.web
from wasp_eureka import EurekaClient
from tornado.options import define, options

define("port", default=7171, help="run on the given port", type=int)

class IndexHandler(tornado.web.RequestHandler):
    def get(self):
        self.write('[GET] python tornado...')

app_name = 'linjk-python-eureka-client'

ip = '192.168.1.109'
my_eureka_url = 'http://192.168.1.109:8761'

loop = asyncio.get_event_loop()    # 创建事件循环

eureka = EurekaClient(app_name=app_name, port=options.port, ip_addr=ip, 
                      hostname="localhost", eureka_url=my_eureka_url, loop=loop)

async def main():
    result = await eureka.register()
    print("[Register Rureka] result: %s" % result)

    tornado.options.parse_command_line()
    app = tornado.web.Application(
        handlers=[(r'/', IndexHandler)],
        debug=True
    )
    http_server = tornado.httpserver.HTTPServer(app)
    http_server.listen(options.port)
    tornado.ioloop.IOLoop.instance().start()

    while True:
        await asyncio.sleep(60)
        await eureka.renew()

if __name__ == "__main__":
    loop.run_until_complete(main())

    这里使用了python的协程,它是在python3.4版本引入,3.5版本确定语法。创建一个协程很简单,使用async关键字即可,这里创建一个main协程对象,然后把它加入到事件循环loop中并启动(run_until_complete方法),该协程主要逻辑是注册到eureka服务中心,然后初始化tornado的配置参数并启动tornado,然后进入一个死循环中不断与服务中心保存心跳,这里间隔设为60秒。

     执行python **.py启动该程序,可在服务中心看到这个微服务已经注册了:

     

flask python 注册短信 python 注册服务_微服务_03

     看看访问行不行:

     

flask python 注册短信 python 注册服务_微服务_04

     这里是直接访问的,后面多个微服务加进来,可以引入网关来管理多个微服务,这样,对于前端来说只有一个入口,后面,针对复杂的业务,可以选择最适合的技术来实现微服务,实现一个灵活的异构系统。