rabbitmq实现向各服务广播消息
广播fanout
主要是将一个消息,分发到绑定了它的队列上,而这些队列如消费者
自己去建立和绑定!
对生产者是解耦的
生产者不需要关心消费者有多少,消费者如果需要这种消息,只需要把队列绑定到exchange上即可
流程
- 打开rabbitmq的ui
- 建立两个队列fanout1,fanout2
- 打开exchange里的amqp.fanout类型
- 绑定上面的两个队列
- 向exchange里发消息
- 回到队列页面,这时可以看到每个队列都收到了消息
例子
@Component
public class AmqpConfig {
public static final String LIND_FANOUT_EXCHANGE = "lindFanoutExchange";
/**
* 广播交换机.
*
* @return
*/
@Bean
public FanoutExchange fanoutExchange() {
return new FanoutExchange(LIND_FANOUT_EXCHANGE);
}
}
生产者
/**
* 发布广播消息.
*
* @param message .
*/
public void fanoutPublish(String message) {
try {
rabbitTemplate.convertAndSend(AmqpConfig.LIND_FANOUT_EXCHANGE, null, "广播消息");
} catch (Exception e) {
e.printStackTrace();
}
}
消费者
@Component
public class FanoutSubscriber {
@Autowired
AmqpConfig amqpConfig;
@Bean
public Queue product1Queue() {
return new Queue("product1.queue");
}
@Bean
public Queue product2Queue() {
return new Queue("product2.queue");
}
@Bean
public Binding product1QueueBinding() {
return BindingBuilder.bind(product1Queue()).to(amqpConfig.fanoutExchange());
}
@Bean
public Binding product2QueueBinding() {
return BindingBuilder.bind(product2Queue()).to(amqpConfig.fanoutExchange());
}
@RabbitListener(queues = "product1.queue")
public void product1(String data) {
System.out.println(data);
}
@RabbitListener(queues = "product2.queue")
public void product2(String data) {
System.out.println(data);
}
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
2014-11-19 我心中的核心组件(可插拔的AOP)~第十五回 我的日志组件Logger.Core(策略,模版方法,工厂,单例等模式的使用)