前面提到了原生API访问ActiveMQ和Spring集成ActiveMQ。今天讲一下SpringBoot集成ActiveMQ.
SpringBoot就是为了解决我们的Maven配置烦恼而生,因此使用SpringBoot无疑就会让我们减少很多繁琐的xml配置。具体操作如下:
1.pom.xml
2.application.properties
3.启动类ActiveBootApplication
4.生产者Producer
5.消费者Consumer

6.测试代码

1.pom.xml

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

2.application.properties

# 用户名和密码都是空
spring.activemq.broker-url=tcp://localhost:
spring.activemq.user=
spring.activemq.password=
spring.activemq.in-memory=true
# 不使用连接池
spring.activemq.pool.enabled=false

3.启动类ActiveBootApplication

@SpringBootApplication
@EnableJms //必须要启动
public class ActiveBootApplication { public static void main(String[] args) {
SpringApplication.run(ActiveBootApplication.class, args);
}
}

4.生产者Producer

@Service
public class Producer {
@Autowired // 也可以注入JmsTemplate,JmsMessagingTemplate对JmsTemplate进行了封装 ,JmsTemplate可以进行更为细微的操作
private JmsMessagingTemplate jmsTemplate; public void sendMessage(Destination destination, final String message){
jmsTemplate.convertAndSend(destination, message);
}
}

5.消费者Consumer

@Component
public class Consumer {
// 使用JmsListener配置消费者监听的队列,其中text是接收到的消息
@JmsListener(destination = "mytest.queue")
public void receiveQueue(String text) {
System.out.println(this.getClass().getName() + " 收到的报文为:" + text);
}
}

6.测试代码

@RunWith(SpringRunner.class)
@SpringBootTest //springboot测试注解
public class ActiveBootApplicationTests { @Autowired
private Producer producer; @Test
public void contextLoads() {
//定义队列模式,而非Topic模式
Destination destination = new ActiveMQQueue("mytest.queue"); for (int i = 0; i < 5; i++) {
String msg = "Hello World!" + i;
producer.sendMessage(destination, msg);
System.out.println("send:" + msg);
}
}
}

注意:

1.必须要启动@EnableJms

2.次示例没有池化

3.测试代码里面定义点对点模式还是订阅模式


下面再对池化的代码进行说明:

1.application.properties修改如下:

spring.activemq.broker-url=tcp://localhost:
spring.activemq.user=
spring.activemq.password=
spring.activemq.in-memory=true # 启动池化
spring.activemq.pool.enabled=true
# 最大连接数
spring.activemq.pool.max-connections=
#表示空闲多少时间将被清理,而expiry-timeout则表示创建之后多少时间后就会被清理(0表示永不过期)
spring.activemq.pool.idle-timeout=
spring.activemq.pool.expiry-timeout=

2.增加配置类ActiveMqConfiguration

@Configuration
public class ActiveMqConfiguration { @Value("${spring.activemq.user}")
private String usrName; @Value("${spring.activemq.password}")
private String password; @Value("${spring.activemq.broker-url}")
private String brokerUrl;   //池化必须配置,否者会出现找不到org.springframework.jms.core.JmsMessagingTemplate的异常
@Bean
public ConnectionFactory connectionFactory(){
ActiveMQConnectionFactory connectionFactory
= new ActiveMQConnectionFactory();
connectionFactory.setBrokerURL(brokerUrl);
connectionFactory.setUserName(usrName);
connectionFactory.setPassword(password);
return connectionFactory;
} }

其它代码保持一致即可。


下面对Topic的监听进行说明:

1.需要指定消费者的监听类型为Topic,即订阅模式,在ActiveMqConfiguration增加代码:

@Bean("jmsTopicListenerContainerFactory")
public JmsListenerContainerFactory<?> jmsTopicListenerContainerFactory(
ConnectionFactory connectionFactory
){
DefaultJmsListenerContainerFactory factory
= new DefaultJmsListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
factory.setPubSubDomain(true);
return factory;
}

2.消费者注解增加containerFactory

@Component
public class Consumer {
// 使用JmsListener配置消费者监听的队列,其中text是接收到的消息
@JmsListener(destination = "mytest.queue",containerFactory="jmsTopicListenerContainerFactory")
public void receiveQueue(String text) {
System.out.println(this.getClass().getName() + " 收到的报文为:" + text);
}
}

注意containerFactory的值和前面定义Bean的名称保持一直。不写containerFactory就表示队列模式。

