basicPublish错误的routingKey

时间:2018-01-24 13:51:39

标签: rabbitmq

我们实际上使用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"));

谢谢和问候,

埃里克

1 个答案:

答案 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方法。