内容简介:半年前新加入一家公司,发现公司所用的产品中引入了rabbitmq 这个消息中间件。引用rabbitmq 主要用来解决以下几个问题:作为业务开发人员,在日常的开发过程中往往会将rabbitmq看做是一个黑盒,仅仅局限于调用相关的API 进行消息的发送与消费操作,但是作为一个合格的开发人员,我们还是有必要对于我们用到的一些开源工具有一定的了解,相信每一个开发人员心理都有一个技术梦,哈哈。好了,闲话不多说,让我们开始学习和了解rabbitmq 吧。在了解rabbitmq 之前,我觉得有必要先了解一下消息中间件,那
半年前新加入一家公司,发现公司所用的产品中引入了rabbitmq 这个消息中间件。引用rabbitmq 主要用来解决以下几个问题:
- 发送消息:作为发送消息的载体,比如发送系统消息,微信,短信,email等形式消息。
- mysql 数据异构存储:业务侧为了支持全文索引,引入了elasticSearch中间件,每次针对业务数据的增,删,改,都会发送消息到rabbitmq,然后由消费端将变更的数同步到到elasticSearch 中。
- 缓存数据的更新:针对一些应用比较频繁的数据,系统引入了 redis 作为缓存存储,在业务数据发生变更的时候,相应的变更需要同步到redis。 .
作为业务开发人员,在日常的开发过程中往往会将rabbitmq看做是一个黑盒,仅仅局限于调用相关的API 进行消息的发送与消费操作,但是作为一个合格的开发人员,我们还是有必要对于我们用到的一些开源 工具 有一定的了解,相信每一个开发人员心理都有一个技术梦,哈哈。好了,闲话不多说,让我们开始学习和了解rabbitmq 吧。
二. 初识rabbitmq
在了解rabbitmq 之前,我觉得有必要先了解一下消息中间件,那么什么是消息中间件呢?我的理解,消息中间件就是利用高效可靠的消息通信机制,来实现异构系统的协同。它能够屏蔽不同平台系统的语言以及一些特性的差异,实现系统的解耦。
消息中间件常用的场景有哪些呢?
- 消息通信 (如上面的第一种场景)
- 异步解耦(如上面的第2,3种场景)
- 流量削峰
消息中间件一般传递消息有哪几种模式呢?
-
P2P(点对点)模式 : 点对点模式一般是基于队列的,生产者发送消息到队列,消费者从队列中接收消息。 这种用于一对一通信,即一条消息只会被一个消费者消费。
-
发布订阅(pub/sub)模式:消息生产者发布消息到某个topic,消息消费者则从消息主题中订阅消息,这种用于一对多广播模式,即一条消息可以被多个消费者消费。
1)rabbitmq 相关概念介绍
在了解rabbitmq之前,有必要对rabbitmq 涉及到的一些概念模型做个介绍:
-
AMQP(advance message queue protocal):高级队列消息协议。Rabbitmq 是基于erlang 语言对于AMQP 协议的实现。
amqp协议详细介绍: docs.oasis-open.org/amqp/core/v…
-
生产者: 就是发送投递消息的一方.
-
消费者: 就是接收消费消息的一方.
-
broker:消息中间件的服务节点.
-
queue: rabbitmq的内部对象,用来存储消息。
-
exchange:交换器
-
routingkey,bindingkey:指定消息的路由规则
-
vhost:虚拟主机
说明:个人理解exchange看做是消息的中转中心,queue 看做是消息的存储中心,具体这条消息中转路由到哪个queue,需要结合exchange的类型和routingkey ,以及bindingkey 来完成。而queue,exchange,和绑定关系针对每一个vhost都是相对独立的。 复制代码
2) rabbitmq exchange 的介绍:
rabbitmq 的exchange 主要有几种类型:fanout,direct,topic,header ,每一种分别表示不同的路由规则: 复制代码
- fanout:将消息路由到与exchange 绑定的所有队列中。和routingkey 无关:
- direct:将消息路由到Bingdingkey 与routingkey 完全匹配的队列中。
- topic :将消息路由到Bingdingkey 与routingkey 匹配的队列中,注意这里的匹配支持模糊匹配。 routingkey和bindingkey 中含.的字符串被拆分成一个个单词:#用于匹配一个单词,*用于匹配多个单词。
如下图:com.rabbitmq.demo会匹配到queue1和queue2 ,com.hidden.client只会路由到queue2
header:基于消息头中的属性进行匹配,一般不用这种。
三.后记 rabbitmq 如何保证消息的可靠传输的呢?
在业务开发过程中,面对rabbitmq这么个黑盒子,我们脑中常常会有一点疑惑?rabbitmq 能保证我的消息能正常的发送,正常的被消费而不丢失吗?它是如何做到的呢?
rabbitmq 要做到这点,其实采用了很多手段和机制: * 消息发送端:支持事务消息,发送者确认机制;---保证消息顺利发送到broker消息。 * 持久化,镜像队列机制----保证消息能成功落盘,以及高可用性。 * 消息消费端:---消息者确认机制,等等。 一些具体的细节,在第2节中继续分享我的学习心得。 复制代码
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Lucene实践心得笔记
- Dockfile 实践心得
- 一次全栈实践心得
- 敏捷开发 Agile 中 Scrum 与 Kanban 的实践心得
- 五个案例,三大心得,Meratix创始人带你进阶深度学习的实践应用之路
- 朱晔的互联网架构实践心得 S2E1:业务代码究竟难不难写?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
程序是怎样跑起来的
[日] 矢泽久雄 / 李逢俊 / 人民邮电出版社 / 2015-4 / 39.00元
本书从计算机的内部结构开始讲起,以图配文的形式详细讲解了二进制、内存、数据压缩、源文件和可执行文件、操作系统和应用程序的关系、汇编语言、硬件控制方法等内容,目的是让读者了解从用户双击程序图标到程序开始运行之间到底发生了什么。同时专设了“如果是你,你会怎样介绍?”专栏,以小学生、老奶奶为对象讲解程序的运行原理,颇为有趣。本书图文并茂,通俗易懂,非常适合计算机爱好者及相关从业人员阅读。一起来看看 《程序是怎样跑起来的》 这本书的介绍吧!