1

未確認のメッセージを取得して準備完了状態に戻す方法を探しています。これにより、消費者はそれらのメッセージを再び送り返すことができます。 ここに画像の説明を入力

メッセージを取得するためにJavaクライアントを使用しています。これらはメッセージを送信および取得するための私のプログラムです。メッセージをキューに戻すメソッド basicRecover() があることを読みました。

SendMessage
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();

channel.queueDeclare(QUEUE_NAME, true, false, false, null);
for(int i=0;i<1000;i++)
{
    String message = "message goes here";

    channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
    System.out.println(" [x] Sent '" + message + "'");
}
channel.close();
connection.close();

}

Retrieve
try
    {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("10.4.4.19");
        factory.setUsername("test");
        factory.setPassword("test");
            //factory.setPort(5267);
        connection=factory.newConnection();
        channel=connection.createChannel();
        channel.basicQos(1);
        QueueingConsumer consumer = new QueueingConsumer(channel);
        channel.basicConsume(QUEUE_NAME, false, consumer);

        for(int i=0;i<1;i++)
        {
            QueueingConsumer.Delivery delivery = consumer.nextDelivery();
            String message = new String(delivery.getBody());
            System.out.println(" [x] Received '" + message + "'");
           // Thread.currentThread().sleep(3000);
            channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);

        }
        channel.close();
        connection.close();
    }
    catch(Exception e)
    {
        System.out.println("Error:"+e.getMessage());
        e.printStackTrace();
    }

unack メッセージを準備完了状態に戻して、取得プログラムを使用してそれらを読み取ることができるように、誰でもコード スニペットを提供してもらえますか。

4

1 に答える 1

1

実行しないchannel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);と、メッセージは (最終的に) 再配信されます。メッセージが配信されなかったことをサービスに通知する必要はありません。配信されたと確認されなかったものは配信されなかったというプリンシパルで機能します。

http://pubs.vmware.com/vfabric5/index.jsp?topic=/com.vmware.vfabric.rabbitmq.2.4/tutorials/tutorial-two-java.html

ただし、上記のリンクを読むとわかるように、メッセージの確認を解除する唯一の方法は、サービスへの接続を強制終了/閉じることです。

于 2014-08-05T14:52:58.550 に答える