文档章节

rabbitMQ 基础概念介绍

lc_fly1
 lc_fly1
发布于 02/12 15:11
字数 1174
阅读 390
收藏 29

传统的队列消息服务,有三个概念,生产者,消费者,队列;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会将消息重新进入队列等待下一个消费者;

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

© 著作权归作者所有

共有 人打赏支持
lc_fly1
粉丝 9
博文 21
码字总数 20194
作品 0
武汉
程序员
私信 提问
RabbitMQ-理解消息通信-虚拟主机和隔离

每个RabbitMQ服务器都能创建虚拟的消息服务器,我们称之为虚拟主机(vhost)每一个vhost本质上是一个mini版的RabbitMQ服务器,拥有自己的队列、交换器和绑定等等 更重要的是,他拥有自己的权限...

yzy121403725
05/21
0
0
php| 初探 rabbitmq

date: 2018-09-03 21:30:23 title: php| 初探 rabbitmq description: 零零散散折腾了 rabbitmq 几次, 归纳总结一下先 经常看到消息队列( MQ ), 实战中比较少, 说说我的一些粗线的理解: 引入消...

daydaygo
09/05
0
0
Spring Boot+RabbitMQ学习笔记

RabbitMQ RabbitMQ 是一个由 Erlang 语言开发的 的开源实现。最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。 消息队列 先从基础开始,加...

听_风
06/07
0
0
SpringBoot笔记(十一)RabbitMQ

安装Erlang RabbitMQ基于Erlang,所以得先安装Erlang http://www.erlang.org/downloads 根据自己的系统选择下载,安装完了,配置一下path即可 windows默认安装路径: 验证: 有时候可能需要重...

世外大帝
04/25
0
0
消息中间件—RabbitMQ(集群原理与搭建篇)

摘要:实际生产应用中都会采用消息队列的集群方案,如果选择RabbitMQ那么有必要了解下它的集群方案原理 一般来说,如果只是为了学习RabbitMQ或者验证业务工程的正确性那么在本地环境或者测试...

癫狂侠
05/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

stylus

stylus基础教程,stylus实例教程,stylus语法总结

miaojiangmin
32分钟前
3
0
PHP生成CSV之内部换行

当我们使用PHP将采集到的文件内容保存到csv文件时,往往需要将采集内容进行二次过滤处理才能得到需要的内容。比如网页中的换行符,空格符等等。 对于空格等处理起来都比较简单,这里我们单独...

豆花饭烧土豆
今天
2
0
使用 mjml 生成 thymeleaf 邮件框架模板

发邮件算是系统开发的一个基本需求了,不过搞邮件模板实在是件恶心事,估计搞过的同仁都有体会。 得支持多种客户端 支持响应式 疼彻心扉的 outlook 多数客户端只支持 inline 形式的 css 布局...

郁也风
今天
8
0
让哲学照亮我们的人生——读《医务工作者需要学点哲学》有感2600字

让哲学照亮我们的人生——读《医务工作者需要学点哲学》有感2600字: 作者:孙冬梅;以前读韩国前总统朴槿惠的著作《绝望锻炼了我》时,里面有一句话令我印象深刻,她说“在我最困难的时期,...

原创小博客
今天
5
0
JAVA-四元数类

public class Quaternion { private final double x0, x1, x2, x3; // 四元数构造函数 public Quaternion(double x0, double x1, double x2, double x3) { this.x0 = ......

Pulsar-V
今天
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部