ActiveMQ是什么
1.ActiveMQ是消息队列技术,为解决高并发问题而生
2.ActiveMQ生产者消费者模型(生产者和消费者可以跨平台、跨系统)
3.ActiveMQ支持如下两种消息传输方式
点对点模式:生产者生产了一个消息,只能由一个消费者进行消费
发布订阅模式:生产者生产了一个消息,可以由多个消费者进行消费
SpringBoot整合ActiveMQ
-
ActiveMQ下载启动
http://activemq.apache.org/download-archives.html ,本文用的是windows版的5.15.3版本,下载下来是压缩包,自行解压一个到目录下,CMD进入到解压目录下的bin目录下,执行 activemq.bat start 启动。 如果能成功访问http://localhost:8161/admin(用户名和密码默认为admin),则启动成功。
2.创建一个空的maven项目
创建一个消息生产者和一个消息消费者
创建生产者
添加mq依赖
<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>
注意springBoot版本最好是 2.0.0.RELEASE
修改配置文件
server.port=8808
# failover:(tcp://localhost:61616,tcp://localhost:61617)
# tcp://localhost:61616
spring.activemq.broker-url=tcp://localhost:61616
#true 表示使用内置的MQ,false则连接服务器
spring.activemq.in-memory=false
#true表示使用连接池;false时,每发送一条数据创建一个连接
spring.activemq.pool.enabled=true
#连接池最大连接数
spring.activemq.pool.max-connections=10
#空闲的连接过期时间,默认为30秒
spring.activemq.pool.idle-timeout=30000
#强制的连接过期时间,与idleTimeout的区别在于:idleTimeout是在连接空闲一段时间失效,而expiryTimeout不管当前连接的情况,只要达到指定时间就失效。默认为0,never
#spring.activemq.pool.expiry-timeout=0
启动类添加@EnableJms开启消息队列。
项目结构图
package com.cql.provider.config;
import org.apache.activemq.command.ActiveMQQueue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.jms.Queue;
@Configuration
public class BeanConfig {
@Bean
public Queue queue() {
return new ActiveMQQueue("ActiveMQQueue");
}
}
package com.cql.provider.controller;
@RestController
public class ProviderController {
//注入存放消息的队列,用于下列方法一
@Autowired
private Queue queue;
//注入springboot封装的工具类
@Autowired
private JmsMessagingTemplate jmsMessagingTemplate;
@RequestMapping("send")
public void send(String name) {
//方法一:添加消息到消息队列
jmsMessagingTemplate.convertAndSend(queue, name);
//方法二:这种方式不需要手动创建queue,系统会自行创建名为test的队列
//jmsMessagingTemplate.convertAndSend("test", name);
}
}
创建消费者
依赖和生产者一样
启动类添加@EnableJms开启消息队列。
配置文件如下
server.port=8809
# failover:(tcp://localhost:61616,tcp://localhost:61617)
# tcp://localhost:61616
spring.activemq.broker-url=tcp://localhost:61616
#true 表示使用内置的MQ,false则连接服务器
spring.activemq.in-memory=false
#true表示使用连接池;false时,每发送一条数据创建一个连接
spring.activemq.pool.enabled=true
#连接池最大连接数
spring.activemq.pool.max-connections=10
#空闲的连接过期时间,默认为30秒
spring.activemq.pool.idle-timeout=30000
#强制的连接过期时间,与idleTimeout的区别在于:idleTimeout是在连接空闲一段时间失效,而expiryTimeout不管当前连接的情况,只要达到指定时间就失效。默认为0,never
#spring.activemq.pool.expiry-timeout=0
项目结构图
@Component
public class ConsumerService {
@Autowired
private JmsMessagingTemplate jmsMessagingTemplate;
// 使用JmsListener配置消费者监听的队列,其中name是接收到的消息
@JmsListener(destination = "ActiveMQQueue")
// SendTo 会将此方法返回的数据, 写入到 OutQueue 中去.
@SendTo("SQueueSSS")
public String handleMessage(String name) {
System.out.println("成功接受Name:" + name);
return "成功接受Name:" + name;
}
}
4.发送消息,接收消息
访问 http://127.0.0.1:8808/send?name=消息
看到这,你的mq就初步搭建成功了
,记得开启mq服务!!!
https://blog.csdn.net/qq_22200097/article/details/82716859
acticeMQ的消息持久化