下面的内容整理自:RabbitMQ实战指南.朱忠华
1 mandatory参数
mandatory
参数源于channel.basicPublish
方法,函数签名如下:
void basicPublish(String exchange,
String routingKey,
boolean mandatory,
boolean immediate,
BasicProperties props,
byte[] body) throws IOException;
当
mandatory
参数设置为true
的时候,如果exchange
无法根据自身的type
以及routing key
找到一个符合条件的queue
,那么RabbitMQ
会调用Basic.Return
命令将消息返回给生产者;当mandatory
参数设置为false
的时候,出现上述情形,则消息直接被丢弃。
如果消息生产者在调用channel.basicPublish
方法的时候,设置mandatory
参数为true
,则可以通过调用channel.addReturnListener
来添加一个ReturnListener
,用以监听被RabbitMQ
送回来的消息。
public class MandatoryProducer {
public static final String EXCHANGE_MANDATORY = "exchange-mandatory";
public static void main(String[] args) {
// 1、创建连接工厂
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("192.168.99.100");
factory.setPort(5672);
factory.setUsername("admin");
factory.setPassword("password");
// 2、获取连接、通道
try (Connection connection = factory.newConnection();
Channel channel = connection.createChannel()) {
// 3、声明发送消息到哪个exchange
channel.exchangeDeclare(EXCHANGE_MANDATORY, BuiltinExchangeType.DIRECT);
// 4、设置ReturnListener
channel.addReturnListener(new ReturnListener() {
@Override
public void handleReturn(int replyCode,
String replyText,
String exchange,
String routingKey,
AMQP.BasicProperties properties