我已经努力了两天了解如何在AMQP上运行后端服务(不使用Web套接字或轮询时,REST API网关应如何向浏览器返回GET请求)。HTTP REST网关AMQP请求响应,没有Web套接字或轮询
已成功RPC'ed AMQP服务(与RabbitMqs reply_to & correlation_id),但与Flask HTTP请求等待我仍然丢失。
gateway.py - 响应处理程序中的HTTP处理程序,超时
def products_get():
def handler(ch=None, method=None, properties=None, body=None):
if body:
return body
return False
return_queue = 'products.get.return'
broker.channel.queue_declare(return_queue)
broker.channel.basic_consume(handler, return_queue)
broker.publish(exchange='', routing_key='products.get', body='Request data', properties=pika.BasicProperties(reply_to=return_queue))
now = time.time() # for timeout. Not having this returns 'no content' immediately
while time.time() < now + 1:
if handler():
return handler()
return 'Time out'
POST/PUT可以简单地立即发送AMQP的消息,返回200/201/201,并在自己的服务工作步伐。一个单独的REST接口仅用于GET请求似乎不合理,但不知道其他选项。
问候
Hi @FuzzyAmi。对AMQP后端服务发出同步GET请求之后。这是因为后端服务使用AMQP写入数据库。如果它是用REST编写的,我可以像你说的那样简单地调用它(尽管服务发现)。问候 – user2422819
@ user2422819 - 我从来没有见过像你一起工作的服务在这里,这对我来说毫无意义。 AMQP(和兔子)不是以这种方式使用的,尽管如果你愿意,你肯定会滥用它们来工作。我会在我的答案中添加一些注释。 – FuzzyAmi