RabbitMQ 是功能强大的开源消息代理。根据官网称:也是使用量最普遍的消息队列。就像他的口号“Messaging that just works”,开箱即用使用简单,支持多种消息传输协议(AMQP、STOMP、MQTT)。算法
一个应用程序或者服务如何使用RabbitMq呢?服务器
消息微信
队列负载均衡
注意:何时消息才会从队列中删除呢?这里涉及到一个消息确认的动做。消费者接收到的每一条消息都必须进行确认。才会从队列中删除。消费者能够经过AMQP的Basic.Ack命令显式地向rabbtmq发送一个确认,或者在订阅到队列的时候就将autoAck属性设置为true;如:autoAck: true,一旦消费者接收消息,rabbitmq会自动视其确认了消息。
只要消费者不进行确认,rabbit将不会给该消费者发送消息,由于在上一条消息被确认以前,rabbit会认为这个消费者并无准备好接收下一条消息的能力。
在没有办法正常确认消息,不能一直堵塞呀,好比消费者有bug。那就使用AMPQ的Basic.Reject命令;明确的拒绝这条消息,其中一个参数requeue若是设置了ture的话,Rabbit会把消息从新发给下一个订阅的消费者。
若是你检测到一条消息自己有错误而任何一个消费者都没法处理的时候,就能够把requeue设置为false,rabbitmq会把消息从队里中移除,而不会把他发送给新的消费者。
注意:这里你可使用对拒绝的消息进行特殊处理,好比发送到死信队列或者专门收集的erro队里中。tcp
小结:队列是amqp消息通讯的基础模块url
1.为消息提供的处所,消息在此等待消费
2.对负载均衡来讲,队列是绝佳方案。只需附加一堆消费者,并让rabbitmq以循环的方式均匀地分配发来的消息。
3.队列是rabbit中消息的最后的终点。spa
交换器、绑定.net
交换器有四种类型:direct、fanout、topic和headers;每种类型实现了不一样的路由算法,前三个比较经常使用。
channel.BasicPublish(exchange: "", routingKey: "hello", basicProperties: null, body: body);
2.fanout交换器代理
2.topic交换器code
这类交换器容许不一样源头的消息到达同一个队列。路由算法-根据所有或部分路由键匹配将消息路由绑定的队列上。使用场景-根据某些条件广播到特定的队列上。
小结:
本文主要总结了 apmq几个主要元素:交换器,绑定,队列。以及一个消息建立到消费者读取消费的过程。
本文分享自微信公众号 - dotNET知音(AAshiyou)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。