消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。实现高性能,高可用,可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。消息形式支持点对点和订阅-发布。
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来实现生产者生产信息。 消费者在监听的过程中调用短信发送的过程。