内容简介:半年前新加入一家公司,发现公司所用的产品中引入了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:业务代码究竟难不难写?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
利用Python进行数据分析
Wes McKinney / 唐学韬 / 机械工业出版社 / 2013-11-18 / 89.00
【名人推荐】 “科学计算和数据分析社区已经等待这本书很多年了:大量具体的实践建议,以及大量综合应用方法。本书在未来几年里肯定会成为Python领域中技术计算的权威指南。” ——Fernando Pérez 加州大学伯克利分校 研究科学家, IPython的创始人之一 【内容简介】 还在苦苦寻觅用Python控制、处理、整理、分析结构化数据的完整课程?本书含有大量的实践案例,......一起来看看 《利用Python进行数据分析》 这本书的介绍吧!