[RABBITMQ] reply-to 옵션에 대한 분석


1. rabbitmq(amqp프로토콜) 에서 지원하는 reply-to

http://www.rabbitmq.com/direct-reply-to.html

링크 발췌내용 중 사용법

Use
To use direct reply-to, an RPC client should:

Consume from the pseudo-queue amq.rabbitmq.reply-to in no-ack mode. There is no need to declare this “queue” first, although the client can do so if it wants.
Set the reply-to property in their request message to amq.rabbitmq.reply-to.
The RPC server will then see a reply-to property with a generated name. It should publish to the default exchange (“”) with the routing key set to this value (i.e. just as if it were sending to a reply queue as usual). The message will then be sent straight to the client consumer.

If the RPC server is going to perform some expensive computation it might wish to check if the client has gone away. To do this the server can declare the generated reply name first on a disposable channel in order to determine whether it still exists. Note that even if you declare the “queue” with passive=false there is no way to create it; the declare will just succeed (with 0 messages ready and 1 consumer) or fail.

결론적으로 클라이언트에서 consume(대기큐)를 할때 옵션으로 reply-to = amq.rabbitmq.reply-to 넣고 no-ack 모드로 실행한다.
그러면 따로 큐를 생성해 놓지 않더라도 amq.rabbitmq.reply-to 라는 큐가 생성되고 서버에서는 reply-to property를 통해 클라이언트에게 리턴한다.

서버에서 특이점은 publish 할때 따로 exchange name 을 적지 않고 routingkey 자리에 reply-to에서 온 값을 넣으면된다.
서버에서 reply-to 리턴하는 queue를 찍어보면 amq.rabbitmq.reply-to.g2dkAA1yYWJiaXRAdHdlYjAyAAAvugAAAAMB.N2mDRUJksXuxZHf1leTCKg==
이런식으로 뒤에 임의의 값이 붙어서 나온다. 여러 서버를 띄어도 저 값은 변하지 않았다. rabbitmq 서버에서 관리하는 것으로 보인다.


2. reply-to를 사용하지 않으면

reply-to 옵션을 쓰지않고 지정된 큐로 작업이 가능하다.
ack모드를 사용할수있어 데이터 유지하는 옵션을 사용할수있다.
하지만 옵션을 사용시 rabbitmq에서 제공하는 큐생성 및 사용시 추가적인 작업이 필요해 보인다.