1.项目结构如下

pom.xml文件如下

  <dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency> <!--消息队列连接池-->
<!--<dependency>-->
<!--<groupId>org.apache.activemq</groupId>-->
<!--<artifactId>activemq-pool</artifactId>-->
<!--<version>5.15.0</version>-->
<!--</dependency>-->
</dependencies>

pom.xml

2.创建消息提供者

pom.xml文件如下

  <dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency> <!--消息队列连接池-->
<!--<dependency>-->
<!--<groupId>org.apache.activemq</groupId>-->
<!--<artifactId>activemq-pool</artifactId>-->
<!--<version>5.15.0</version>-->
<!--</dependency>-->
</dependencies>

pom.xml

2.1 创建属性文件如下:

 server.port=8080
server.servlet.context-path=/pro
spring.activemq.user=admin
spring.activemq.password=admin
#集群配置
#spring.activemq.broker-url=failover:(tcp://localhost:61616,tcp://localhost:61617)
#整合jms测试,安装在别的机器,防火墙和端口号记得开放
spring.activemq.broker-url=tcp://192.168.117.152:61617
queueName=publish.queue
topicName=publish.topic #ActiveMQ是消息队列技术,为解决高并发问题而生
#ActiveMQ生产者消费者模型(生产者和消费者可以跨平台、跨系统)
#ActiveMQ支持如下两种消息传输方式
#点对点模式,生产者生产了一个消息,只能由一个消费者进行消费
#发布/订阅模式,生产者生产了一个消息,可以由多个消费者进行消费

application.properties

2.2 定义消息队列类ActiveMQConfig.java

 package cn.kgc.config;

 import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.command.ActiveMQQueue;
import org.apache.activemq.command.ActiveMQTopic;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jms.config.DefaultJmsListenerContainerFactory;
import org.springframework.jms.config.JmsListenerContainerFactory; import javax.jms.Queue;
import javax.jms.Topic;
//定义消息队列
@Configuration
public class ActiveMQConfig { @Value("${queueName}")
private String queueName; @Value("${topicName}")
private String topicName; @Value("${spring.activemq.user}")
private String usrName; @Value("${spring.activemq.password}")
private String password; @Value("${spring.activemq.broker-url}")
private String brokerUrl; //定义存放消息的队列
@Bean
public Queue queue(){
return new ActiveMQQueue(queueName);
} @Bean
public Topic topic(){
return new ActiveMQTopic(topicName);
} @Bean
public ActiveMQConnectionFactory connectionFactory() {
return new ActiveMQConnectionFactory(usrName, password, brokerUrl);
} @Bean
public JmsListenerContainerFactory<?> jmsListenerContainerQueue(ActiveMQConnectionFactory connectionFactory){
DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory();
bean.setConnectionFactory(connectionFactory);
return bean;
} @Bean
public JmsListenerContainerFactory<?> jmsListenerContainerTopic(ActiveMQConnectionFactory connectionFactory){
DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory();
//设置为发布订阅方式, 默认情况下使用的生产消费者方式
bean.setPubSubDomain(true);
bean.setConnectionFactory(connectionFactory);
return bean;
}
}

ActiveMQConfig.java

2.3 定义消息队列类PublishController.java

 package cn.kgc.controller;

 import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import javax.jms.Queue;
import javax.jms.Topic; @RestController
@RequestMapping("/publish")
public class PublishController { //注入springboot封装的工具类
@Autowired
private JmsMessagingTemplate jms; //注入存放消息的队列,用于下列方法一
@Autowired
private Queue queue; @Autowired
private Topic topic; @RequestMapping("/queue")
public String queue(){ for (int i = 0; i < 10 ; i++){ //方法一:添加消息到消息队列
jms.convertAndSend(queue, "queue"+i);
} return "queue 发送成功";
} @JmsListener(destination = "out.queue")
public void consumerMsg(String msg){
System.out.println(msg);
} @RequestMapping("/topic")
public String topic(){ for (int i = 0; i < 10 ; i++){
jms.convertAndSend(topic, "topic"+i);
} return "topic 发送成功";
}
}

PublishController.java

2.4 启动类

 package cn.kgc;

 import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.jms.annotation.EnableJms;
//启动消息队列
@EnableJms
@SpringBootApplication
public class ProviderApplication { public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
} }

ProviderApplication.java

3.创建调用者项目a

3.1 编辑属性文件application.properties

 server.port=8081
server.servlet.context-path=/cona
spring.activemq.user=admin
spring.activemq.password=admin
spring.activemq.broker-url=tcp://192.168.117.152:61617
queueName=publish.queue
topicName=publish.topic

application.properties

3.2 消息队列参数类ActiveMQConfig.java

 package cn.kgc.config;

 import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.command.ActiveMQQueue;
