2

RabbitTemplate の API を調べてみました。キューからメッセージを取得する receive メソッドのみを提供します。ただし、特定の相関 ID を持つメッセージを取得する方法はありません。ここで何が欠けているかを理解するのを手伝ってくれませんか。

現在、ActiveMQ の JMS API を使用して、メッセージ セレクターで createConsumer を作成する次のコードを使用してメッセージを受信して​​います。RabbitMQ を使用して Spring AMQP で同じことを行うには:

private ObjectMessage receiveMessage(final String readQueue, final UUID correlationId, final boolean isBroadcastMessage, final int readTimeout) throws JMSException
{
    final ActiveMQConnectionFactory connectionFactory = this.findConnectionFactory(readQueue);
    Connection connection = null;
    Session session = null;
    MessageConsumer consumer = null;
    ObjectMessage responseMessage = null;

    try
    {
        connection = connectionFactory.createConnection();
        connection.start();
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

        Destination destination = session.createQueue(readQueue);

        consumer = session.createConsumer(destination, "correlationId = '" + correlationId + "'");
        final Message message = consumer.receive(readTimeout);
    }
    finally
    {
        if (consumer != null)
        {
            consumer.close();
        }
        if (session != null)
        {
            session.close();
        }
        if (connection != null)
        {
            connection.close();
        }
    }
    return responseMessage;
} 
4

1 に答える 1

1

messageSelectorJMS で文字列を使用しています。RabbitMQ/AMQP には同等のものはありません。

代わりに、各コンシューマーは独自のキューを取得し、ブローカーで直接またはトピック交換を使用してルーティングを行います。rabbitmq Web サイトのチュートリアルトピックを参照することをお勧めします。

リクエスト/リプライ処理に correlationId を使用している場合は、テンプレートに組み込まれているsendAndReceiveorconvertSendAndReceiveメソッドの使用を検討してください。詳細については、リファレンス ドキュメントを参照してください。

于 2014-05-20T13:13:37.783 に答える