Spring整合RabbitMQ
创始人
2025-05-28 02:06:00
0

Spring整合RabbitMQ

1.生产者Spring-Producer

1.1 创建生产者工程

整合用到的maven坐标,主要有:spring-context(Spring核心)spring-test(测试)junitspring-rabbit(官方整合方案)

org.springframeworkspring-context5.1.7.RELEASEorg.springframeworkspring-test5.1.7.RELEASEtestjunitjunit4.12testorg.springframework.amqpspring-rabbit2.1.8.RELEASE

1.2 创建RabbitMQ配置文件

这里我们创建的是一个RabbitMQ配置文件,名称为rabbitmq.properties。目的是方便将配置文件中的信息加载到Spring中,就无需在xml文件中修改了。

# RabbitMQ地址
rabbitmq.host=192.168.52.128
# RabbitMQ端口
rabbitmq.port=5672
# 用户名
rabbitmq.username=admin
# 密码
rabbitmq.password=admin
# 虚拟机
rabbitmq.virtual-host=/test

1.3 创建整合配置文件

RabbitMQ和Spring使用xml文件进行整合,意味着大部分的配置类或模板都在xml文件中,我们默认的文件名为:spring-rabbitmq-producer.xml

xml文件用到的默认约束




(1)加载配置文件,并创建连接工程connectionFactory

在这里我们需要注意的是加载配置文件的路径,classpath:rabbitmq.properties




(2)定义管理交换机、队列



(3)定义普通队列


不绑定到交换机则绑定到默认交换机,默认交换机类型为direct,名字为:“”,路由键为队列的名称。

  • id:表示bean的id
  • name:表示队列的名称
  • auto-declare:如果没有是否自动创建
  • auto-delete:是否自动删除队列(当最后一个消费者断开连接时)

(4)定义广播类型交换机






(5)定义定向类型交换机






上述定义的是定向类型交换机,表示当routing key为direct_key_1的时候,会发送到spring_direct_queue_1,当routing key为direct_key_2的时候,会发送到spring_direct_queue_2。

(6)定义通配符类型交换机








上述代码表示:

(1)以abc.开头的routing key会转到spring_topic_queue_1,例如:abcabc.xxabc.xx.xxx

(2)以abc.开头的且只有一个单词的会转到spring_topic_queue_2,例如:abc.xx

(3)以".cd"结尾的的routing key会转到spring_topic_queue_3,例如:abc.cd,xx.cd

  • pattern:表示的路由器的通配符
    • * 表示0或多个单词
    • # 表示一个单词

(7)定义rabbitTemplate



