前面提到了原生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. 【题解】Luogu P2257 YY的GCD

    原题传送门 这题需要运用莫比乌斯反演(懵逼钨丝繁衍) 显然题目的答案就是\[ Ans=\sum_{i=1}^N\sum_{j=1}^M[gcd(i,j)=prime]\] 我们先设设F(n)表示满足\ ...

  2. tf.nn.max_pool

    tf.nn.max_pool(value, ksize, strides, padding, name=None)   参数是四个,和卷积很类似: Args Annotation 第一个参数value ...

  3. Python 基础指令

    ## Python 基础指令 ```Shell $ pip install ipython== # 安装指定版本的python第三方库 $ python --version #查看版本 $ which ...

  4. Python3基础 dict 推导式 生成10以内+奇数的值为True 偶数为False的字典

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  5. php编程疑难解决-1

    全局变量和超全局变量 如果是php脚本script 或php代码, 一定要放在 php标签内<?php ?> 内. 这样apache才会把他当做php脚本内容来解析, 才会去调用php模块 ...

  6. fedora安装了phpmyadmin后, mariadb无法启动?

    参考:http://www.linuxidc.com/Linux/2015-10/123945.htm where, which, when,等不但可以用在从句中, 而且可以用在 动词不定式中, 如: ...

  7. Python中的open和codecs.open

    最近老被编码困扰,多次折腾之后,感觉python的编解码做得挺好的,只要了解下边的流程,一般都能解决 input文件(gbk, utf-8...) ----decode-----> unicod ...

  8. 【修改密码】Linux下修改Mysql的用户(root)的密码

    修改的用户都以root为列.一.拥有原来的myql的root的密码: 方法一:在mysql系统外,使用mysqladmin# mysqladmin -u root -p password " ...

  9. Unsupervised Image-to-Image Translation Networks --- Reading Writing

    Unsupervised Image-to-Image Translation Networks --- Reading Writing 2017.03.03 Motivations: most ex ...

  10. 剥开比原看代码13:比原是如何通过/list-balances显示帐户余额的?

    作者:freewind 比原项目仓库: Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockchai ...