消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。实现高性能,高可用,可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。消息形式支持点对点和订阅-发布。

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

  1. 加入依赖:

spring-boot-starter-activemq

  1. 配置连接属性:

  2. 创建队列组件。

/** 
* @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来实现生产者生产信息。 消费者在监听的过程中调用短信发送的过程。