使用 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
尝试使用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