首页 文章

RabbitMQ死信交换/队列

提问于
浏览
1

我不太了解死信交换/队列 . 在线文件说:

republished to another exchange when any of the following events occur:
    The message is rejected (basic.reject or basic.nack) with requeue=false,
    The TTL for the message expires; or
    The queue length limit is exceeded.

这是否意味着当这些事件发生时,消息将自动移动到死信队列?或者我必须专门在我的代码中将那些“死”的消息移动到该DLQ?

另外我如何为正常队列设置DLX / DLQ?当我正常队列中的消息失败/过期时,它会移动到DLX / DLQ吗?

1 回答

  • 1

    这是一个完整的例子:

    public class DXtest {
        public static void main(String[] argv)
                throws IOException,
                InterruptedException, TimeoutException {
    
            ConnectionFactory factory = new ConnectionFactory();
            factory.setHost("localhost");
    
            Connection connection = factory.newConnection();
            Channel channel = connection.createChannel();
            channel.exchangeDeclare("my.exchange", "fanout");
    
            Map<String, Object> args = new HashMap<String, Object>();
            args.put("x-dead-letter-exchange", "my.exchange");
            args.put("x-max-length", 2);
            channel.queueDeclare("myqueue", false, false, false, args); // here you setup your queue, 
    //for example with x-max-length, when the limit is reach, the message head message queue will be redirect  
    //to the my.exchange and then to my-dead-letter-queue
    
    
    
            channel.queueDeclare("my-dead-letter-queue", false, false, false, null);
            channel.queueBind("my-dead-letter-queue","my.exchange","");
    
    
            Consumer consumer = new DefaultConsumer(channel) {
                @Override
                public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body)
                        throws IOException {
                    String message = new String(body, "UTF-8");
                    System.out.println(" [x] Message   '" + message + "'" + new Date());
                }
            };
            channel.basicConsume("my-dead-letter-queue", true, consumer);
    
        }
    
    }
    

相关问题