RabbitMq六种使用模式(3)_订阅发布模式

本文介绍了RabbitMQ的订阅发布模式,包括fanout、direct和topic三种exchange类型。fanout类型会将消息发送给所有绑定的队列,direct类型则基于路由键将消息发送给特定队列,而topic类型支持模糊匹配,增强了路由灵活性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前的例子都是讲消息直接发送给指定的队列;现在需要发送给多个队列,订阅/发布模式

生产者不再将消息直接发往队列,而是发往exchange,然后exchange再发送给在该exchange订阅的队列;

exchange需要知道如何对接收到的消息进行转发


exchange有四种类型:direct, topic, headers and fanout

一:fanout类型

 将消息发给所有在exchange注册的队列

channel.exchangeDeclare("logs", "fanout");//1:声明一个fanout的exchange 
channel.queueBind(queueName, "logs", "");//将队列在exchange注册 
channel.basicPublish("logs", "", null, message.getBytes());//发送消息

 

二:direct类型

fanout类型的exchange可以将消息发送给在exchange上注册的所有的队列;

队列注册到direct类型的exchange时增加了route_key,每一个消息都有一个key,消息的key与队列的route_key一致时才会发往该队列;

channel.exchangeDeclare(EXCHANGE_NAME, "direct");
channel.basicPublish(EXCHANGE_NAME, "key", null, message.getBytes());
channel.queueBind(queueName, EXCHANGE_NAME, "key");

 

三:topic类型

direct类型中有一个缺点是:必须要消息的key和订阅的route_key完全一致才会发送到相应队列;

topic类型增加了相当于模糊匹配的功能;

*代表一个字符

#代表0个或多个字符

channel.exchangeDeclare(EXCHANGE_NAME, "topic");
channel.basicPublish(EXCHANGE_NAME, "key.t", null, message.getBytes());
channel.queueBind(queueName, EXCHANGE_NAME, "key.*");



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值