消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。实现高性能,高可用,可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。消息形式支持点对点和订阅-发布。
ActiveMQ是什么 ActiveMQ是消息队列技术,为解决高并发问题而生 ActiveMQ生产者消费者模型(生产者和消费者可以跨平台、跨系统) ActiveMQ支持如下两种消息传输方式 点对点模式,生产者生产了一个消息,只能由一个消费者进行消费 发布/订阅模式,生产者生产了一个消息,可以由多个消费者进行消费
1首先去官网下载windows版本的MQ
2接下来解压,进入bin目录,双击bat文件运行mq服务。
3.启动后会有以下提示。mq默认端口号为8161. 切记这只是服务端口,通信端口为61616
所以我们可以通过http://localhost:8161访问管理页面,通过tcp://localhost:61616来连接消息服务器,用到的用户名和密码都在以下文件中(默认为admin=admin)
springboot整合ActiveMQ
-
加入依赖:
spring-boot-starter-activemq
-
配置连接属性:
-
创建队列组件。
/**
* @ClassName: QueueInit
* @Description: TODO
* @Author: markGuo
* @Date: 2019/12/18 1:08
**/
@Component //作用是实例化当前类。
public class QueueInit {
@Bean //把当前方法产生的bean对象置于spring容器。
Queue queue(){
//创建一个名称为myQueue的mq队列
return new ActiveMQQueue("myQueue");
}} 4.创建要发送的消息实体。(如发送简单字符串则可不创建消息实体)
/**
* @ClassName: Messege
* @Description: TODO
* @Author: markGuo
* @Date: 2019/12/18 1:10
**/
@Data //该注解为lombok提供(须引入lombok依赖)。旨在生成setter getter toString 构造方法(默认是无参构造)
public class Messege implements Serializable {
private String content;
private Date sendDate;
5.创建生产者类
/**
* @ClassName: Producer
* @Description: TODO
* @Author: markGuo
* @Date: 2019/12/18 1:10
**/
@Component
public class Producer {
@Autowired
private JmsMessagingTemplate template; //注入java消息服务模板
@Autowired
private Queue queue; //注入第3步实例化的队列组件。
public void sendMsg(Messege msg){
//发送消息实体
template.convertAndSend(this.queue,msg);
}
public void sendMsg(String msg){
//发送消息字符串
template.convertAndSend(this.queue,msg);
}} 6.创建消费者类 (消费者消费消息的方法不可以有返回值,会报死循环。如果必须有,方法上加入@SendTo)
/**
* @ClassName: Customer
* @Description: TODO
* @Author: markGuo
* @Date: 2019/12/18 1:18
**/@Component
public class Customer {
@JmsListener(destination = "myQueue")//destination为接收的队列名称
//jmsListener通过监听实现对特定队列的消费。
public void recive(Messege msg){
//接收消息实体
System.out.print(msg+">>>>>>>>>");
}
@JmsListener(destination = "myQueue")
public void recive(String msg){
//接收消息字符串
System.out.print(msg+">>>>>>>>>");
}} 7.创建测试类 (在实际项目中,通常在业务层进行逻辑判断后调用生产者生产消息)
@SpringBootTestclass
SbandmqApplicationTests {
@Autowired
private Producer producer;
@Test
public void test1(){
//发送消息实体
Messege msg = new Messege("你好",new Date());
producer.sendMsg(msg);
}
@Test
public void test2(){
//发送消息字符串
producer.sendMsg("我不好");
}} 好了。以上步骤非常轻松。接下来就可以进行实际应用了。 在项目上经常遇到发送短信的需求,一般将信息发送到消息中间件中,异步的去处理发送需求。 其实就是由mq来实现生产者生产信息。 消费者在监听的过程中调用短信发送的过程。

京公网安备 11010502036488号