交換でメッセージを送受信するプログラムがあります。プログラムのメッセージがキューにあるかどうかに関係なく、プログラムは実行を継続する必要があります。ほとんどすべてのチュートリアルには、ブロッキングの例があります。
while (true) {
QueueingConsumer.Delivery delivery = consumer.nextDelivery();
System.out.println("Message: " + new String(delivery.getBody()));
ch.basicAck(delivery.getEnvelope().getDeliveryTag(), false);
}
非同期バージョンであると理解しているものに出くわしました。つまり、メッセージがキューで使用可能になると、handleDelivery関数が呼び出されます(コールバック)。
boolean autoAck = false;
channel.basicConsume(queueName, autoAck, "myConsumerTag",
new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag,
Envelope envelope,
AMQP.BasicProperties properties,
byte[] body)
throws IOException
{
String routingKey = envelope.getRoutingKey();
String contentType = properties.contentType;
long deliveryTag = envelope.getDeliveryTag();
// (process the message components here ...)
channel.basicAck(deliveryTag, false);
}
});
ドキュメントを読んだ後でも、上記のコードスニペットが実際に非同期であるかどうかはわかりません。また、送信された実際のメッセージを取得する方法がわかりません。助けてください。