刚好最近同事问我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)的两种方式 队列消息、订阅/发布的更多相关文章

  1. springboot中使用异步的常用两种方式及其比较

    一般对于业务复杂的流程,会有一些处理逻辑不需要及时返回,甚至不需要返回值,但是如果充斥在主流程中,占用大量时间来处理,就可以通过异步的方式来优化.实现异步的常用方法远不止两种,但是个人经验常用的,好用 ...

  2. SpringBoot处理静态资源的两种方式

    静态资源是指----> CSS.JS之类的文件 首先创建SpringBoot Web项目 添加Spring Boot Web Starter <dependency> <gro ...

  3. 【SpringBoot】04.SpringBoot整合Filter的两种方式

    SpringBoot整合Filter过滤器的两种方式: 1.通过扫描注解完成Filter组件注册 创建一个类,实现Filter接口,实现doFilter()方法 在该类使用注解@WebFilter,设 ...

  4. ActiveMQ消息传递的两种方式

    1.什么是ActiveMQ? ActiveMQ是apache提供的开源的,实现消息传递的一个中间插件,可以和spring整合,是目前最流行的开源消息总线,ActiveMQ是一个完全支持JMS1.1和J ...

  5. springboot 注册服务注册中心(zk)的两种方式

    在使用springboot进行开发的过程中,我们经常需要处理这样的场景:在服务启动的时候,需要向服务注册中心(例如zk)注册服务状态,以便当服务状态改变的时候,可以故障摘除和负载均衡. 我遇到过两种注 ...

  6. spring boot @ResponseBody转换JSON 时 Date 类型处理方法,Jackson和FastJson两种方式,springboot 2.0.9配置fastjson不生效官方解决办法

    spring boot @ResponseBody转换JSON 时 Date 类型处理方法 ,这里一共有两种不同解析方式(Jackson和FastJson两种方式,springboot我用的1.x的版 ...

  7. 引入springboot的两种方式以及springboot容器的引入

    一.在项目中引入springboot有两种方式: 1.引入spring-boot-starter-parent 要覆盖parent自带的jar的版本号有两种方式: (1)在pom中重新引入这个jar, ...

  8. SpringBoot整合Servlet的两种方式

    SpringBoot整合Servlet有两种方式: 1.通过注解扫描完成Servlet组件的注册: 2.通过方法完成Servlet组件的注册: 现在简单记录一下两种方式的实现 1.通过注解扫描完成Se ...

  9. springboot整合mybatis的两种方式

    https://blog.csdn.net/qq_32719003/article/details/72123917 springboot通过java bean集成通用mapper的两种方式 前言:公 ...

随机推荐

  1. Web的大趋势:Java+大前端

    前后端分离,是目前Web开发的主流模式.而Java无疑是后端开发的王者,PHP和.NET目前仍处于水深火热之中,更像是在夹缝中求生存.而大前端,强势崛起!Java+大前端这一强强组合,面对其他Web领 ...

  2. [梁山好汉说IT] 梁山好汉和抢劫银行

    [梁山好汉说IT] 梁山好汉和抢劫银行 0x00 摘要 今天看了一篇文章<史上最有学问的银行劫匪,教你如何把握人生重大机会>.先摘录精华如下,然后看看梁山好汉在类似情况下如何处理 (东京汴 ...

  3. Spring||Mails

    JMail可以解决Java发送邮件,通过Jmail的核心javax.mail.jar实现,通过Jmail发送邮件需要经过以下步骤 1.创建解析邮件内容:Message类,通过javax.mail.in ...

  4. 小白进阶之路-python格式化输出

    1.不使用格式化前:传值时比较麻烦而且不精确. 2.格式化输出后,%代表先占个位,s代表字符串,%s代表这里之后会传一个字符串类型的值,%s其实可以接受任意类型的值:%d传入的值要求必须是数字. %s ...

  5. 对 Redux 一头雾水?看完这篇就懂了

    首先,学习 Redux 可能会很困难 当你终于学会了如何使用 React,也有了自己去构建一些应用的信心,那会是一种非常棒的感觉.你学会了管理状态,一切看起来井井有条.但是,很有可能这就到了你该学习 ...

  6. 用Eclipse和Tomcat搭建一个本地服务器

    服务器软件环境 Eclipse oxygen Tomcat 9.0 SQL Sever 2014 参考资料 https://blog.csdn.net/qq_21154101/article/deta ...

  7. 从零开始学asyncio(上)

    这篇文章主要是介绍生成器和IO多路复用机制, 算是学习asyncio需要的预备知识. 这个系列还有另外两篇文章: 从零开始学asyncio(中) 从零开始学asyncio(下) 一. 简单爬虫实例 首 ...

  8. Go 每日一库之 flag

    缘起 我一直在想,有什么方式可以让人比较轻易地保持每日学习,持续输出的状态.写博客是一种方式,但不是每天都有想写的,值得写的东西. 有时候一个技术比较复杂,写博客的时候经常会写着写着发现自己的理解有偏 ...

  9. webpack 三

    之前06年写了两篇自己研究webpack的文章,由于webpack已经升到了4.x,今天用起来发现有点小变化,重新自己建一个简单的项目,这里记录一下过程 1.安装webpack和webpack-cli ...

  10. LeetCode刷题预备知识(二)

    Python四大数据结构的属性及方法 在LeetCode刷题预备知识一中我们掌握了常见的内置函数,和四大数据结构的基本概念: 但只掌握这些还远远不够,我们还需了解四大数据结构的属性及方法才能更高效快速 ...