zoukankan      html  css  js  c++  java
  • RabbitMQ的基本概念与原理(一)

     

    1、什么是MQ?

    MQ全称为Message Queue, 顾名思义,即消息队列,它是一种应用程序对应用程序的通信方法。MQ是消费-生产者模型的一个典型的代表,生产者不断的往消息队列中不断写入消息,消费者则可以读取或者订阅队列中的消息,生产者和消费者不需要知道对方是谁,一个负责发消息,一个负责收消息,MQ是遵循了AMQP(高级消息队列协议)的具体实现和产品。

    AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。

    2、RabbitMQ是什么?

    RabbitMQ是流行的开源消息队列系统,用erlang语言开发。RabbitMQ是AMQP的标准实现,支持Windows,linux等多种操作系统和Java,PHP等多种编程语言。

    3、RabbitMQ的一些基本概念

    这是一个在网上流传甚广的RabbitMQ的图,我从百度百科偷来的(好吧,我这个渣渣承认我画不出来这么好看的图,给当初的作图者赞一个)

    (1)Producer:生产者,负责生产消息以及投递消息到Exchange(交换机)

    (2)Exchange:交换机,根据交换机类型的不同,按照不同的规则,通过RoutingKey(路由键)投递到某个Queue(队列)里

    (3)RoutingKey:路由键,通过RoutingKey(路由键)将Queue(队列)与Exchange(交换机)Binding(绑定)在一起,      Exchange(交换机)通过RoutingKey(路由键)将消息投递到某个Queue(队列)

    (4)Queue:队列,消息都存放在Queue(队列)里,Exchange(交换机)通过RoutingKey(路由键)将消息投递到某个Queue(队列)

    (5)Binding:绑定,通过RoutingKey(路由键)将Queue(队列)与Exchange(交换机)Binding(绑定)在一起

    (6)Consumer:消费者,负责从Queue(队列)里取消息及消费消息

    (7)Channel:信道。信道(Channel)是多路复用连接中的一条独立的双向数据流通道,消息发布接受订阅都依靠信道完成。

    (8)Vhost:虚拟主机,即消息队列服务器实体

    4、RabbitMQ的工作流程

    (一)发送流程

    (1)Producer(生产者)连接到Vhost(消息队列服务器)

    (2)Producer(生产者)创建声明一个Exchange(交换机),设置其属性

    (3)Producer(生产者)投递Msg(消息)和RoutingKey(路由键)到Exchange(交换机)

    (二)消费过程

    (1)Consumer(消费者)连接到Vhost(消息队列服务器)

    (2)Consumer(消费者)连接到Exchange(交换机),设置其属性

    (3)Consumer(消费者)创建声明一个Queue(队列),设置其属性

    (4)Consumer(消费者)通过RoutingKey(路由键),将Exchange(交换机)和Queue(队列)Binding(绑定)

    (5)Exchange(交换机)接收到Msg(消息)后,根据RoutingKey(路由键)和Binding(绑定),将Msg(消息)进行路由

    ,将Msg(消息)投递到Queue(队列)里

    (6)Consumer(消费者)取出Queue(队列)里的Msg(消息)进行消费

    整个过程类似网络层路由器对数据包的路由的过程

    即主机A(生产者)发送了一个数据包(消息)到了路由器(交换机),然后路由器(交换机)根据其协议地址(路由键)将数据包(消息)发送到主机B(消费者)

  • 相关阅读:
    cmd中删除、添加、修改注册表命令
    修改注册表使win server 2012R2开机进入桌面而不是开始界面
    win8.1/2012R2上面安装flash debugger
    ANT中的copy和move标签
    用maven在MANIFEST.MF文件中的Class-Path中增加当前目录(.)
    通过ANT生成MANIFEST.MF中的Class-Path属性
    Junit4进行参数化测试
    DbUnit入门实战
    oracle查看当前正在使用的数据库
    左偏树 P3377【模板】左偏树(可并堆)
  • 原文地址:https://www.cnblogs.com/brady-wang/p/11293874.html
Copyright © 2011-2022 走看看