rabbitMQ 基础概念介绍


声明:本文转载自https://my.oschina.net/u/3187740/blog/1621619,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

传统的队列消息服务,有三个概念,生产者,消费者,队列;rabbitMQ在概念上多做了一层抽象,在发消息者和队列之间,加入了交换器。

消息是先发到交换器,由交换器再根据调度策略再把消息给队列;

   rabbitMQ重要概念:

 

     虚拟主机(Virtual Host):

             相当于mini版的rabbitMQ服务,每个虚拟机中都包含交换机、对接、绑定。

             创建用户并分配对应的虚拟机以达到权限控制,不同的用户之间不会相互影响。

              

     交换机(Exchange):

             根据策略及路由键发送消息到对应的队列,如果没有绑定队列,则直接丢弃掉发过来的消息;

 

     路由键(routing key):

             作为交换机发送消息到队列的key,根据路由键+交换机策略,将消息发送至对应的队列;

 

     绑定(Binding):

             队列需要和交换机进行绑定,多对多的关系;

          

     Exchange分发策略:

          direct:

               完全匹配模式,即路由键与队列名称完全匹配,交换机会把消息发送给与路由键名字一致的队列;

                   

          fanout:

             多播模式,不处理路由键,会发送给所有绑定了该交换机的队列;

               

          topic:

             模糊匹配模式,路由键、队列名都以"."标识符分隔,以“*”,“#”进行匹配,“*”表示一个,“#”表示0或多个;

              

                

          我们准备发送关于动物的消息。消息会附加一个选择键包含3个标识符(两个点隔开)。

         第一个标识符描述动物的速度,第二个标识符描述动物的颜色,第三个标识符描述动物的物种:<speed>.<color>.<species>。

          我们创建3个绑定键:Q1与*.orange.*绑定Q2与*.*.rabbit和lazy.#绑定。

          可以简单的认为:

          Q1对所有的橙色动物感兴趣。

          Q2想要知道关于兔子的一切以及关于懒洋洋的动物的一切。

          quick.orange.rabbit的选择键的消息将会被转发到两个队列。

          lazy.orange.elephant的消息也会被转发到两个队列。

          quick.orange.fox只会被转发到Q1。

          lazy.brown.fox将会被转发到Q2。      

          lazy.pink.rabbit虽然与两个绑定键匹配,但是也只会被转发到Q2一次。

          quick.brown.fox不能与任何绑定键匹配,所以会被丢弃。

          发送一个或者四个标识符的选择键,类似:orange,quick.orange.male.rabbit,这些选择键不能与任何绑定键匹配,所以消息将会被丢弃。

          另一方面,lazy.orange.male.rabbit,虽然是四个标识符,也可以与lazy.#匹配,从而转发至Q2。

          注:主题类型的转发器非常强大,可以实现其他类型的转发器。

          当一个队列与绑定键#绑定,将会收到所有的消息,类似fanout类型转发器。

          当绑定键中不包含任何#与*时,类似direct类型转发器。

           

 

   消息确认机制:

       生产者确认机制:

              在使用rabbitMQ过程中,可以使用消息持久化操作来解决因为服务器的异常导致信息丢失。但生产者消息发送出去后,默认情况下是生产者是不清楚消息是否真正到达队列的。rabbitMQ提供了两种方式解决;

              通过事务机制实现:

                    使用txSelect(),txCommit(),txRollback()方法;但该方式耗时较长

              通过将交换机设置成confirm模式实现:

                    设置exange为confirm模式,当消息被投递到匹配的队列之后,就会发送一个确认给生产者;如果消息是可持久化的,那么确认消息会在写入磁盘之后发出。confirm模式最大的好处在于他是异步的,生产者可以通过回调方法来处理该确认消息,如果因为rabbitMQ自身内部原因导致丢失,会发送一条nack消息,同样可以在回调方法中处理;

          消费者确认机制:

                消费者在声明队列时,可以指定toack参数,为true,则是自动应答;false手动应答;

                    自动应答就是当消息被消费后,即RabbitMQ会进行删除消息;如果当消息处理过程中出现宕机或者其他原因导致该消息没有处理完毕,则该消息就丢失了。

                    手动应答,则是需要显示发挥ack信号,如消息被消费后,消费端并没有发回ack信号且消费者断开,则rabbitMQ会将消息重新进入队列等待下一个消费者;

                    这样就能保证每个消息都能正常处理了;

本文发表于2018年02月13日 08:31
(c)注:本文转载自https://my.oschina.net/u/3187740/blog/1621619,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 1609 讨论 0 喜欢 0

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

这世界真好,吃野东西也要留出这条命来看看

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1