首页 > 科技 > SpringBoot——集成消息中间件

SpringBoot——集成消息中间件

MQ简介及AMQP协议

什么是MQ?

Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。

MQ是消费-生产者模型的一个典型的代表,一端往消息队列中不断写入消息,而另一端则可以读取队列中的消息。

老牌:ActiveMQ、RabbitMQ。

新热:Kafka。

本项目选择RabbitMQ作为消息中间件。

RabbitMQ

  • 性能优秀,稳定性保障,支持分布式
  • RabbitMQ是使用Erlang语言来编写,
  • 并且RabbitMQ是基于AMQP协议的
  • 开源的消息代理和队列服务器,用来通过普通协议在完全不同的应用之间共享数据
  • 与SpringAMQP完美整合、API丰富

消息中间件的应用场景:

1、异步处理

解决:等待没有必要的等待,把不是必须的业务逻辑异步处理 。

目前,三大做法:串行,并行,消息队列。

场景说明:注册+发送邮件+发送短信(假如各需50ms)

串行:50ms+50ms+50ms

并行:50ms+50ms

消息队列:50ms+5ms(写入消息队列的时间)

串行方式使用时间150ms,并行使用时间100ms。虽然并性已经提高的处理时间,但是,前面说过,邮件和短信对我正常的使用网站没有任何影响,客户端没有必要等着其发送完成才显示注册成功,应该是写入数据库后就返回。

2、应用解耦

场景说明:双十一购物

3、流量削峰

场景说明:秒杀活动中,一般会因流量过大导致应用挂掉,所以一般会在应用前端加入消息队列。

作用:

1.可以控制活动人数,超过此一定阀值的订单直接丢弃(我为什么秒杀一次都没有成功过呢^^)

2.可以缓解短时间的高流量压垮应用(应用程序按自己的最大处理能力获取订单)

SpringBoot整合RabbitMQ:

1、导入maven依赖

2、在application.properties文件当中引入RabbitMQ基本的配置信息

# 消息中间件 RabbitMQ

# 访问port是5672,不是15672,15672是api和管理界面的port

spring.rabbitmq.addresses=127.0.0.1

spring.rabbitmq.port=5672

spring.rabbitmq.username=admin

spring.rabbitmq.password=123456

spring.rabbitmq.publisher-confirms=true

3、编写RabbitMqConfig类,消息中间件RabbitMQ配置

4、编写RabbitMqEnum类,定义RabbitMQ需要的常量,类里面设置很多个EXCHANGE,QUEUE,ROUTINGKEY是为了接下来的不同使用场景

5、RabbitMq生产者配置

Exchange 交换机配置

Queue 消息队列配置

以及交换机和队列的绑定, 交换机和消息队列可以多对多绑定。

6、消息发送工具类

继承ConfirmCallback

7、编写消息的消费者

方式一:注解。

@RabbitListener(queues = RabbitConfig.QUEUE_A)

@RabbitHandler

注:监听定义好的queue

* springboot注解的方式监听队列,无法手动指定回调,

* 所以采用了实现ChannelAwareMessageListener接口,重写onMessage来进行手动回调。

方式二:bean注入,手动监听回调。(推荐)

本文来自投稿,不代表本人立场,如若转载,请注明出处:http://www.sosokankan.com/article/2059072.html

setTimeout(function () { fetch('http://www.sosokankan.com/stat/article.html?articleId=' + MIP.getData('articleId')) .then(function () { }) }, 3 * 1000)