|
@@ -0,0 +1,54 @@
|
|
|
|
+package com.sf.deadletter.reject;
|
|
|
|
+
|
|
|
|
+import com.rabbitmq.client.BuiltinExchangeType;
|
|
|
|
+import com.rabbitmq.client.CancelCallback;
|
|
|
|
+import com.rabbitmq.client.Channel;
|
|
|
|
+import com.rabbitmq.client.DeliverCallback;
|
|
|
|
+import com.sf.util.MqUtils;
|
|
|
|
+
|
|
|
|
+import java.util.HashMap;
|
|
|
|
+import java.util.Map;
|
|
|
|
+
|
|
|
|
+public class Consumer01 {
|
|
|
|
+ private static final String NORMAL_EXCHANGE = "normal_exchange2";
|
|
|
|
+ private static final String DEAD_EXCHANGE = "dead_exchange2";
|
|
|
|
+ private static final String NORMAL_QUEUE = "normal_queue2";
|
|
|
|
+ private static final String DEAD_QUEUE = "dead_queue2";
|
|
|
|
+
|
|
|
|
+ public static void main(String[] args) throws Exception {
|
|
|
|
+
|
|
|
|
+ Channel channel = MqUtils.getChannel();
|
|
|
|
+
|
|
|
|
+ channel.exchangeDeclare(NORMAL_EXCHANGE, BuiltinExchangeType.DIRECT);
|
|
|
|
+ channel.exchangeDeclare(DEAD_EXCHANGE, BuiltinExchangeType.DIRECT);
|
|
|
|
+
|
|
|
|
+ Map<String, Object> arguments = new HashMap<>();
|
|
|
|
+ arguments.put("x-dead-letter-exchange", DEAD_EXCHANGE);
|
|
|
|
+ arguments.put("x-dead-letter-routing-key", "lisi");
|
|
|
|
+ channel.queueDeclare(NORMAL_QUEUE, false, false, false, arguments);
|
|
|
|
+ channel.queueDeclare(DEAD_QUEUE, false, false, false, null);
|
|
|
|
+
|
|
|
|
+ channel.queueBind(NORMAL_QUEUE, NORMAL_EXCHANGE, "zhangsan");
|
|
|
|
+ channel.queueBind(DEAD_QUEUE, DEAD_EXCHANGE, "lisi");
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ System.out.println("Consumer01等待接收普通队列到消息......");
|
|
|
|
+ DeliverCallback deliverCallback = (consumerTag, message) -> {
|
|
|
|
+ String mes = new String(message.getBody(), "UTF-8");
|
|
|
|
+ if (mes.equals("5")) {
|
|
|
|
+ System.out.println("Consumer01接收到普通队列的消息" + mes + "并拒收该消息");
|
|
|
|
+
|
|
|
|
+ channel.basicReject(message.getEnvelope().getDeliveryTag(), false);
|
|
|
|
+ } else {
|
|
|
|
+ System.out.println("Consumer01接收到普通队列的消息:" + new String(message.getBody()));
|
|
|
|
+ channel.basicAck(message.getEnvelope().getDeliveryTag(), false);
|
|
|
|
+ }
|
|
|
|
+ };
|
|
|
|
+ CancelCallback cancelCallback = (consumerTag) -> {
|
|
|
|
+ System.out.println("消息消费被中断");
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ boolean autoAck = false;
|
|
|
|
+ channel.basicConsume(NORMAL_QUEUE, autoAck, deliverCallback, cancelCallback);
|
|
|
|
+ }
|
|
|
|
+}
|