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

相关内容

热门资讯

安卓系统怎么调ins,实际应用... 你有没有发现,Instagram(简称ins)这个社交平台简直是个宝藏,各种美图、短视频,还有各种有...
手机安卓系统耗电好快,揭秘安卓... 亲爱的手机控们,你们是不是也有这样的烦恼:手机安卓系统耗电好快,仿佛电量就像流水一样哗啦啦地溜走?别...
安卓系统能定位软件,探索安卓系... 你有没有想过,你的手机里那些神奇的软件是怎么知道你在哪儿的呢?没错,就是安卓系统能定位软件的功劳!今...
安卓系统参数测试软件,基于安卓... 你有没有想过,你的安卓手机里那些神秘的系统参数,其实就像是一扇通往手机性能深处的窗户呢?想要了解这扇...
透明蓝牙耳机安卓系统,智能生活... 你有没有想过,在这个科技飞速发展的时代,拥有一副好耳机是多么重要的一件事呢?想象当你沉浸在美妙的音乐...
微软10系统安装安卓,跨平台体... 亲爱的读者们,你是否曾想过在Windows 10系统上安装安卓系统呢?想象一边享受着Windows的...
ios跟安卓系统混合,打造跨平... 你有没有发现,现在手机的世界里,iOS和安卓就像是两个截然不同的王国,各自有着忠实的粉丝。但你知道吗...
安卓如何系统如何降级,还原至旧... 你有没有想过,你的安卓手机突然间变得卡顿不堪,性能大不如前?别急,今天就来教你怎么给安卓系统来个“时...
中兴不能用安卓系统,探索自主操... 你知道吗?最近有个大新闻在科技圈里炸开了锅,那就是咱们的国产手机品牌中兴,竟然不能用安卓系统了!这可...
安卓系统取消深色模式,探索新功... 你知道吗?最近安卓系统来了一次大变动,那就是取消了深色模式!这可让不少手机用户感到有点懵圈。咱们一起...
安卓模拟苹果系统游戏,畅玩经典... 你有没有想过,在安卓手机上也能玩到那些只在苹果系统上才能体验的游戏呢?没错,就是那种画面精美、操作流...
安卓系统澳门电召,安卓系统下的... 你有没有想过,在繁忙的都市生活中,如何轻松地叫到一辆车呢?现在,就让我带你走进安卓系统澳门电召的世界...
安卓系统的字母代表,字母背后的... 你知道吗?在我们每天使用的安卓手机里,那些看似普通的字母组合,其实有着它们独特的含义和故事呢!今天,...
安卓如何转iphone系统,系... 你有没有想过,从安卓转到iPhone系统,就像是从一个熟悉的老朋友跳到一个全新的世界呢?想象你手中的...
安卓攻略系统变美文,轻松打造完... 亲爱的安卓用户们,是不是觉得手机界面越来越单调,想要给它来个华丽变身呢?别急,今天就来给你支几招,让...
小米9系统安卓多少,基于安卓1... 亲爱的读者们,你是否也像我一样,对手机系统充满了好奇?今天,我们就来聊聊小米9这款手机的系统,看看它...
安卓系统与骁龙系统区别,深度解... 你有没有想过,为什么你的手机里装的是安卓系统,而朋友的手机里却是骁龙系统呢?这两种听起来有点像亲戚的...
安卓刷winphone系统6,... 你有没有想过,如果你的安卓手机突然变成了Windows Phone 6呢?想象那会是怎样一番景象?今...
锤子安卓12系统更新,畅享智能... 你知道吗?最近锤子手机的用户们可是炸开了锅,因为锤子科技终于发布了安卓12系统的更新!这不仅仅是一个...
安卓系统网站设计软件,打造个性... 你有没有想过,为什么你的手机里那么多应用,却总感觉少了点什么?没错,就是那个让你随时随地都能找到所需...