高性能中间件-RabbitMQ
高性能中间件-RabbitMQ
1 RabbitMQ是什么?
RabbitMQ是一个实现了高级消息队列协议(AMQP)的开源消息代理软件.服务端用Erlang语言编写,支持多种客户端.用于在分布式系统中存储转发消息,具有易用性,扩展性,高可用的特点.
2 RabbitMQ的整体结构
Producer:生产者,生产者创建消息,然后投递消息.
Broker:消息中间件的服务节点.
Exchange:交换器,生产者将消息发送到交换器,常见的交换器类型有Fanout,direct,topic,header四种
Queue:队列,是Rabbit的内部对象,用于储存消息.
Bing:绑定,通过绑定将交换器与对列关联起来,在绑定的时候会指定一个绑定建BingKey,方便正确的将消息路由到队列上.
Consumer:消费者,接受消息的一方.
3 SpringBoot集成RabbitMQ
在SpringBoot的.yum配置文件中配置RabbitMq的地址信息
测试发送订单号
接受发送的订单号
4 RabbitMQ丢失消息和解决方案
过程1: 从生产者到交换机丢失消息
如果一条消息没有进入路由,消息会消失
提供方案:
采用事务模式 Transaction,确认模式 confirm
// 将channel设置成事物模式
channel.txSelect();
// 提交事务
channel.txCommit();
// 事务回滚
channel.txRollback();
过程2 :消息在队列中存储丢失消息
内存节点中消息会在内存中存储,
磁盘节点中,消息会在内存和磁盘中存储
如果消息只有一条时在磁盘节中存储点,所以至少有一个磁盘节点存在
提供方案:
采用持久化机制,队列持久化,交换机持久化,消息持久化
过程3: 消息传给消费者
消费者有一个默认的自动应答 autoACK,接收到消息的时候就发送
自动应答后会把消息的队头删掉,不会关心是否成功执行,只会关心时候接收到消息,这时候需要手动ACK,需要考虑异常情况
5 RabbitMQ的应用实践
在分布式系统架构下,RabbitMQ除了上面传递订单编号处理订单逻辑外,还可以处理商品上下架,删除的状态处理和相应处理.实现登陆的扫码机制.应用于促销活动的活动产品关系处理等等.
RabbitMQ使用的好会极大提高程序的性能和实现代码的异步解耦.还有就是定期的查看队列的情况,看看是不是存在没有被消费的队列数据,这点很重要.