2017-07-12 7 views
3

は、それが単一@RabbitListener、例えばを持つことが可能ですオペレーション?これで、Jsonのオブジェクトがオブジェクトに変換されます(例:FindApplicationByIdRequest、またはPingRequest)。シングルキュー、複数の@RabbitListenerが異なるサービス

しかし、私はそれを取り戻すとき今、:

@Override 
public FindApplicationByIdResponse findApplicationById(FindApplicationByIdRequest request) { 
    Object object = template.convertSendAndReceive(Queues.STORAGE_REQUEST_QUEUE_NAME, request); 
    return handleResponse(FindApplicationByIdResponse.class, object); 
} 

@Override 
public PingResponse ping(PingRequest request) { 
    Object object = template.convertSendAndReceive(Queues.STORAGE_REQUEST_QUEUE_NAME, request); 
    return handleResponse(PingResponse.class, object); 
} 

、2つを関連付けることができなかったように見えます。だから私はpingメソッドを呼び出し、その後、私はそのメソッドでFindApplicationByIdResponseを取得します。 なぜですか?

私はそれらのキューに異なるキューを使用したが、正常に動作します。しかし、私はすべてのRPC呼び出しをサポートするために、たくさんの待ち行列を作る必要があります。 リクエストタイプを使用する修飾子として使用できるかどうかは誰でも知っていますか?メソッドレベルで@RabbitListenerでは動作しません

答えて

2

が、それは法に@RabbitHandlerでクラスレベルで可能です:

@RabbitListener(queues = STORAGE_REQUEST_QUEUE_NAME) 
public class MultiListenerBean { 

    @RabbitHandler 
    public String bar(Bar bar) { 
     ... 
    } 

    @RabbitHandler 
    public String baz(Baz baz) { 
     ... 
    } 

    @RabbitHandler 
    public String qux(@Header("amqp_receivedRoutingKey") String rk, @Payload Qux qux) { 
     ... 
    } 

} 

http://docs.spring.io/spring-amqp/reference/html/_reference.html#annotation-method-selection

+0

ああ、働いていたおかげで:) –

関連する問題