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使用java.lang.management监视和管理 Java 虚拟机

    原文地址:https://blog.csdn.net/zhongweijian/article/details/7619383 软件包 java.lang.management 提供管理接口,用于监视 ...

  2. Django框架(九)—— 单表增删改查,在Python脚本中调用Django环境

    目录 单表增删改查,在Python脚本中调用Django环境 一.数据库连接配置 二.orm创建表和字段 三.单表增删改查 1.增加数据 2.删除数据 3.修改数据 4.查询数据 四.在Python脚 ...

  3. CentOS7 网卡配置文件解释

    注:此网卡配置文件摘自CentOS7.4.1708系统 Linux 默认配置网卡的信息 TYPE=Ethernet 网卡类型:以太网 PROXY_METHOD=none 代理方式:关闭状态 BROWS ...

  4. 自从阿里买了Flink母公司以后,你不懂Flink就out了!

    个免费报名权限 Ps:小助理手动给大家发送资料,精力有限,仅限前100名免费领取,这份资料对于想要提升大数据技能进阶的小伙伴来说,将会是一份不可或缺的宝贵资料. 特别感谢飞总的部分原创支持!

  5. dubbo源码学习(二) : spring 自定义标签

    做dubbo的配置时很容易发现,dubbo有一套自己的标签,提供给开发者配置,其实每一个标签对应着一个 实体,在容器启动的时候,dubbo会对所有的配置进行解析然后将解析后的内容设置到实体里,最终du ...

  6. 前端实现预览ppt,word,xls,pdf文件

    1.前端实现pdf文件在线预览功能 ps:刚好工作上有这个需求,所以到处找了一下处理方案,大家有需要可以试一下这几种方案,找到合适自己的 方式一. pdf文件理论上可以在浏览器直接打开预览但是需要打开 ...

  7. selenium IDE的安装及录制回放的简单使用

    1.Selenium IDE下载地址为http://docs.seleniumhq.org/download/(需要翻墙) 2.直接单机“Download version”后面的版本号即可开始下载 3 ...

  8. K-mean matlab 实现代码

    一.K均值聚类算法 算法步骤如下: 1.初始化 已知数据集合X,及事先指定聚类的总类数N,在X中随机选取N个对象作为初始的聚类中心. 2.设定迭代终止条件 通常设置最大循环次数或者聚类中心的变化误差. ...

  9. Jquery中$.get(),$.post(),$.ajax(),$.getJSON(),$.getScript(),$.load()的用法总结

    参考文档 :  https://blog.csdn.net/jiandanokok/article/details/48809717 本文是对Jquery中$.get(),$.post(),$.aja ...

  10. robotframework+python3+selenium之创建第一个项目---第三集

    1.新建一个project 选择Directory,则是文件夹 2.选择文件,创建new suite    test_1 3.创建test case   baidu_test 4.此时界面如图: 5. ...