# RabitMQ实战
# 1 消息发送
void basicPublish(String exchange, String routingKey, boolean mandatory, bollean immediate, BasicProperties properties) throws IOException
1
# 1.1 mandantory 参数
要求消息至少路由到一个队列中,否则要么丢弃,要么返回生产者
- True:匹配不到队列,返回生产者
- False:匹配不到队列,丢弃
生产者可通过ReturnListenner监听器获取返回生产者的消息
channel.addReturnListener(new ReturnListener(){
public void handleReturn(int replyCode, String replyText, String exchange, String routingKey, AMOP.BasicProperties properties, byte[] body) throws IOException {
// ...
}
})
1
2
3
4
5
2
3
4
5
# 1.2 immediate参数
要求至少有一个定阅者,否则返回生产者
- True:路由到队列时,队列上不存在任何消费者,则消息不存入队列。当与路由键匹配的所有队列都没有消费者时,返回给生产者
# 1.3 备份交换器
Mandatory=False,未被路由的消息会被丢弃,如果设置为True,则生产者需要自己处理未被路由的消息。
有另外一种选择,可以使用备份交换器,在需要时再去处理这些消息
- 可以在声明交换器时,增加
alternate-exchange
参数实现 - 可以通过策略(Policy)实现
// 定义备份交换器
channel.exchangeDeclare('AlterExchange', 'fanout', true, false, null);
1
2
3
2
3
← RabbitMQ相关概念 01 简介 →