SpringBoot使用JMS(activeMQ)的两种方式 队列消息、订阅/发布
刚好最近同事问我activemq的问题刚接触所以分不清,前段时间刚好项目中有用到,所以稍微整理了一下,仅用于使用
1.下载ActiveMQ
地址:http://activemq.apache.org/download.html
2.启动ActiceMQ
windows版本直接双击启动bin/win64/activemq.bat
linux版本也是下载解压在bin/linux-x86-64或者linux-x86-32下
cd apache-activemq-5.14.1/bin/linux-x86-64/
./activemq start
启动完成之后,浏览器输入:http://localhost:8161/admin 会显示如下界面就证明成功了

浏览器输入:http://localhost:8161/admin/queues.jsp 需要输入账户密码默认:admin/admin
则会显示消息队列主题等信息

3.Springboot配置ActiveMQ
加入activemq 依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
配置连接属性:
如果是properties后缀文件
spring.activemq.broker-url=tcp://localhost:61616
spring.activemq.user=admin
spring.activemq.password=admin
spring.activemq.pool.enabled=false
如果是yml后缀文件
spring:
profiles : dev
application:
name: user-service
activemq:
broker-url: tcp://localhost:61616
user: admin
password: admin
in-memory: true
pool:
enabled: true
max-connections: 500
4.消息队列的使用
生产者、消费者模式
创建生产者
package org.tfkf.minsurance.jms.activemq; import javax.jms.Destination; import org.apache.activemq.command.ActiveMQQueue;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.stereotype.Component; /**
*
* @Author zyt
* @Date 2018/3/15 17:39
*/
@Component
public class Producer { @Autowired
private JmsMessagingTemplate jmsMessagingTemplate; /**
* 消息发送
* @param destinationName
* @param message
* @return
*/
public boolean sendMessage(final String message,String destinationName) {
boolean result = true;
try {
Destination destination = new ActiveMQQueue(destinationName);
jmsMessagingTemplate.convertAndSend(destination, message);
} catch (Exception e) {
e.printStackTrace();
result = false;
}
return result;
}
}
创建消费者,@JmsListener注解,在java7及以下版本jdk中,可以使用@JmsListeners代替它。
@JmsListener(destination = "name.msg")
public void receive(String message){
System.out.println("name.msg消费者:"+message);
}
我们封装一个调用例子

调用实例

返回结果

5.发布/订阅模式
先发布一个话题
package org.tfkf.minsurance.jms.activemq; import javax.jms.Destination; import org.apache.activemq.command.ActiveMQTopic;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.stereotype.Component; /**
*
* @Author zyt
* @Date 2018/3/15 17:40
*/
@Component
public class Producer { @Autowired
private JmsMessagingTemplate jmsMessagingTemplate; /**
* 发布者 发布topic
* @param destinationName
* @param message
* @return
*/
public boolean publish(String destinationName, final String message) {
boolean result = true;
try {
Destination destination = new ActiveMQTopic(destinationName);
jmsMessagingTemplate.convertAndSend(destination, message);
} catch (Exception e) {
e.printStackTrace();
result = false;
}
return result;
}
}
订阅者
package org.tfkf.minsurance.jms.activemq; import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component; /**
*
* @Author zyt
* @Date 2018/3/15 17:41
*/
@Component
public class Consumer { @JmsListener(destination = "login.topic",containerFactory = "myJmsContainerFactory")
public void subscribe(String message){
System.out.println("login.topic订阅者一:"+message);
} @JmsListener(destination = "login.topic",containerFactory = "myJmsContainerFactory")
public void subscribe1(String message){
System.out.println("login.topic订阅者二:"+message);
}
}
在pub/sub模式中,对消息的监听需要对containerFactory进行以下配置
package org.tfkf.minsurance.user.config; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jms.config.JmsListenerContainerFactory;
import org.springframework.jms.config.SimpleJmsListenerContainerFactory;
import javax.jms.ConnectionFactory; @Configurationpublic class ConfigBase{ /**
* 在pub/sub模式中,对消息的监听需要对containerFactory进行以下配置
* @param connectionFactory
* @return
*/
@Bean
public JmsListenerContainerFactory<?> myJmsContainerFactory(ConnectionFactory connectionFactory){
SimpleJmsListenerContainerFactory factory = new SimpleJmsListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
factory.setPubSubDomain(true);
return factory;
} }
封装调用

调用实例

返回结果