SpringBoot集成ActiveMQ的更多相关文章

  1. 使用SpringBoot集成ActiveMQ

    SpringBoot是个好东西,好多java常用的东西都被集成进去了 JMS 在 Spring Boot 中的使用 使用Spring/Spring Boot集成JMS的陷阱 Spring-boot J ...

  2. SpringBoot集成ActiveMq消息队列实现即时和延迟处理

    原文链接:https://blog.csdn.net/My_harbor/article/details/81328727 一.安装ActiveMq 具体安装步骤:自己谷歌去 二.新建springbo ...

  3. Web项目容器集成ActiveMQ & SpringBoot整合ActiveMQ

    集成tomcat就是随项目启动而启动tomcat,最简单的方法就是监听器监听容器创建之后以Broker的方式启动ActiveMQ. 1.web项目中Broker启动的方式进行集成 在这里采用Liste ...

  4. Springboot简单集成ActiveMQ

    Springboot简单集成ActiveMQ 消息发送者的实现 pom.xml添加依赖 <dependency> <groupId>org.springframework.bo ...

  5. SpringBoot集成Zipkin实现分布式全链路监控

    目录 Zipkin 简介 Springboot 集成 Zipkin 安装启动 zipkin 版本说明 项目结构 工程端口分配 引入 Maven 依赖 配置文件.收集器的设置 编写 Controller ...

  6. 从零开始学 Java - Spring 集成 ActiveMQ 配置(一)

    你家小区下面有没有快递柜 近两年来,我们收取快递的方式好像变了,变得我们其实并不需要见到快递小哥也能拿到自己的快递了.对,我说的就是类似快递柜.菜鸟驿站这类的代收点的出现,把我们原来快递小哥必须拿着快 ...

  7. 从零开始学 Java - Spring 集成 ActiveMQ 配置(二)

    从上一篇开始说起 上一篇从零开始学 Java - Spring 集成 ActiveMQ 配置(一)文章中讲了我关于消息队列的思考过程,现在这一篇会讲到 ActivMQ 与 Spring 框架的整合配置 ...

  8. 在Spring下集成ActiveMQ

    1.参考文献 Spring集成ActiveMQ配置 Spring JMS异步发收消息 ActiveMQ 2.环境 在前面的一篇ActiveMQ入门实例中我们实现了消息的异步传送,这篇博文将如何在spr ...

  9. 在spring环境下集成ActiveMQ

    1.参考文献 Spring集成ActiveMQ配置 Spring JMS异步发收消息 ActiveMQ 2.环境 在前面的一篇ActiveMQ入门实例中我们实现了消息的异步传送,这篇博文将如何在spr ...

随机推荐

  1. Java1的内容(学期总结)

  2. 01: flask基础

    1.1 flask介绍   参考博客: https://www.cnblogs.com/sss4/p/8097653.html 1.django.tornado.flask比较 1. Django:1 ...

  3. 桌面版Ubuntu系统固定IP设置和Network-manager设置

    我自己的学校是绑定MAC和IP上网的.这种方法名义上说是为了安全,不过是个搞计算机的都知道随便修改一下MAC就可以使用别人的IP了. 不提蛋疼的事情了,先来说说网络的配置吧 我用的是Ubuntu14. ...

  4. GDPR

    http://column.caijing.com.cn/20180523/4457753.shtml

  5. topcoder srm 495 div1

    problem1 link 从前向后确定一下,然后再从后向前确定一下.一样的话就是可以确定的. problem2 link 首先将强连通分量缩点.理论上来说,只需要遍历所有入度为0的联通块中的一个即可 ...

  6. UFS和EMMC的区别--原理学习【转】

    本文转载自:https://blog.csdn.net/shenjin_s/article/details/79761425 UFS PK EMMC UFS作为目前安卓智能手机最先进的非易失存储器(N ...

  7. Ping 不通的原因分析

    背景 简介 ping是常用的网络管理命令,ping也属于一个通信协议,是TCP/IP协议的一部分,适用于windows和linux以及unix 根据reply用来检查网络是否通畅&网络连接的速 ...

  8. AtCoder Beginner Contest 120 解题报告

    为啥最近都没有arc啊... A - Favorite Sound #include <algorithm> #include <iostream> #include < ...

  9. (转载)winform图片标尺控件

    最近要做个winform的东西,要在里面集成一个类似Windows自带画图的标尺功能,还要能在图片上画矩形框.在网上找了好久也没找到写好的控件,无奈自己做了一个. 目前还有些bug,这里先做个分享.( ...

  10. UVA 11019 Matrix Matcher(哈希)

    题意 给定一个 \(n\times m\) 的矩阵,在给定一个 \(x\times y\) 的小矩阵,求小矩阵在大矩阵中出现的次数. \(1 \leq n,m \leq 1000\) \(1\leq ...