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. PHP面试 PHP基础知识 四(流程控制)

    流程控制 PHP遍历数组的三种方式及各自的区别 三种方式:使用for循环.使用foreach循环.使用while.list().each()组合循环 区别:foe循环只能遍历索引数组,foeach可以 ...

  2. Dubbo入门到精通学习笔记(九):简易版支付系统介绍、部署(单节点)

    文章目录 部署(单节点) 一.前期准备 二.对部署环境进行规划 创建数据库 调整公共配置文件 应用部署前期准备 部署服务 部署 Web 应用 部署定时任务 一. 工程结构 第三方支付系统架构 pay- ...

  3. jquery中的ajax请求用法以及参数详情

    url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. type: 要求为String类型的参数,请求方式(post或get)默认为get.注意其他http请求方法,例如put和 ...

  4. Linux启动过程的C语言代码分析

    1. main函数 参见上方http://www.cnblogs.com/long123king/p/3543872.html,代码跳转到main函数. arch/x86/boot/main.c 1: ...

  5. Java文件系统

    Java7 引入了新的输入/输出2(NIO.2)API并提供了一个新的I/O API. 它向Java类库添加了三个包:java.nio.file,java.nio.file.attribute和jav ...

  6. 第五记 JDBC

    了解JDBC JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API(API:Application Program Inter ...

  7. linux常用命令 满足99%的开发需要

    1.# 表示权限用户(如:root),$ 表示普通用户开机提示:Login:输入用户名password:输入口令 用户是系统注册用户成功登陆后,可以进入相应的用户环境.退出当前shell,输入:exi ...

  8. Kettle使用kettle.properties

    kettle.properties 是一个变量文件,这个文件我使用的最多的地方是保存 “数据库连接” 用户名和密码. 如果不用这个文件,那么使用“数据库连接”时,需要硬编码写到文件里. 有一天dba告 ...

  9. struts2类型转换1

    概述 从一个 HTML 表单到一个 Action 对象, 类型转换是从字符串到非字符串. HTTP 没有 “类型” 的概念. 每一项表单输入只可能是一个字符串或一个字符串数组. 在服务器端, 必须把 ...

  10. 在VSCode中使用Markdown

    前言 最近在学习使用Markdown语法,尝试使用了"MarkdownEditor"."Sublime Text3"."VSCode"这三种 ...