RabbitMQ:setReturnListner handleBasicReturn未收到未送达邮件的呼叫
对于其中一个需求,我们需要跟踪队列深度和成功处理的消息。其思想是发布消息并获得成功和失败消息的列表。为了模拟需求,我做了以下操作RabbitMQ:setReturnListner handleBasicReturn未收到未送达邮件的呼叫,rabbitmq,Rabbitmq,对于其中一个需求,我们需要跟踪队列深度和成功处理的消息。其思想是发布消息并获得成功和失败消息的列表。为了模拟需求,我做了以下操作 发布带有强制和即时标志sent channel.basicPublish'exchange','rKey',true,false,props,“Hello World.”字节的消息 消费者使用偶数标记(我将1..10中的数字作为标记值放在每条消息的标题中),而不确认奇数消息 我在发布服务器中实现了setReturnListnere以捕获未送达的消息 虽然我能够通过Ra
channel.setReturnListener(new ReturnListener() {
public void handleBasicReturn(int replyCode, String replyText, String exchange,
String routingKey, AMQP.BasicProperties properties,
byte[] body)
throws IOException {
println "Debugging messages!!!!"
println "The details of returned messages are ${replyText} from ${exchange} with routingKey as ${routingKey} with properties"
}
});
println " queuename is ${dec.queue} and consumerCount is ${dec.consumerCount} messageCount is ${dec.messageCount}"
(1..10).each {
println "Sending file ${i}....."
def headers = new HashMap<String,Object>()
headers.put "operatiion","scp"
headers.put "dest","joker.dk.mach.com"
headers.put "id", i
println headers
BasicProperties props = new BasicProperties(null, null, headers, null, null, null, null, null,null, null, null, null,null, null)
channel.basicPublish 'exchange' ,'rKey',true,false, props,"Hello Worls".bytes
i++
}
channel.close()
了解即时和强制标志如何影响RabbitMQ中的消息传递
在您的情况下,因为您有一个消费者正在接收消息,所以即使消费者从未确认消息,消息也不会返回
D
while (true) {
def delivery = consumer.nextDelivery()
def headers = delivery?.properties?.headers
def id = headers.get("id")
println "Received message:"
println " ${id.toString()}"
if( id % 2 == 0){
channel.basicAck delivery.envelope.deliveryTag, false
}
}