RabbitMQ(5)FanoutExchange
2024-09-21 08:18:02
Fanout 就是我们熟悉的广播模式或者订阅模式,给Fanout交换机发送消息,绑定了这个交换机的所有队列都收到这个消息。
生产者工程:
package com.example.demo.rabbitMq.exchange.fanout; import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.FanoutExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; @Configuration
public class FanoutRabbitConfig { @Bean
public Queue AMessage() {
return new Queue("fanout.A");
} @Bean
public Queue BMessage() {
return new Queue("fanout.B");
} @Bean
public Queue CMessage() {
return new Queue("fanout.C");
} @Bean
FanoutExchange fanoutExchange() {
return new FanoutExchange("fanoutExchange");
} @Bean
Binding bindingExchangeA(Queue AMessage, FanoutExchange fanoutExchange) {
return BindingBuilder.bind(AMessage).to(fanoutExchange);
} @Bean
Binding bindingExchangeB(Queue BMessage, FanoutExchange fanoutExchange) {
return BindingBuilder.bind(BMessage).to(fanoutExchange);
} @Bean
Binding bindingExchangeC(Queue CMessage, FanoutExchange fanoutExchange) {
return BindingBuilder.bind(CMessage).to(fanoutExchange);
} }
发送消息:
package com.example.demo.rabbitMq.exchange.fanout; import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; @Component
public class FanoutSender {
@Autowired
private AmqpTemplate rabbitTemplate; public void send() {
String context = "hi, fanout msg ";
System.out.println("Sender : " + context); //这里使用了A、B、C三个队列绑定到Fanout交换机上面,发送端的routing_key写任何字符都会被忽略
this.rabbitTemplate.convertAndSend("fanoutExchange","XCC", context);
}
}
消费者工程:
package com.example.demo.rabbitMq.exchange.fanout; import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component; @Component
public class FanoutReceiver { @RabbitHandler
@RabbitListener(queues = "fanout.A")
public void processA(String context) {
System.out.println("Receiver A : " + context);
} @RabbitHandler
@RabbitListener(queues = "fanout.B")
public void processB(String context) {
System.out.println("Receiver B : " + context);
} @RabbitHandler
@RabbitListener(queues = "fanout.C")
public void processC(String context) {
System.out.println("Receiver C : " + context);
}
}
测试:
启动消费工程,生产者工程发送消息:
package com.example.demo.rabbitMq; import com.example.demo.rabbitMq.exchange.fanout.FanoutSender;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class)
@SpringBootTest
public class RabbitMqFanoutTest {
@Autowired
private FanoutSender fanoutSender; @Test
public void send() throws Exception {
fanoutSender.send();
}
}
结果:
最新文章
- 一道原生js题目引发的思考(鼠标停留区块计时)
- 如何在Winform界面中设计图文并茂的界面
- 怎样将myeclipse里默认编码设置成utf-8
- Effective Java 16 Favor composition over inheritance
- Javascript 常用系统内置函数
- iOS - OC &; Xcode
- Can you find it?(二分 二分+STL set map)
- css滤镜(转载)
- 【iOS开发-31】UITabBar背景、icon图标颜色、被选中背景设置以及隐藏UITabBar的两种方式
- Cocos3d-x 发布第一版
- SQL Server 2008 R2 性能计数器详细列表(二)
- 在idea的maven项目使用el或jstl表达式
- JS入门(四)
- (cljs/run-at (JSVM. :all) ";细说函数";)
- 重温《STL源码剖析》笔记 第三章
- ionic3 Modal组件
- 课程五(Sequence Models),第二 周(Natural Language Processing &; Word Embeddings) —— 2.Programming assignments:Emojify
- CodeForces615B-Longtail Hedgehog-dp/图
- 三、CSS语言
- 【Java】 剑指offer(12) 机器人的运动范围
热门文章
- PHP面试大全 基础篇100道问题
- Appium下载安装及环境配置
- 大数据量下的集合过滤—Bloom Filter
- CSS弹性盒布局(display:flex)
- mysql报错Ignoring the redo log due to missing MLOG_CHECKPOINT between
- java框架之SpringBoot(9)-数据访问及整合MyBatis
- 【Java】NO.80.Note.1.Java.1.001-【Java 各种特性概念】
- linux安装lamp/lamp/lanmp
- HttpWebRequest请求http1.1的chunked的解析问题记录
- Parallels Desktop 重装系统