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);
}
}
}
- 教程从头开始在Python中实现k最近邻居
- 建立安全的 AI
- Python NLTK 自然语言处理入门与例程
- 漏洞预警 | Apache Struts2 曝任意代码执行漏洞 (S2-045,CVE-2017-5638)
- 详解OSSIM-OSSEC WIN 4771案例
- JSShell:一个基于python的交互式Shell
- golang中操作excel
- 企业安全漏洞通告引擎
- 通过httprouter和redis框架搭建restful api服务
- .NET Core 实现定时抓取博客园首页文章信息并发送到邮箱
- 基于 R 语言和 SPSS 的决策树算法介绍及应用
- Android 8.0 中的安全增强功能
- python2 群发 html 或文本邮件
- windows 安装 storm 及 eclipse 调试 TopN 实例
- 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 数组属性和方法
- javascript之闭包基础了解
- Python中的多处理与多线程:新手简介
- Fortran中的陷阱-NAMELIST
- 当Excel遇到大数据问题,是时候用Python来拯救了
- PySCF程序包平均场计算的一些收敛技巧
- 你应该知道的10个Python文件系统方法
- 适合初学者的Python装饰器的简易教程
- 一起刷Leetcode第一篇,数组和字典的妙用
- 加速Python列表和字典,让你代码更加高效
- 如何使用Python的Flask和谷歌app Engine来构建一个web app
- 如何用Python实现电子邮件的自动化
- 在Win下安装Visual Studio和Parallel Studio XE
- 我们将项目语言从Python转向Go的5个原因
- GFN-xTB的编译与API使用
- 红外光谱的理论计算