웹 소켓이나 폴링을 사용하지 않고 REST API 게이트웨이가 AMQP에서 백엔드 서비스를 실행할 때 REST API 게이트웨이가 브라우저에 GET 요청을 반환하는 방법을 이해하기 위해 고생했습니다.).웹 소켓이나 폴링이없는 HTTP REST 게이트웨이
AMQP 서비스 (RabbitMqs reply_to & correlation_id)와 RPC를 성공적으로 연결했지만 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/간단하게 즉시 200/201/201을의 AMQP 메시지를 보낼 반환 할 수 PUT과 자신의 서비스 작업 속도. GET 요청을위한 별도의 REST 인터페이스는 믿기지 않지만 다른 옵션을 모른다.
감사
안녕하세요 @FuzzyAmi. AMQP 백엔드 서비스에 대한 동기식 GET 요청 이후에 더 많은 기능을 제공합니다. 이는 백엔드 서비스가 데이터베이스에 액세스하는 AMQP로 작성되기 때문입니다. 그것이 REST로 작성 되었다면, 당신이 말했듯이, 단순히 (서비스 발견 임에도 불구하고) 그것을 호출 할 수 있습니다. 감사합니다 – user2422819
@ user2422819 - 여기서는 같이 일해야하는 서비스를 본 적이 없으며 거의 이해가되지 않습니다. AMQP (및 토끼)는 이러한 방식으로 사용하도록 고안되지 않았지만, 원한다면 확실히 남용 할 수도 있습니다. 내 대답에 몇 가지 메모를 추가하겠습니다. – FuzzyAmi