如果生产端指定的路由key和队列可以发送给mq ,那么消费端只要指定了这个队列,路由key是错的也可以消费这个消息?
来源:3-6 Return返回消息详解

慕运维9484465
2020-05-26
生产端
public static void main(String[] args) throws IOException, TimeoutException {
ConnectionFactory connectionFactory= new ConnectionFactory();
connectionFactory.setHost(“192.168.44.140”);
connectionFactory.setPort(5672);
connectionFactory.setVirtualHost("/");
Connection connection = connectionFactory.newConnection();
Channel channel= connection.createChannel();
String exchange="test_return_exchange";
String routingKey="test.return.test1";
String msg="测试return";
channel.addReturnListener(new ReturnListener() {
public void handleReturn(int replyCode, String replyText, String exchange, String routingKey, AMQP.BasicProperties properties, byte[] body) throws IOException {
System.out.println("replyCode="+replyCode);
System.out.println("replyText="+replyText);
System.out.println("exchange="+exchange);
System.out.println("routingKey="+routingKey);
System.out.println("properties="+properties);
System.out.println("body="+new String(body));
}
});
//mandatory 为true时无法路由的消息会被监听 可通过addReturnListener监听到
channel.basicPublish(exchange,routingKey,true,null,msg.getBytes());
}
消费端
public static void main(String[] args) throws IOException, TimeoutException, InterruptedException {
ConnectionFactory connectionFactory= new ConnectionFactory();
connectionFactory.setHost(“192.168.44.140”);
connectionFactory.setPort(5672);
connectionFactory.setVirtualHost("/");
Connection connection = connectionFactory.newConnection();
Channel channel= connection.createChannel();
String exchange="test_return_exchange";
String routingKey="test.return";
channel.exchangeDeclare(exchange,"topic",true,false,null);
channel.queueDeclare("test_return_queue",true,false,false,null);
channel.queueBind("test_return_queue",exchange,routingKey);
QueueingConsumer queueingConsumer= new QueueingConsumer(channel);
channel.basicConsume("test_return_queue",true,queueingConsumer);
while(true){
QueueingConsumer.Delivery delivery= queueingConsumer.nextDelivery();
String msg = new String(delivery.getBody());
System.err.println("消费端消费消息"+msg);
}
}
控制台
写回答
1回答
-
阿神
2020-05-27
你现在是绑定了多个路由key 哪个都可以
012020-05-27
相似问题