1.4 代码测试

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:spring-rabbitmq-producer.xml")
public class ProducerTest {/*** 注入RabbitTemplate*/@Autowiredprivate RabbitTemplate rabbitTemplate;/*** 测试默认的队列发送消息*/@Testpublic void test() {rabbitTemplate.convertAndSend("spring_queue", "hello world");}/*** 测试广播模式发送消息*/@Testpublic void testFanout() {rabbitTemplate.convertAndSend("spring_fanout_exchange", "", "spring_fanout_exchange");}/*** 测试使用定向路由发送消息*/public void testDirect() {// 将spring_direct_exchange_direct_key_1消息发送给路由key为direct_key_1的队列,即发送给spring_direct_queue_1rabbitTemplate.convertAndSend("spring_direct_exchange", "direct_key_1","spring_direct_exchange_direct_key_1");// 将spring_direct_exchange_direct_key_2消息发送给路由key为direct_key_2的队列,即发送给spring_direct_queue_2rabbitTemplate.convertAndSend("spring_direct_exchange", "direct_key_2","spring_direct_exchange_direct_key_2");}/*** 测试通配符模式*/@Testpublic void testTopics() {rabbitTemplate.convertAndSend("spring_topic_exchange", "abc.cd", "spring_test_topics_abc.cd");rabbitTemplate.convertAndSend("spring_topic_exchange", "abc.x", "spring_test_topics_abc.x");rabbitTemplate.convertAndSend("spring_topic_exchange", "x.cd", "spring_test_topics_x.cd");}}

2.消费者Spring-Consumer

2.1 创建消费者工程

消费者Spring-Consumer使用的jar包和生产者一样,无需修改。

org.springframeworkspring-context5.1.7.RELEASEorg.springframeworkspring-test5.1.7.RELEASEtestjunitjunit4.12testorg.springframework.amqpspring-rabbit2.1.8.RELEASE

1.2 创建RabbitMQ配置文件

这里我们创建的是一个RabbitMQ配置文件,名称为rabbitmq.properties。目的是方便将配置文件中的信息加载到Spring中,就无需在xml文件中修改。

# RabbitMQ地址
rabbitmq.host=192.168.52.128
# RabbitMQ端口
rabbitmq.port=5672
# 用户名
rabbitmq.username=admin
# 密码
rabbitmq.password=admin
# 虚拟机
rabbitmq.virtual-host=/test

1.3 创建整合配置文件

RabbitMQ和Spring使用xml文件进行整合,意味着大部分的配置类或模板都在xml文件中,我们默认的文件名为:spring-rabbitmq-producer.xml

xml文件用到的默认约束




(1)加载配置文件,并创建连接工程connectionFactory

在这里我们需要注意的是加载配置文件的路径,classpath:rabbitmq.properties









(2)创建监听器Listener负责监听对应的队列消息

我们创建一个默认普通的监听器,用来监听spring_queue队列中的消息。

监听器默认要实现MessageListener接口,并实现onMessage方法。

public class SpringQueueListener implements MessageListener {@Overridepublic void onMessage(Message message) {System.out.println("SpringQueueListener:" + new String(message.getBody()));}
}

(3)单元测试

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:spring-rabbitmq-consumer.xml")
public class ConsumerTest {@Testpublic void test() {while (true) {}}
}

控制台:SpringQueueListener:hello world

相关内容

热门资讯

卓易安卓系统升级官网,畅享智能... 亲爱的读者们,你是否也像我一样,对手机系统的更新充满了期待?今天,就让我带你一起探索一下卓易安卓系统...
美国间谍车安卓系统下载,安卓系... 你有没有想过,那些神秘的美国间谍车,它们是如何在街头巷尾悄无声息地搜集情报的呢?今天,就让我带你一探...
键盘内置安卓系统软件,便携式智... 你有没有想过,那些看似普通的键盘,其实里面可能藏着一个小小的安卓系统呢?没错,就是那种你一按下去,就...
安卓如何改id系统密码,轻松解... 手机里的安卓系统密码丢了?别急,让我来给你支个招,让你轻松改回那个让你头疼的密码。你知道吗,安卓系统...
扫房神器2安卓系统,打造洁净家... 你有没有发现,家里的灰尘就像小精灵一样,总是悄悄地在你不注意的时候跳出来?别急,今天我要给你介绍一个...
安卓完整的系统设置,全面掌控手... 亲爱的手机控们,是不是觉得你的安卓手机用久了,功能越来越强大,但设置却越来越复杂?别急,今天就来带你...
电视安卓系统是几代机子,揭秘新... 你有没有想过,家里的电视是不是已经升级到了最新的安卓系统呢?别小看了这个小小的系统升级,它可是能让你...
安卓系统隐私有经常去,系统级防... 你知道吗?在咱们这个数字化时代,手机可是我们生活中不可或缺的好伙伴。但是,你知道吗?这个好伙伴有时候...
安卓10系统断网软件,轻松实现... 你有没有遇到过这种情况?手机突然断网了,明明信号满格,却连不上网,急得你团团转。别急,今天就来给你揭...
安卓可以改什么系统版本,体验全... 你有没有想过,你的安卓手机其实可以像换衣服一样,换一个全新的“系统版本”呢?没错,这就是今天我们要聊...
最好的平板游戏安卓系统,畅享指... 亲爱的游戏迷们,你是否在寻找一款能够让你在安卓平板上畅玩无忧的游戏神器?别急,今天我就要给你揭秘,究...
华为安卓系统卡顿解决,华为安卓... 你是不是也遇到了华为安卓系统卡顿的问题?别急,今天就来给你支几招,让你的华为手机重新焕发活力!一、清...
安卓建议升级鸿蒙系统吗,探讨鸿... 亲爱的安卓用户们,最近是不是被鸿蒙系统的新鲜劲儿给吸引了?是不是在犹豫要不要把你的安卓手机升级成鸿蒙...
安卓如何变苹果系统桌面,桌面系... 你有没有想过,把你的安卓手机变成苹果系统桌面,是不是瞬间高大上了呢?想象那流畅的动画效果,那简洁的界...
windows平板安卓系统升级... 你有没有发现,最近你的Windows平板电脑突然变得有些不一样了?没错,就是那个一直默默陪伴你的小家...
安卓系统扩大运行内存,解锁更大... 你知道吗?在科技飞速发展的今天,手机已经成为了我们生活中不可或缺的好伙伴。而手机中,安卓系统更是以其...
安卓系统怎么改变zenly,探... 你有没有发现,你的安卓手机上的Zenly应用最近好像变得不一样了?没错,安卓系统的大手笔更新,让Ze...
英特尔安卓子系统,引领高效移动... 你有没有想过,手机里的安卓系统竟然也能和电脑上的英特尔处理器完美结合呢?这可不是天方夜谭,而是科技发...
永远会用安卓系统的手机,探索安... 亲爱的手机控们,你是否也有那么一款手机,它陪伴你度过了无数个日夜,成为了你生活中不可或缺的一部分?没...
有哪些安卓手机系统好用,好用系... 你有没有发现,现在手机市场上安卓手机的品牌和型号真是琳琅满目,让人挑花了眼?不过别急,今天我就来给你...