RabbitMQ 是采用AMQP协议进行通信的。比起简单的TCP/UDP之类的通信,该模型更为复杂,功能也更为强大。
最近项目中用到RabbitMQ比较多,就比较系统深入的过来看看它的具体方式。
内容基本上从官网文档借鉴。
在这个模型中,publisher将消息首先发布给Exchange,由Exchange负责发送到一个或多个Queue中,发送的规则称为binging。最后发送给consumer或者consumer来pull。感觉这个概念就像寄送快递,发件人只需要和快递员打交道,告诉要发什么地址,甚至多个地址。派送则由快递公司承担。最后用户既可以选择送货上门,也可以选择自己去取件。
为了保证传递的可靠性,AMQP中有一个确认机制。consumer在收到快递后,要签个字,快递公司才会把订单从系统中撤掉。
如果消息无法送抵,则可以回退给publisher,或者扔掉,或者放入旧货堆(dead letter queue)
exchange:
Exchange作为AMQP中重要的一个中间实体,其交换类型(exchange type), 共有以下4种:
Direct, Fanout, Topic, Headers