import org.apache.activemq.command.ActiveMQTopic;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jms.config.DefaultJmsListenerContainerFactory;
import org.springframework.jms.config.JmsListenerContainerFactory; import javax.jms.Queue;
import javax.jms.Topic; @Configuration
public class ActiveMQConfig { @Value("${queueName}")
private String queueName; @Value("${topicName}")
private String topicName; @Value("${spring.activemq.user}")
private String usrName; @Value("${spring.activemq.password}")
private String password; @Value("${spring.activemq.broker-url}")
private String brokerUrl; @Bean
public Queue queue(){
return new ActiveMQQueue(queueName);
} @Bean
public Topic topic(){
return new ActiveMQTopic(topicName);
} @Bean
public ActiveMQConnectionFactory connectionFactory() {
return new ActiveMQConnectionFactory(usrName, password, brokerUrl);
} @Bean
public JmsListenerContainerFactory<?> jmsListenerContainerQueue(ActiveMQConnectionFactory connectionFactory){
DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory();
bean.setConnectionFactory(connectionFactory);
return bean;
} @Bean
public JmsListenerContainerFactory<?> jmsListenerContainerTopic(ActiveMQConnectionFactory connectionFactory){
DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory();
//设置为发布订阅方式, 默认情况下使用的生产消费者方式
bean.setPubSubDomain(true);
bean.setConnectionFactory(connectionFactory);
return bean;
}
}

ActiveMQConfig.java

3.3 队列监听

 package cn.kgc.listener;

 import org.springframework.jms.annotation.JmsListener;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.stereotype.Component; @Component
public class QueueListener {
@JmsListener(destination = "publish.queue", containerFactory = "jmsListenerContainerQueue")
@SendTo("out.queue")
public String receive(String text){
System.out.println("QueueListener: consumer-a 收到一条信息: " + text);
return "consumer-a received : " + text;
}
}

QueueListener.java

3.4 消息主题监听

 package cn.kgc.listener;

 import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component; @Component
public class TopocListener { @JmsListener(destination = "publish.topic", containerFactory = "jmsListenerContainerTopic")
public void receive(String text){
System.out.println("TopicListener: consumer-a 收到一条信息: " + text);
}
}

TopocListener.java

3.5 控制类 PublishController.java

 package cn.kgc.controller;

 import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import javax.jms.Queue;
import javax.jms.Topic; @RestController
@RequestMapping("/publish")
public class PublishController {
@Autowired
private JmsMessagingTemplate jms; @Autowired
private Queue queue; @Autowired
private Topic topic; @RequestMapping("/queue")
public String queue(){ for (int i = 0; i < 10 ; i++){
jms.convertAndSend(queue, "queue"+i);
} return "queue 发送成功";
} @JmsListener(destination = "out.queue")
public void consumerMsg(String msg){
System.out.println(msg);
} @RequestMapping("/topic")
public String topic(){ for (int i = 0; i < 10 ; i++){
jms.convertAndSend(topic, "topic"+i);
} return "topic 发送成功";
}
}

PublishController.java

4.创建调用者项目b

4.1 编辑属性文件application.properties

 server.port=8082
server.servlet.context-path=/conb
spring.activemq.user=admin
spring.activemq.password=admin
spring.activemq.broker-url=tcp://192.168.117.152:61617
queueName=publish.queue
topicName=publish.topic

application.properties

4.2 消息队列参数类ActiveMQConfig.java

ActiveMQConfig.java

4.3 队列监听

 package cn.kgc.listener;

 import org.springframework.jms.annotation.JmsListener;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.stereotype.Component; @Component
public class QueueListener {
@JmsListener(destination = "publish.queue", containerFactory = "jmsListenerContainerQueue")
@SendTo("out.queue")
public String receive(String text){
System.out.println("QueueListener: consumer-b 收到一条信息: " + text);
return "consumer-a received : " + text;
}
}

QueueListener.java

4.4 消息主题监听

 package cn.kgc.listener;

 import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component; @Component
public class TopocListener { @JmsListener(destination = "publish.topic", containerFactory = "jmsListenerContainerTopic")
public void receive(String text){
System.out.println("TopicListener: consumer-b 收到一条信息: " + text);
}
}

TopocListener.java

4.5 控制类 PublishController.java

 package cn.kgc.controller;

 import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import javax.jms.Queue;
import javax.jms.Topic; @RestController
@RequestMapping("/publish")
public class PublishController {
@Autowired
private JmsMessagingTemplate jms; @Autowired
private Queue queue; @Autowired
private Topic topic; @RequestMapping("/queue")
public String queue(){ for (int i = 0; i < 10 ; i++){
jms.convertAndSend(queue, "queue"+i);
} return "queue 发送成功";
} @JmsListener(destination = "out.queue")
public void consumerMsg(String msg){
System.out.println(msg);
} @RequestMapping("/topic")
public String topic(){ for (int i = 0; i < 10 ; i++){
jms.convertAndSend(topic, "topic"+i);
} return "topic 发送成功";
}
}

PublishController.java

请求:http://localhost:8080/pro/publish/queue

Number Of Pending Messages:消息队列中待处理的消息
Number Of Consumers:消费者的数量
Messages Enqueued:累计进入过消息队列的总量
Messages Dequeued:累计消费过的消息总量

请求:http://localhost:8080/pro/publish/topic

