我们实际上使用basicPublish在队列上生成消息。如果我们无法发布(代理下来,错误的交换名称),这种方法很好并且会抛出异常。
否则,如果路由键不正确,则会发布消息但不会路由。如何获取消息丢失的信息(既不在死信队列中)?
在频道上添加confirmlistener表示该消息已被激活。 我们也使用备用交换而没有结果。
按照我们的代码:
channel.addConfirmListener(new ConfirmListener() {
@Override
public void handleNack(long deliveryTag, boolean multiple)
throws IOException {
System.out.println("*****handleNack , deliveryTag ["+deliveryTag+"], mulitple ["+multiple+"]");
}
@Override
public void handleAck(long deliveryTag, boolean multiple)
throws IOException {
System.out.println("handleAck, deliveryTag ["+deliveryTag+"], mulitple ["+multiple+"]");
}
});
channel.basicPublish(exchangeName, routing_key, false, false, bp,message.getBytes("UTF-8"));
谢谢和问候,
埃里克
答案 0 :(得分:0)
按照我的要求解决方案(在频道上添加一个ReturnListener并更改basicPublish上的参数:强制为true)
channel.addReturnListener(new ReturnListener() {
public void handleReturn(int replyCode, String replyText,
String exchange, String routingKey,
AMQP.BasicProperties properties, byte[] body)
throws IOException {
String str_successflag = "false";
String detailMsg = "Could not publish the message using exchange:"
+ exchange
+ " "
+ "and "
+ "routing key:"
+ routingKey;
System.out.println(detailMsg);
}
});
channel.basicPublish(exchangeName, routing_key, true, false, bp,message.getBytes("UTF-8"));
如果路由错误,则调用handleReturn方法。