刚好最近同事问我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. java中获取url传值时的int类型参数的方法

    int parameterName=Integer.valueOf(request.getParameter("你所要获得的int类型的参数名"));

  2. docker安装启动、配置MySql

    1.安装mysql镜像 docker pull mysql/mysql-server 2.docker中启动Mysql容器 docker run --name mysql01 -d -p 3306:3 ...

  3. 【题解】NOIP2016 提高组 简要题解

    [题解]NOIP2016 提高组 简要题解 玩具迷题(送分) 用异或实现 //@winlere #include<iostream> #include<cstdio> #inc ...

  4. $AT2292\ Division\ into\ Two$ $dp$

    正解:$dp$ 解题报告: 传送门$QwQ$ 不妨令$A\geq B$,于是先$sort$然后预处理判下如果有三个元素两两差都小于$B$的就直接$GG$了. 然后考虑对集合$X$进行$dp$,剩下的数 ...

  5. 「2018-11-05模拟赛」T5 传送机 解题报告

    5.传送机(sent.*) 问题描述: 黄黄同学要到清华大学上学去了.黄黄同学很喜欢清华大学的校园,每次去上课时总喜欢把校园里面的每条路都走一遍,当然,黄黄同学想每条路也只走一遍. 我们一般人很可能对 ...

  6. 「CF86D」Powerful array 解题报告

    题面 给出一个\(n\)个数组成的数列\(a\),有\(t\)次询问,每次询问为一个\([l,r]\)的区间,求区间内每种数字出现次数的平方×数字的值 的和 思路: 直接上莫队咯 然后就T了 没学过莫 ...

  7. 手把手带你了解消息中间件(2)——RabbitMQ

    RabbitMQ官网: http://www.rabbitmq.com/ Erlang官网:https://www.erlang.org 友情提示:RabbitMQ基于Erlang语言开发的,要想使用 ...

  8. 2020 年了,Java 日志框架到底哪个性能好?——技术选型篇

    大家好,之前写(shui)了两篇其他类型的文章,感觉大家反响不是很好,于是我乖乖的回来更新硬核技术文了. 经过本系列前两篇文章我们了解到日志框架大战随着 SLF4j 的一统天下而落下帷幕,但 SLF4 ...

  9. Spring Boot2 系列教程 (十二) | 整合 thymeleaf

    前言 如题,今天介绍 Thymeleaf ,并整合 Thymeleaf 开发一个简陋版的学生信息管理系统. SpringBoot 提供了大量模板引擎,包含 Freemarker.Groovy.Thym ...

  10. dp-最长回文串

    博客 : http://blog.csdn.net/hao_zong_yin/article/details/72730732 问题描述: 求一个序列中的最长回文串,这个串可以不连续 , 如  { 1 ...