1.springboot+ActiveMQ的更多相关文章

  1. Springboot+ActiveMQ(ActiveMQ消息持久化,保证JMS的可靠性,消费者幂等性)

    ActiveMQ 持久化设置: 在redis中提供了两种持久化机制:RDB和AOF 两种持久化方式,避免redis宕机以后,能数据恢复,所以持久化的功能 对高可用程序来说 很重要. 同样在Active ...

  2. java springboot activemq 邮件短信微服务,解决国际化服务的国内外兼容性问题,含各服务商调研情况

    java springboot activemq 邮件短信微服务,解决国际化服务的国内外兼容性问题,含各服务商调研情况 邮件短信微服务 spring boot 微服务 接收json格式参数 验证参数合 ...

  3. ActiveMQ入门系列之应用:Springboot+ActiveMQ+JavaMail实现异步邮件发送

    现在邮件发送功能已经是几乎每个系统或网址必备的功能了,从用户注册的确认到找回密码再到消息提醒,这些功能普遍的会用到邮件发送功能.我们都买过火车票,买完后会有邮件提醒,有时候邮件并不是买完票立马就能收到 ...

  4. springboot+activemq中引入重发机制

    一.简介 在使用activemq消息中间件进行消息队列传输时,总会由于各种原因导致消息失败. 一个经典的场景是一个生成者向Queue中发消息,里面包含了一组邮件地址和邮件内容.而消费者从Queue中将 ...

  5. ActiveMQ的作用总结(应用场景及优势)以及springboot+activeMq 实战

      业务场景说明: 消息队列在大型电子商务类网站,如京东.淘宝.去哪儿等网站有着深入的应用, 队列的主要作用是消除高并发访问高峰,加快网站的响应速度. 在不使用消息队列的情况下,用户的请求数据直接写入 ...

  6. SpringBoot整合ActiveMQ发送邮件

    虽然ActiveMQ以被其他MQ所替代,但仍有学习的意义,本文采用邮件发送的例子展示ActiveMQ 1. 生产者1.1 引入maven依赖1.2 application.yml配置1.3 创建配置类 ...

  7. SpringBoot2.0之整合ActiveMQ(发布订阅模式)

    发布订阅模式与前面的点对点模式很类似,简直一毛一样 注意:发布订阅模式 先启动消费者 公用pom: <project xmlns="http://maven.apache.org/PO ...

  8. SpringBoot2.0之整合ActiveMQ(点对点模式)

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  9. SpringBoot整合freemarker 引用基础

    原 ElasticSearch学习笔记Ⅲ - SpringBoot整合ES 新建一个SpringBoot项目.添加es的maven坐标如下: <dependency> <groupI ...

随机推荐

  1. JAVA调用R脚本 windwos路径下

    RConnection c = new RConnection();// REXP x = c.eval("source('D:\\\\jiaoben\\\\RJava_test.R',en ...

  2. 用Nginx搭建CDN服务器方法-开启Nginx缓存与镜像,自建图片服务器

    利用Nginx的proxy_cache搭建缓存服务器一:编译ngx_cache_purge1.Nginx的Proxy_cache是根据Key值md5哈希存储缓存,支持任意的Key,例如你可以根据”域名 ...

  3. jQuery全部选择器总结(转载)

    jQuery选择器总结 不知道为什么博客园不能转载文章?如果知道如何转载的朋友可以评论告诉我,我只能ctrl+C/V下来,转载自: http://www.cnblogs.com/mcgrady/arc ...

  4. 梯度提升树GBD

    转自 http://blog.csdn.net/u014568921/article/details/49383379 另外一个很容易理解的文章 :http://www.jianshu.com/p/0 ...

  5. 随笔-ansible-6

    Ansible中的变量引用有时候需要双引号,有时候不需要双引号,这是因为Ansible是多人协作的作品,所以没有统一. 一切以官网说明为主,同时自己也要实践. 这是一个example.yml文件,我们 ...

  6. PDO如何完成事务操作

    起因 无意间翻看极客学院的APP,准备找一些教程看看.看到一篇PDO 安全处理与事务处理,一想对MySQL的事务处理仅仅停留在概念上(知道执行多条语句,其中一个失败了,就会回滚操作).但是把概念变成代 ...

  7. 使用lombok时@Setter @Getter无效

    原文链接 : https://blog.csdn.net/marion158/article/details/87893480 lombok是一个帮助简化代码的工具,通过注解的形式例如@Setter ...

  8. react 父子组件传值

    父组件向子组件传递信息 父组件片段 constructor(props){ super(props) this.state={ message:"我是父组件传来的" } } ren ...

  9. 网络编程之 TCP-UDP的详细介绍

    一.TCP协议 1. TCP协议的特点 1.TCP是面向连接的运输层协议.这就意味着,在使用该协议之前,必须建立TCP连接.在传输数据完毕后,必须释放已经建立的TCP连接. 2.每一条TCP连接只能有 ...

  10. 关于虚拟机中linux系统时间的问题

    由于考试需求,我在vm上放置了考试用的linux环境,在进行操作的时候需要回调时间才能进行一些操作.但是每次重启之后,时间总是会和物理服务器的时间进行同步,让我非常的苦恼. 终于有一天我想清楚了如何表 ...