rabbitMQ 基础概念介绍

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

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

   rabbitMQ重要概念:

 

     虚拟主机(Virtual Host):ui

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

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

              

     交换机(Exchange):事务

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

 

     路由键(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会将消息从新进入队列等待下一个消费者;

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

相关文章
相关标签/搜索