两种模式实践就ok了
SpringBoot使用JMS(activeMQ)的两种方式 队列消息、订阅/发布的更多相关文章
- springboot中使用异步的常用两种方式及其比较
一般对于业务复杂的流程,会有一些处理逻辑不需要及时返回,甚至不需要返回值,但是如果充斥在主流程中,占用大量时间来处理,就可以通过异步的方式来优化.实现异步的常用方法远不止两种,但是个人经验常用的,好用 ...
- SpringBoot处理静态资源的两种方式
静态资源是指----> CSS.JS之类的文件 首先创建SpringBoot Web项目 添加Spring Boot Web Starter <dependency> <gro ...
- 【SpringBoot】04.SpringBoot整合Filter的两种方式
SpringBoot整合Filter过滤器的两种方式: 1.通过扫描注解完成Filter组件注册 创建一个类,实现Filter接口,实现doFilter()方法 在该类使用注解@WebFilter,设 ...
- ActiveMQ消息传递的两种方式
1.什么是ActiveMQ? ActiveMQ是apache提供的开源的,实现消息传递的一个中间插件,可以和spring整合,是目前最流行的开源消息总线,ActiveMQ是一个完全支持JMS1.1和J ...
- springboot 注册服务注册中心(zk)的两种方式
在使用springboot进行开发的过程中,我们经常需要处理这样的场景:在服务启动的时候,需要向服务注册中心(例如zk)注册服务状态,以便当服务状态改变的时候,可以故障摘除和负载均衡. 我遇到过两种注 ...
- spring boot @ResponseBody转换JSON 时 Date 类型处理方法,Jackson和FastJson两种方式,springboot 2.0.9配置fastjson不生效官方解决办法
spring boot @ResponseBody转换JSON 时 Date 类型处理方法 ,这里一共有两种不同解析方式(Jackson和FastJson两种方式,springboot我用的1.x的版 ...
- 引入springboot的两种方式以及springboot容器的引入
一.在项目中引入springboot有两种方式: 1.引入spring-boot-starter-parent 要覆盖parent自带的jar的版本号有两种方式: (1)在pom中重新引入这个jar, ...
- SpringBoot整合Servlet的两种方式
SpringBoot整合Servlet有两种方式: 1.通过注解扫描完成Servlet组件的注册: 2.通过方法完成Servlet组件的注册: 现在简单记录一下两种方式的实现 1.通过注解扫描完成Se ...
- springboot整合mybatis的两种方式
https://blog.csdn.net/qq_32719003/article/details/72123917 springboot通过java bean集成通用mapper的两种方式 前言:公 ...
随机推荐
- Python学习3月5号【python编程 从入门到实践】---》笔记(2)
1.操作列表 一.遍历整个列表,并且想对每一个元素执行相同的操作.##这里就不得不提起我们一直用的For函数了. 二.深入地研究循环 (1)for i in superheroes:##首先读取其 ...
- $[NOIp2017]$ 逛公园 $dp$/记搜
\(Des\) 给定一个有向图,起点为\(1\),终点为\(n\),求和最短路相差不超过\(k\)的路径数量.有\(0\)边.如果有无数条,则输出\(-1\). \(n\leq 10^5,k\leq ...
- VS运行速度缓慢卡顿 2020年1月3日23:25:35
Java中一个类文件对应一个类 C#中一个类文件中可以包含多个类 使用visual studio2017过程中,发现启动调试时,总是会很慢,结束调试也会很慢,在这里可以通过关闭掉IntelliTrac ...
- 虚拟DOM学习与总结
虚拟DOM 虚拟DOM简而言之就是,用JS去按照DOM结构来实现的树形结构对象,一般称之为虚拟节点(VNode) 优点:解决浏览器性能问题 ,真实DOM频繁排版与重绘的效率是相当低的,虚拟DOM进行频 ...
- 文档对象DOM的操作及使用
Dom对象是什么? DOM对象就是每次你打开浏览器后,进入一个网址时浏览器获取到的HTML文本内容,当浏览器获取到HTML文本内容时,会将其内容以DOM对象的形式缓存到内存中,这时你便可以对DOM对象 ...
- Go中的Package和Module分析
Package 所谓package(包)其实就是代码的一种组织管理方式,代码多了就需要放入文件,文件多了就需要归类放入文件夹,就好比我们在给电脑装软件时会进行归类安装,其实也是有意无意对电脑软件安装的 ...
- netcore 自动生成Dockerfile的坑
简介 之前采用shell脚本+dockerfile的方式构建项目,后来发现有Docker在17.05版本之后有多阶段构建方式,该文主要记录了netcore采用dockerfile构建遇到的坑. 原 ...
- VS Code配置C/C++环境
VS Code配置C/C++环境 一.下载和安装VS Code 1.访问VS Code官网下载安装包 2.安装VS Code 3. 安装后, 打开VS Code是英文,按住Ctrl+shift+x进入 ...
- 我们为什么会删除不了集群的 Namespace?
作者 | 声东 阿里云售后技术专家 导读:阿里云售后技术团队的同学,每天都在处理各式各样千奇百怪的线上问题.常见的有网络连接失败.服务器宕机.性能不达标及请求响应慢等.但如果要评选的话,什么问题看起 ...
- schedule of 2016-10-24~2016-10-30(Monday~Sunday)——1st semester of 2nd Grade
2016/10/24 Monday forcus:find a way to try to recognize emotions in database2.0(see ppt Week 7) 1.pr ...