RabbitMQ学习教程(一)

一:消息中间件的定义:

      消息中间件是在消息的传输过程中保存消息的容器。消息中间件在将消息从它的源头中继到它的目标时充当中间人的作用。队列的主要目的是提供路由并且保证消息的传递;如果发送消息时接受者不可用,消息队列会保留有消息,直到可以成功的传递它为止,当然,消息队列保存消息也是有期限的。

二:消息中间件的作用:

     1.采用异步处理模式

        消息发送者可以发送一个消息而无需等待响应。消息发送者将消息发送到一条虚拟的通道(主题或者是队列)上,消息接受者则订阅或者监听该通道。一条消息可能最终转发给一个或者多个的消息接受者,这些接受者都无需对消息发送者作出回应,整个过程是异步的。

      例如:用户信息注册,注册完毕之后过段时间发送邮件或者短信。(这样理解:注册和发送邮件是两个不同的事件,异步的,用户注册信息插入数据库的同时向消息中间件发送一条消息,减少用户等待的过程,如果用户做一个注册要等很长的时间是很糟糕的事情生气

    2.应用程序和应用程序之间是松耦合关系(理解为A宕机了对B没有影响)

       发送者和接受者不必了解对方,只需要确认消息

       发送者和接受者不必同时在线

   例如:在线交易系统为了保持数据的最终一致性,在支付系统处理完成后会把支付结果放到消息中间件里通知订单系统修改订单的支付状态,两个系统通过消息中间件进行解耦。

三:消息传递的服务模型:


mom中间件就是消息中间件的一个简称

四:消息中间件的传递模型:

     1.点对点模型(PTP)

        点对点模型用于消息生产者和消息消费者之间点到点的通信。消息生产者将消息发送到由某个名字标识的特定的消费者。这个名字实际上对应于消息服务中的一个队列(Queue),在消息传递给消费者之前它被存储在这个队列中。队列消息可以放在内存中也可以是持久的,以保证在消息服务出现故障的时候依然可以传递消息。

       点对点的模型特性:

          (一):每一个消息只用一个消费者

          (二):发送者和接受者没有时间的依赖(我放进去你爱什么时候拿就什么时候拿)

          (三):接受者确认消息接受和处理成功(确认消费后删除该条消息)

         

     2.发布订阅模型(Pub/Sub)

        发布者/接受者模型支持向一个特定的消息主题生产消息。0个或多个订阅者可能对接受来自特定消息主题的消息感兴趣。在这种模式下,发布者和订阅者彼此不知道对方。这种模式就好比是匿名公告板。这种模式概括为:多个消费者可以获得消息,在发布者和订阅者之间存在着时间的依赖性,发布者需要建立一个订阅(subscription),以便能够消费者订阅。订阅者必须保持持续的活动状态以接受消息,除非订阅者建立了持久的订阅,在这种情况下,在订阅者未连接时发布的消息将在订阅者重新连接的时候重新发布。

     发布/订阅模型特性:

      1.每个消息可以有多个订阅者

      2.客户端只有订阅后才能接受到消息

      3.持久订阅

         订阅关系建立后,消息就不会消失,不管订阅者是否都在线。

      4.非持久订阅

          订阅者为了接受消息,必须一直在线。

             当只有一个订阅者时候约等于点对点的模式

        

        ps:消息中间件存储消息消费的轨迹:成功消费,失败消费,未知状态(网络断开了等其他因素)

五:互联网消息中间件应用场景

     用户注册异步处理案例:

            网站用户注册,注册成功后会过一会发送邮件或者确认短信。(发布订阅模型)

        

六:rabbitMQ是一个在AMQP协议基础上完整的,可服用的企业消息系统。他遵循Mozilla Public License开源协议,采用Erlang实现的工业级的消息队列(MQ)服务器。

       AMQP(高级消息队列协议)是一个异步消息传递所使用的应用层协议规范,作为线路层协议,而不是API(例如JMS),AMQP客户端能够无视消息的来源任意发送和接受信息。AMQP的原始用途只是为金融界提供一个可以彼此协作的消息协议,而现在的目标则是为了通用消息队列框架提供通用的构建工具,因此,面向消息的中间件(MOM)系统,例如发布/订阅队列,没有作为基本的元素使用,反而通过发送简化的AMQ实体,用户被赋予了构建例如这些实体的能力。这些实体也是规范的一部分,形成了在线路层协议顶端的一个层级:AMQP模型。这个模型统一了消息模式,例如之前提到的发布/订阅,队列,事务以及流数据,并且添加了额外的特性,例如更易于扩展,基于内容的路由。 

     RabbitMQ整体架构:


RabbitMQ架构--运行原理


    RabbitMQ重要术语


Exchange分类

         Directb Exchange(直接式交换器类型) - 直接交互式处理路由键。需要将一个队列绑定到交换价上,要求该消息与一个特定的路由键完全匹配。这是一个完整的匹配。如果一个队列被绑定到该交换机上要求路由键“dog”,则只有标记为“dog”的消息才被转发,不会转发dog.puppy,也不会转发dog.guard,只会转发dog.


       Fanout Exchange (广播式交换器类型)- 广播式路由键。你只需要简单的将队列绑定到交换机上。一个发送到交换机的消息都会被转发到与该交换机绑定的所有队列上。很像子网广播,每台子网内的主机都获得了一份复制的消息。Fanout交换机转发消息时最快的


         Topic Exchange(主题式交换器类型)--主题式交换器,通过消息的路由关键字和绑定关键字的模式匹配,将消息路由到被绑定的队列中。这种路由器类型可以被用来支持经典的发布/订阅消息传输模型----使用主题名字空间作为消息寻址模式,将消息传递给那些部分或者全部匹配主题模式的多个消费者。主题交换器的类型的工作方式如下:绑定关键字用零个或者多个标记构成,每一个标记之间用“.”字符进行分隔。绑定关键字必须用这种形式明确说明,并支持通配符:"*"匹配一个词组,“#”零个或者多个词组。因此绑定关键字“*.stock.#”匹配路由关键字“usd.stock”和“eure.stock.db”


RabbitMQ常用配置介绍



RabbitMQ命令介绍

     

  RabbitMQ在Linux上安装(略)



 




展开阅读全文

没有更多推荐了,返回首页