【RabbitMQ】——基础篇

何为RabbitMQ?

    RabbitMQ 是一个开源的 AMQP 实现,服务器端用 Erlang 语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP 等,支持 Ajax。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。主要是用来实现应用程序的异步解耦,同时也能起到消息缓冲消息分发的作用。是一个将生产者与消费者模型,主要负责接收,存储和转发消息。像是一种交换机模式。

RabbitMQ特点

1、可靠性,利用持久化,传输确认和发布确认等。

2、灵活路由

3、扩展性,多个节点可以组成一个集群,动态扩展集群中节点

4、高可用性,队列中可以在集群中的机器上设置镜像,使得部分节点出现问题的情况下队列仍然可用。

5、多种协议,支持AMQP,STOMP,MQTT等多种消息

6、多语言客户端

7、管理界面,提供易用界面,使用用户可以监控和管理消息,集群等节点

8、插件机制,提供多种插件,多方面进行扩展,可以自己编写插件

RabbitMQ整体模型结构


图中概念说明

Product:消息生产者,一般是指产生消息的程序;

Message:消息中一般包含2个部分:消息体(payload)和标签(Lable)。消息体一般是带有业务逻辑的json数据。标签中用于描述交换机的名称和一个路由键;

Broker:消息中间件的服务节点,表示消息队列服务器的实体,一切处理都这里面进行;

ExChange:俗称转发器/交换机(通常使用X表示),接收生产者发送的消息并路由到指定的队列;

RoutingKey:路由键,用于指定消息的路由规则,通常和绑定键联合使用

Channel:管道,将消息发送到ExChange中;

Queue:队列,用于存储X分发过来的Message;

Binding:绑定,将交换器和队列关联起来,绑定的时候一般会指定一个Binding key(绑定键),这样X可以明确地将消息路由到队列中;

Deliver:转发,将X中拿到的消息后转发的操作。

混淆点

RoutingKey和BindingKey关联

   生产者将消息发送给交换器的时候需要一个RoutingKey,当RoutingKey和BindingKey相配匹的时候,消息会被路由到对应的队列中。当同一个交换器绑定多个队列的时候,允许使用相同的BindingKey。

一个demo通俗易懂串联上述概念

利用寄快递的方式来说明这个发送消息的过程

    有个寄件人(Product)想寄快递(Message)。现有快递公司(Broker),寄件人(Product)提前联系(Channel)快递中心(Exchange),在快递点上填写目的地址(RoutingKey),并将快递(Message)交给快递中心。快递中心(Exchange)根据寄件人(Product)填写的快递信息(RoutingKey)进行分发(Deliver)到派送地址BindingKey与RoutingKey一样的菜鸟驿站(Queue)等待收件人(Consumer)取件。

猜你喜欢

转载自blog.csdn.net/jiadajing267/article/details/80826032