我如何结合Flask Web应用程序和Nameko微服务?
让我给你一些背景信息.我有基于烧瓶(http://flask.pocoo.org)的Web应用程序.此应用程序可以执行很长(5-10分钟)的任务.我希望能够在此应用程序仍在运行时编写并附加其他模块.如果我在开发过程中停止应用程序是可以的,但我无法在生产中停止它.
我对Nameko(https://nameko.readthedocs.org)没有任何经验,它是解决我问题的最佳方案吗?如果是这样 - 我可以混合使用Flask app和Nameko微服务吗?
我尝试使用请求来获取文件的 url。它在本地运行良好,但不适用于 nameko。
我尝试了 3 个 python3.7 的库。但都有同样的错误。导入 urllib.request,urllib3,requests
它在本地运行良好,如下所示:
import requests
url = "https://www.python.org/static/img/python-logo.png"
r = requests.get(url)
print(r.content)
Run Code Online (Sandbox Code Playgroud)
但它不能与 nameko 一起使用:
import requests
from nameko.web.handlers import http
@http("POST", "/import")
def testurl(self,request):
url = "https://www.python.org/static/img/python-logo.png"
r = requests.get(url)
print(r.content)
Run Code Online (Sandbox Code Playgroud)
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/usr/local/lib/python3.7/site-packages/nameko/rpc.py", line 373, in __call__
return reply.result()
File "/usr/local/lib/python3.7/site-packages/nameko/rpc.py", line 331, in result
raise deserialize(error)
nameko.exceptions.RemoteError: Exception Error on testurl: Cause : wrap_socket() got an unexpected keyword argument '_context'
Run Code Online (Sandbox Code Playgroud) 我已经做了很多搜索,但是无法解决此问题。
我有一个基本的Rabbitmq容器通过此命令运行:
docker run -d --hostname rabbitmqhost --name rabbitmq -p 15672:15672 -p 5672:5672 rabbitmq:3-management
我nameko用来创建连接到此容器的微服务。这是一个基本的微服务模块main.py:
from nameko.rpc import rpc
class Service_Name(object):
name = "service_name"
@rpc
def service_endpoint(self, arg=None):
logging.info('service_one endpoint, arg = %s', arg)
Run Code Online (Sandbox Code Playgroud)
该服务运行并使用以下命令从我的主机连接到Rabbitmq:
nameko run main --broker amqp://guest:guest@localhost
我想将服务放入一个Docker容器(称为service_one),但是当我运行该命令并运行前面的nameko命令时,socket.error: [Errno 111] ECONNREFUSED无论如何尝试将两个容器链接起来,我都会得到。
正确的方法是什么?目的是将每个服务都放在一个容器中,所有服务都通过兔子相互通信。谢谢。