学习视频来自于黑马:https://www.bilibili.com/video/BV1vJ41177j1?p=12
原生JMS API操作ActiveMQ
PTP(点对点)模式(生产者)
1、引入坐标(导入依赖)
创建项目
编写生产消息的测试类
创建会话参数2的值1是自动确认的意思
创建消息有很多种类型,这边暂时先用文本类型
为了看到这个效果可以打印一个
然后启动这个main方法
之后查看ActiveMQ网页控制台
PTP(点对点)模式(消费者)
创建项目跟上面一样
导入依赖
步骤
执行:
看ActiveMQ页面控制器
消费者使用消息监听器接受消息(推荐)
其他跟上面一样,只是由消费者普通接受改为了由消息监听器监听接受
弄完了后因为消费者直接接受完消息,没有消息了,我们可以用生产者再发送一条消息。
页面控制台
Pub/Sub发布订阅模式(生产者)
步骤
跟点对点模式只有一些小差异
在第五步那里改一下就行了
Pub/Sub发布订阅模式(消费者)
这边直接用监听器接受
测试:
正确顺序:
-
先启动消费者,一直开启
-
然后去启动生产者
错误顺序:
上面的顺序反过来
得到反馈
Active后台:
区别:
点对点模式对于先启动消费者还是先启动生产者没有要求
发布订阅模式必须要先启动消费者再启动生产者才行
Spring与ActiveMQ整合
看完了底层的JMS操作ActiveMQ之后,我们来用spring整合activemq,整个的原理就是对原生JMS代码的封装,换句话来说就是对代码的简化
消息生产者
1、导入依赖
导入的依赖有:activemq-all、spring的相关依赖,spring-jms(spring整合activemq的包)、单元测试包
2、编写一个spring整合activeMQ的配置文件applicationContext-producer.xml
在这个配置文件里面可以体现spring框架如何跟ActiveMQ来进行一个整合,创建出了一个JMS的模板
步骤:
- 创建连接工厂对象 connectionFactory
- 创建缓存连接工厂 CachingConnectionFactory
1. 注入连接工厂
2. 缓存消息数据 - 创建用于点对点发送的JmsTemplate
1. 注入缓存连接工厂
2. 指定是否为发布订阅模式 false - 创建用于发布订阅发送的JmsTemplate
1. 注入缓存连接工厂
2. 指定是否为发布订阅模式 true
3、编写测试类,使用JmsTemplate去发送消息
-
类注解RunWith(SpringJUnit4ClassRunner.class) junit与spring整合
-
类注解ContextConfiguration(“classpath:applicationContext-producer.xml”)加载spring配置文件
-
Autowired注入JmsTemplate,指定@Qualifier点对点,从配置文件里面拿名字
-
Autowired注入JmsTemplate,指定@Qualifier发布订阅,从配置文件里面拿名字
-
点对点的发送
执行:
activeMQ后台
-
发布订阅发送
跟上一个区别就只有调用的jmsTemplate不一样
因为发布订阅的要需要先启动消费者再启动生产者才行,所以这边暂时不做测试,等写好了消费者再测试
消息消费者
再来创建一个项目
1、先导入依赖
跟上面一样
2、再写配置文件applicationContext-consumer.xml
- 连接工厂
- 缓存连接工厂
- 配置消息监听组件扫描
- 配置监听器(点对点)
- 配置监听器(发布订阅)
创建一个监听包
建立这两个监听类需要在配置好的路径下
3、编写消费者测试类
- 点对点消费者监听器
- 然后直接复制改名一下就行了,创建好了发布订阅模式下的监听器
这时候上面的消费者配置文件中的两个红色的类名就变成绿色的了。
类名第一个大写,配置文件第一个小写
启动消费者监听
- ClassPathXmlApplicationContext加载spring配置
- ClassPathXmlApplicationContext.start()启动
- System.in.read阻塞,让程序一直处于等待状态
输出:他这边一启动是启动两个监听器,因为配置好了
因为之前启动了点对点模式的生产者,所以这边直接接收到了
activemq后台控制台
然后我们启动发布订阅的生产者
Springboot整合ActiveMQ
消息生产者
因为spring整合activemq的配置文件比较冗余,比较啰嗦代码量多
手动搭建springboot,用maven项目
1、导入依赖
锁定父版本会锁定springboot版本和他整合的框架的版本,因为springboot的starter的启动器和版本仲裁中心会自动给包定好版本
配置文件
配置当前服务名字,暂时没有用,结合springcloud做微服务架构的时候就需要用到这个名字,养成习惯就会带上这么个名字
创建springboot的启动类
这样一个springboot就搭建好了
测试类
测试:
activemq后台
点击进去浏览
点击这个
然后就可以看到发送的消息
这样提供方就写好了,目前是点对点模式
只要把这个变成true那么就能变成主题模式了
消费者
1、导入依赖
跟上面一样
2、配置文件
跟上面一样,改个端口号和服务名称
3、写个springboot启动类
跟上面一样
4、写个监听类
可以用于队列监听也可以监听主题监听,只需要改一下配置文件的类型就行了,跟生产者的时候一样。
注解:@JmsListener里面有个参数destination指定监听队列或者主题的名称
切换发布订阅模式,只要在application.yml文件中改为true
这样就变成了发布订阅模式
为了更灵活,可以去抽取目标的名字
也可以自己去定义一个生产者目标(queue或者topic)的名字
把目标提取到配置文件
使用@Value注解去获得配置文件中的值
同理:消费方也可以这样去改造
在配置文件上先写这么一个配置值
然后在@JmsListener上获取这么一个名字