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 に移動しますか?

4

1 に答える 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);

    }

}
于 2015-10-10T08:22:03.583 に答える