使用 Tornado Framework 搭建微服务系统

build mircoservice system by using Tornado Framework

尝试使用Tornado框架构建小型微服务系统。 这是结构:

-users_service
-books_service
-public_api_service

所以 users_service 和 books_service 会像 users.db 和 books.db 一样连接到他们自己的数据库(例如:books_service 是 运行 ning on localhost:6000,public_api_service 是 运行ning on localhost:7000),并且 public_api 会被 opned 给用户,所以当用户调用 public api、public_api_service 会向 users_servcice 或 books_service 发送请求并得到他们的响应(json 格式),然后格式化它们并响应。 我的问题是如何正确地将请求从 public_api_service 发送到 users_service 或 books_service?

def get_listings_info(page_num, page_size):
        url_params = {
            # 'user_id': user_id,
            'page_num': page_num,
            'page_size': page_size
        }
        url = url_concat('http://127.0.0.1:6000/books', url_params)
        request = HTTPRequest(url=url, method='GET')
        # http_client = AsyncHTTPClient()
        http_client = HTTPClient()
        result = http_client.fetch(request)
        result = json.loads(result.body)
        # return result.body
        return result

我厌倦了这个方法,但得到了这个错误:RuntimeError: Cannot 运行 the event loop while another loop is 运行ning。 任何帮助将不胜感激。

我的猜测是您正在尝试从 Tornado 应用程序内部 运行 这段代码,并且 HTTPClient 应该是独立的。

来自 HTTPClient 的 Tornado 文档:

Applications that are running an IOLoop must use AsyncHTTPClient instead.

这意味着如果您运行正在使用 Tornado 应用程序(使用 IOLoop),HTTPClient 将无法工作,您应该改用 AsyncHTTPClient。

在此处查看 Tornado Web 客户端的文档:https://www.tornadoweb.org/en/stable/httpclient.html