Rabbit基础概念

一、分布式异步队列

1.优点

异步处理,响应快,增加了数据库服务器的承载能力;
削峰,把流量的高峰分解到不同的时间段来处理;
解耦(扩展性就更强),让UI和业务独立演化;
高可用,如果某一个处理器发生了故障,对其他的处理器没有影响;

2.缺点

复杂性较高
降低了即时性;
更加依赖于异步队列的Broker

二、Exchange

1.Direct Exchange

直接交换器,原理类似于单播,Exchange会将消息发送完全匹配ROUTING_KEY的Queue上。
典型的应用场景:通过消息队列来写日志(debug,info,warn,error),把所有的日记写入一个队列,单独把error写入另外一个队列。因为error特殊。

2.Fanout Exchange

会把消息发送到所有绑定该Exchange的Queue中。
典型的应用场景:发布与订阅,一方发布,多方订阅。

3.Topic Exchange

客户端发送消息到Exchange时,需要绑定Key(全称),队列绑定到Exchange需要指定Key(可模糊匹配一部分); Key 可以有自己的规则;Key可以有占位符;(*匹配一个单词、#匹配多个单词),本质是在Direct基础上加上模糊匹配;

4.Header Exchange

Exchange不依赖于routing key与绑定key的匹配规则来路由消息,而是根据发送的消息内容中的headers属性进行匹配。在绑定Queue与Exchange时指定一组键值对以及x-match参数,x-match参数是字符串类型,可以设置为any或者all。如果设置为any,只要匹配到了headers表中的任何一对键值即可,all则需要全部匹配。

三、消息不丢可靠性保证

1.消息持久化

所有的消息都支持落盘保存,即使服务器宕机了,重启服务后还能找回以前的消息。

2.生产端消息确认

生产端与Broker消息的确认模式有两种:
Confirm模式:异步应答模式,生产端发布消息后,Broker做了异步应答。告诉生产端是否正常收到消息,支持单条消息和批量消息的确认。

开启确认模式:
channel.ConfirmSelect();

确认消息有如下三种方式:
第一:单条消息确认: channel.waitForConfirms()
第二: 批量消息确认: channel.waitForConfirmsOrDie()
第三:异步监听消息确认:channel.addConfirmListener()

Tx事务模式:基于AMPQ协议,是同步模式;让信道设置成一个带事务的信道,分为如下三步:
第一:开启事务(channel.TxSelect())
第二:提交事务(channel.TxCommit())
地址:回滚事务(channel.TxRollback())

3.消费端的消息确认

自动确认:只有收到消息,就直接回执给Broker,直接承接所有消息确认了。缺点是消费者成功了一条消息;Broker也会认为你是全部成功了,会把所有消息从队列中移除,这样可能会导致消息的丢失;有点是性能高。

显示确认:消费一条,回执给Broker一条消息,Broker只删除当前这一条消费的消息,缺点是性能稍低些,优点是可靠;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值