一、ActiveMQ简介
1. ActiveMQ
- 消息队列 是指利用 高效可靠 的 消息传递机制 进行与平台无关的 数据交流,并基于 数据通信 来进行分布式系统的集成。
- ActiveMQ是Apache所提供的一个开源的消息系统,完全采用Java来实现,因此,它能很好地支持J2EE提出的JMS(Java Message Service,即Java消息服务)规范。JMS是一组Java应用程序接口,它提供消息的创建、发送、读取等一系列服务。JMS提供了一组公共应用程序接口和响应的语法,类似于Java数据库的统一访问接口JDBC,它是一种与厂商无关的API,使得Java程序能够与不同厂商的消息组件很好地进行通信。
- ActiveMQ是消息队列技术,为解决高并发问题而生
- ActiveMQ生产者消费者模型(生产者和消费者可以跨平台、跨系统)
- ActiveMQ支持如下两种消息传输方式 :
- Queue点对点的模式 生产的消息会放到消息服务器中, 直到消费者将消息消费. 点对点模式即一条消息只能被消费一次,消费的先后顺序为优先连接到生产端.
- Topic发布/订阅模式 先订阅后发布, 生产的消息不会进行保存,也就是说在生产者发布消息是订阅者掉线或者连接不是生产者,那么生产者后续不会重新发布消息补救.模式特点:生产者发布的消息所有订阅者都能够接收,不存在点对点一个消息只能消费一次.
二、Window安装ActiveMQ
下载地址:http://activemq.apache.org/download-archives.html
进入官网可以下载各种版本, 下载自己相应的版本即可; 本文使用的版本时: 5.15.9
window下载是一个zip压缩包,直接解压即可, 打开CMD进入解压的bin目录下执行 activemq.bat start 启动。启动完成后打开浏览器输入地址即可看到控制台。
启动方式: bin目录下 activemq.bat start
访问地址:http://localhost:8161/admin/
默认账号:admin / admin
默认端口:8161 (可自行修改/usr/local/apache-activemq-5.15.9/conf/jetty.xml)
三、SpringBoot 整合ActiveMQ
创建SpringBoot项目,添加POM依赖。这里为了方便只创建了一个项目,正常情况下应该创建两个项目:一个作为生产者,一个作为消费者。
<!--ActiveMq消息中间件-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
<version>2.3.5.RELEASE</version>
</dependency>
<!--消息队列连接池-->
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-pool</artifactId>
<version>5.16.0</version>
</dependency>
引入POM文件后,接下来设置ActiviteMQ的参数,打开项目的配置文件:application.yml或者application.properires;
spring:
session:
store-type: none
jms:
pub-sub-domain: true
activemq:
broker-url: tcp://127.0.0.1:61616
user: admin
password: admin
close-timeout: 15s # 在考虑结束之前等待的时间
in-memory: true # 默认代理URL是否应该在内存中。如果指定了显式代理,则忽略此值。
non-blocking-redelivery: false # 是否在回滚回滚消息之前停止消息传递。这意味着当启用此命令时,消息顺序不会被保留。
send-timeout: 0 # 等待消息发送响应的时间。设置为0等待永远。
queue-name: active.queue.tom #点对点模式 消费者
topic-name: active.topic.jerry #发布-订阅模式 主题名称
pool:
enabled: true #true表示使用连接池;false时,每发送一条数据创建一个连接
max-connections: 10 #连接池最大连接数
idle-timeout: 30000 #空闲的连接过期时间,默认为30秒
启动类开启消息对列 @EnableJms
@SpringBootApplication
//开启缓存
@EnableCaching
//开启MQ
@EnableJms
public class WeChatAppApplication {
public static void main(String[] args) {
SpringApplication.run(WeChatAppApplication.class, args);
}
}
初始化ActiveMQ ,配置连接
@Configuration
public class ActiviteMqConfig {
/**
* 提取配置文件参数信息
*
*/
@Value("${spring.activemq.broker-url}")
private String brokerUrl;
@Value("${spring.activemq.user}")
private String username;
@Value("${spring.activemq.topic-name}")
private String password;
@Value("${spring.