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();
}
}

结果:

最新文章

  1. 一道原生js题目引发的思考(鼠标停留区块计时)
  2. 如何在Winform界面中设计图文并茂的界面
  3. 怎样将myeclipse里默认编码设置成utf-8
  4. Effective Java 16 Favor composition over inheritance
  5. Javascript 常用系统内置函数
  6. iOS - OC & Xcode
  7. Can you find it?(二分 二分+STL set map)
  8. css滤镜(转载)
  9. 【iOS开发-31】UITabBar背景、icon图标颜色、被选中背景设置以及隐藏UITabBar的两种方式
  10. Cocos3d-x 发布第一版
  11. SQL Server 2008 R2 性能计数器详细列表(二)
  12. 在idea的maven项目使用el或jstl表达式
  13. JS入门(四)
  14. (cljs/run-at (JSVM. :all) "细说函数")
  15. 重温《STL源码剖析》笔记 第三章
  16. ionic3 Modal组件
  17. 课程五(Sequence Models),第二 周(Natural Language Processing & Word Embeddings) —— 2.Programming assignments:Emojify
  18. CodeForces615B-Longtail Hedgehog-dp/图
  19. 三、CSS语言
  20. 【Java】 剑指offer(12) 机器人的运动范围

热门文章

  1. PHP面试大全 基础篇100道问题
  2. Appium下载安装及环境配置
  3. 大数据量下的集合过滤—Bloom Filter
  4. CSS弹性盒布局(display:flex)
  5. mysql报错Ignoring the redo log due to missing MLOG_CHECKPOINT between
  6. java框架之SpringBoot(9)-数据访问及整合MyBatis
  7. 【Java】NO.80.Note.1.Java.1.001-【Java 各种特性概念】
  8. linux安装lamp/lamp/lanmp
  9. HttpWebRequest请求http1.1的chunked的解析问题记录
  10. Parallels Desktop 重装系统