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的两种方式 前言:公 ...
随机推荐
- go微服务框架kratos学习笔记五(kratos 配置中心 paladin config sdk [断剑重铸之日,骑士归来之时])
目录 go微服务框架kratos学习笔记五(kratos 配置中心 paladin config sdk [断剑重铸之日,骑士归来之时]) 静态配置 flag注入 在线热加载配置 远程配置中心 go微 ...
- 洛谷$P$3241 开店 $[HNOI2015]$ 主席树/点分治
正解:主席树/动态点分治 解题报告: 传送门! $umm$淀粉质的话要是动态的我还不会$QAQ$,,,所以先写下主席树的题解昂$QwQ$ 题目大意是说,给定一棵树,树上每个点都有个值,然后有若干个询问 ...
- structs2的048漏洞复现 2.3.32版本
S2-048 远程代码执行漏洞 影响版本: 2.0.0 - 2.3.32 之前在网上说只要时2.3.*的版本都有这个漏洞,自己装了个2.3.34的试了几次都没有执行 然后下载了找到了这篇文章才知道影响 ...
- Netty快速入门(09)channel组件介绍
书接上回,继续介绍组件. ChannelHandler组件介绍 ChannelHandler组件包含了业务处理核心逻辑,是由用户自定义的内容,开发人员百分之九十的代码都是ChannelHandler. ...
- cesium加载WFS服务(GeoServer发布)
需求: 为了便于前端渲染数据,自定义图层渲染. 思路: 获取地图服务中的要素进行渲染. 工具: GeoServer 2.6.4,cesium, 思路有了就开始找资料写代码,cesium有接口可以加载W ...
- JAVA封装、继承、多态
封装 1.概念: 将类的某些信息隐藏在类的内部,不允许外部程序访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问. 2.好处: a.只能通过规定的方法访问数据 b.隐藏类的实例细节,方便修改和实 ...
- APICloud开发者进阶之路 |纯手工编写日程表功能
本文出自APICloud官方论坛, 感谢论坛版主 赵永亮 的分享. 最近看论坛内关于极光推送的问题有很多, 本想写一个关于极光的详细教程的,无奈已经有很多大牛分享过了,所以只得纯手工写了一个日程表,可 ...
- 树上点分治 poj 1741
Give a tree with n vertices,each edge has a length(positive integer less than 1001). Define dist(u,v ...
- .net生成荣誉证书
参考:https://blog.csdn.net/ljk126wy/article/details/84299373 采用生成pdf 方式 效果如下: 用adobe acrobat 制作一个模板 ...
- P1559 运动员最佳匹配问题 by hyl 天梦
#include<iostream> using namespace std; int n; int maxx[21][21]; int lie[21]; int aa[21]; int ...