SpringBoot+ActiveMQ
SpringBoot+ActiveMQ 简单整合,下文只是对两者最最最基本的使用。
官网:http://activemq.apache.org/
1、版本介绍
1.1、SpringBoot:2.1.2
1.2、Maven:3.6.1
1.3、开发工具:IDEA 2019.3
1.4、ActiveMQ:5.15.2
2、ActiveMQ简介
2.1、MQ是消息中间件,是一种在分布式系统中应用程序借以传递消息的媒介,常用的有ActiveMQ,RabbitMQ,kafka。ActiveMQ是Apache下的开源项目,完全支持JMS1.1和J2EE1.4规范的JMS Provider实现
2.2、Apache ActiveMQ是Apache软件基金会所研发的开放源代码消息中间件;由于ActiveMQ是一个纯Java程序,因此只需要操作系统支持Java虚拟机,ActiveMQ便可执行
2.3、JMS:JMS,即Java Message Service,通过面向消息中间件(MOM:Message Oriented Middleware)的方式很好的解决了上面的问题。大致的过程是这样的:发送者把消息发送给消息服务器,消息服务器将消息存放在若干队列/主题中,在合适的
时候,消息服务器会将消息转发给接受者。在这个过程中,发送和接受是异步的,也就是发送无需等待,而且发送者和接受者的生命周期也没有必然关系;在pub/sub模式下,也可以完成一对多的通信,即让一个消息有多个接受者
3、ActiveMQ安装
3.1、windows安装直接下载、解压、运行即可
3.2、Linux 基于docker 安装
// search镜像:
docker search activemq
// pull 镜像
docker pull webcenter/activemq
注意:下面端口可自动调整
//61616是 activemq 的容器使用端口(映射为61617)
//8161是 web 页面管理端口(对外映射为8162)
// run
docker run -d --name activemq -p 61617:61616 -p 8162:8161 webcenter/activemq
3.3、安装成功后访问:http://ip:8161/admin,出现如下页面表示安装成功,默认登录user/password是admin/admin
4、工程搭建
4.1、新建SpringBoot-ActiveMQ-provider 工程
yml配置文件:
server:
port: 8999
spring:
application:
name: ActiveMQ-provider
activemq:
broker-url: tcp://xxx.xxx.xxx.xxx:61616
user: admin
password: admin
in-memory: true
pool:
enabled: true
pom依赖:
<dependencies>
<!--消息队列-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
<!--消息队列连接池-->
<dependency>
<groupId>org.messaginghub</groupId>
<artifactId>pooled-jms</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
新建配置类:
import org.apache.activemq.command.ActiveMQQueue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.jms.Queue;
/**
* ClassName:ActivemqConfig
* Describe:
* Author:DGJ
* Data:2020/10/27 14:13
*/
@Configuration
public class ActivemqConfig {
@Bean
public Queue GetQueue(){
//TestQueue 队列名称
return new ActiveMQQueue("TestQueue");
}
}
controller:
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.jms.Queue;
/**
* ClassName:ProviderController
* Describe:
* Author:DGJ
* Data:2020/10/27 14:14
*/
@Slf4j
@RestController
public class ProviderController {
@Autowired
private Queue queue;
@Autowired
private JmsTemplate jmsTemplate;
@Autowired
private JmsMessagingTemplate jmsMessagingTemplate;
@PostMapping(value = "/sendmessage")
public String SendMessage(String name){
jmsMessagingTemplate.convertAndSend(queue, name);
return "ok";
}
}
主启动:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.jms.annotation.EnableJms;
/**
* ClassName:ActiveMqProviderApplication
* Describe:
* Author:DGJ
* Data:2020/10/27 14:08
*/
@SpringBootApplication
@EnableJms
public class ActiveMqProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ActiveMqProviderApplication.class,args);
}
}
至此,mq的provider搭建完成。
4.2、测试
post请求:
http://localhost:8999/sendmessage?name=TestSms
登录MQ控制台:
4.3搭建SpringBoot-ActiveMQ-Customer工程
yaml(只需要改port和name即可) 、pom、主启动类都一样
customer接收消息类:
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.stereotype.Component;
/**
* ClassName:ConsumerService
* Describe:
* Author:DGJ
* Data:2020/10/27 14:37
*/
@Component
@Slf4j
public class ConsumerService {
@Autowired
private JmsMessagingTemplate jmsMessagingTemplate;
@JmsListener(destination = "TestQueue")
public void RecMsg(String msg){
log.error("接收消息:"+msg);
}
}
4.4、测试
post http://localhost:8999/sendmessage?name=TestSms
日志打印
MQ控制台
工程结构图
5、activMQ 控制台使用
没什么好说的,基本的使用很简单
6、持久化的使用
参考:https://blog.csdn.net/qq_22200097/article/details/82716859