MQ 系列之 JMSTemplate
1.1 简介
1.1.1 概述
JMSTemplate 是由 Spring 提供的一个 JMS 消息发送模板(与 JDBCTmplate 类似),可以用来方便地进行消息的发送,消息发送方法 convertAndSend 的第一个参数是消息队列,第二个参数是消息内容,@JmsListener 注解则表示相应的方法是一个消息消费者。
1.1.2 整合 JMSTemplate
☞ Spring 整合 JMSTemplate ☞ SpringBoot 整合 JMSTemplate
1.2 JMSTemplate 的使用
1.2.1 常用方法
消息接收可以使用消息监听的方式替代模板方法,但是发送的时候是无法代替的,必须使用 Spring 提供的 JmsTemplate 中的方法来进行发送操作。浏览只是针对 Queue 的概念,Topic 没有浏览。浏览是指获取消息而消息依然保持在 broker 中,而消息的接收会把消息从 broker 中移除。
方法 |
描述 |
---|---|
void send(Destination destination,MessageCreator messageCreator) |
将消息发送到指定的 Destination |
void send(String destinationName,MessageCreator messageCreator) |
将消息发送到指定的 Destination这个方法和send(Destination destination,MessageCreator messageCreator) 做同样的事情,只是这个方法依赖于解析器和类型 |
void send(MessageCreator messageCreator) |
将消息发送到默认的 Destination,这个方法要求提前设置 defaultDestination可以调用 setDefaultDestination(Destination destination) 或者 setDefaultDestinationName(String destinationName) 来满足这个前提 |
void convertAndSend(Destination destination,Object message) |
将 message 转换成 JMS 的 Message,并发送到指定的 Destination |
void convertAndSend(String destinationName,Object message) |
将 message 转换成 JMS 的 Message,并发送到指定的 Destination |
void convertAndSend(Object message) |
将 message 转换成 JMS 的 Message,并发送到默认的 Destination |
Message receive(Destination destination) |
从指定的 Destination 接收消息并返回 |
Message receive(String destinationName) |
从指定的 Destination 接收消息并返回 |
Message receive() |
从默认的 Destination 接收消息并返回 |
Object receiveAndConvert() |
参考 Message receive(),在此基础上做了转换 |
Object receiveAndConvert(Destination destination) |
参考 Message receive(Destination destination),在此基础上做了转换 |
Object receiveAndConvert(String destinationName) |
参考 Message receive(String destinationName),在此基础上做了转换 |
T browse(BrowserCallback action) |
从默认的 Queue 中浏览消息,要求设置了默认的 Destination,且类型为 Queueaction 是一个回调对象,它负责浏览消息,并返回浏览的结果 |
T browse(Queue queue,BrowserCallback action) |
从指定的 Queue 中浏览消息 |
T browse(String queueName,BrowserCallback action) |
从指定 name 的 Queue 中浏览消息 |
T doInJms(Session session, QueueBrowser browser) |
浏览队列中的消息,并返回浏览的结果这是一个回调方法,Spring 会为我们提供 QueueBrowser 对象,我们可以据此获取消息,并自由的转换。最后以我们希望的类型返回 |
void setDeliveryMode(int deliveryMode) |
设置是否持久化要发送的消息:1-非持久化;2-持久化 |
int getDeliveryMode() |
获取持久化模式的设置:1-非持久化;2-持久化 |
void setDeliveryPersistent(boolean deliveryPersistent) |
设置是否持久化要发送的消息,true-持久化;false-非持久化 |
void setPriority(int priority) |
为将要发送的消息设置优先级 |
int getPriority() |
获取优先级 |
void setTimeToLive(long timeToLive) |
设置消息的存活时间,毫秒单位 |
long getTimeToLive() |
获取消息的存活时间,毫秒单位 |
void setReceiveTimeout(long receiveTimeout) |
设置接收等待时间,毫秒单位 |
long getReceiveTimeout() |
获取接收等待时间,毫秒单位 |
1.2.2 发送消息
/**
* Created with IntelliJ IDEA.
*
* @author Demo_Null
* @date 2020/8/5
* @description JMS 发送消息
*/
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest()
public class MyMQTest {
@Autowired
private JmsTemplate jmsTemplate;
@Test
public void jms() {
jmsTemplate.convertAndSend(new ActiveMQQueue("myTest"), "测试消息");
}
}
1.2.3 接收消息
☞ 普通方式
/**
* Created with IntelliJ IDEA.
*
* @author Demo_Null
* @date 2020/8/5
* @description AMQ 接收消息
*/
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest()
public class MyMQTest {
@Autowired
private JmsTemplate jmsTemplate;
@Test
public void recevie() {
Object myTest = jmsTemplate.receiveAndConvert("myTest");
if (!Objects.isNull(myTest)) {
System.out.println(myTest);
}
}
}
☞ 监听消息
/**
* Created with IntelliJ IDEA.
*
* @author Demo_Null
* @date 2020/8/5
* @description AMQ 监听消息
*/
@Component
public class MyMQListener {
@Autowired
private JmsTemplate jmsTemplate;
@JmsListener(destination = "myTest")
// 可监听多个队列
// @JmsListeners(value = {@JmsListener(destination = "T1"), @JmsListener(destination = "T2")})
public void listener(String msg) {
if (!Objects.isNull(msg)) {
System.out.println(msg);
}
}
}
- “一切都是消息”--MSF(消息服务框架)之【发布-订阅】模式
- Android基础总结(4)——广播接收器
- “一切都是消息”--MSF(消息服务框架)之【请求-响应】模式(点对点)
- “老坛泡新菜”:SOD MVVM框架,让WinForms焕发新春
- 解决服务器SID引起虚拟机不能加入AD域用户,无法远程登录的问题
- 【Python环境】如何使用 Docker 快速配置数据科学开发环境?
- Java中UUID的2种创建方法——有代码实例
- 使用“消息服务框架”(MSF)实现分布式事务的三阶段提交协议(电商创建订单的示例)
- Android基础总结(3)——UI界面布局
- 常见.NET功能代码汇总 (2)
- 问题系列之Java中删除有序List的重复数据——提供两种方法
- 二叉树的基本概念和遍历
- Java中MD5加密算法实现方法——附上具体代码
- 新手,Visual Studio 2015 配置Boost库,如何编译和选择,遇到无法打开文件“libboost_thread-vc140-mt-gd-1_63.lib“的解决办法
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 一个价值百万的思路,如何下载去水印视频
- Go语言入门(十) Mysql与Redis操作
- 【Vue进阶】——如何实现组件属性透传?
- Go语言入门(九) 文件操作
- zookeeper完整详细版
- redis学习(十九)
- Android开发6年,互联网寒冬公司倒闭后,耗时3个月北上广求职,终拿到头条Offer!
- 直播软件开发如何使用FFMPEG推流并保存在本地
- react-router学习笔记
- 尤大 3 天前发在 GitHub 上的 vue-lit 是啥?
- BFE.dev前端刷题 23. 实现一个sum()方法
- 彻底深刻理解js原型链之prototype,proto以及constructor(一)
- SAP Spartacus取cart的HTTP请求
- 记一次Netty连接池FixedChannelPool连接未释放问题的排查总结
- 神经网络中的蒸馏技术,从Softmax开始说起