rabbitmq 实践与学习心得分享(1)

栏目: Redis · 发布时间: 4年前

内容简介:半年前新加入一家公司,发现公司所用的产品中引入了rabbitmq 这个消息中间件。引用rabbitmq 主要用来解决以下几个问题:作为业务开发人员,在日常的开发过程中往往会将rabbitmq看做是一个黑盒,仅仅局限于调用相关的API 进行消息的发送与消费操作,但是作为一个合格的开发人员,我们还是有必要对于我们用到的一些开源工具有一定的了解,相信每一个开发人员心理都有一个技术梦,哈哈。好了,闲话不多说,让我们开始学习和了解rabbitmq 吧。在了解rabbitmq 之前,我觉得有必要先了解一下消息中间件,那

半年前新加入一家公司,发现公司所用的产品中引入了rabbitmq 这个消息中间件。引用rabbitmq 主要用来解决以下几个问题:

  • 发送消息:作为发送消息的载体,比如发送系统消息,微信,短信,email等形式消息。
rabbitmq 实践与学习心得分享(1)
  • mysql 数据异构存储:业务侧为了支持全文索引,引入了elasticSearch中间件,每次针对业务数据的增,删,改,都会发送消息到rabbitmq,然后由消费端将变更的数同步到到elasticSearch 中。
rabbitmq 实践与学习心得分享(1)
  • 缓存数据的更新:针对一些应用比较频繁的数据,系统引入了 redis 作为缓存存储,在业务数据发生变更的时候,相应的变更需要同步到redis。
    rabbitmq 实践与学习心得分享(1)
    .

作为业务开发人员,在日常的开发过程中往往会将rabbitmq看做是一个黑盒,仅仅局限于调用相关的API 进行消息的发送与消费操作,但是作为一个合格的开发人员,我们还是有必要对于我们用到的一些开源 工具 有一定的了解,相信每一个开发人员心理都有一个技术梦,哈哈。好了,闲话不多说,让我们开始学习和了解rabbitmq 吧。

二. 初识rabbitmq

在了解rabbitmq 之前,我觉得有必要先了解一下消息中间件,那么什么是消息中间件呢?我的理解,消息中间件就是利用高效可靠的消息通信机制,来实现异构系统的协同。它能够屏蔽不同平台系统的语言以及一些特性的差异,实现系统的解耦。

消息中间件常用的场景有哪些呢?

  • 消息通信 (如上面的第一种场景)
  • 异步解耦(如上面的第2,3种场景)
  • 流量削峰

消息中间件一般传递消息有哪几种模式呢?

  • P2P(点对点)模式 : 点对点模式一般是基于队列的,生产者发送消息到队列,消费者从队列中接收消息。 这种用于一对一通信,即一条消息只会被一个消费者消费。

    rabbitmq 实践与学习心得分享(1)
  • 发布订阅(pub/sub)模式:消息生产者发布消息到某个topic,消息消费者则从消息主题中订阅消息,这种用于一对多广播模式,即一条消息可以被多个消费者消费。

    rabbitmq 实践与学习心得分享(1)

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:虚拟主机

rabbitmq 实践与学习心得分享(1)
说明:个人理解exchange看做是消息的中转中心,queue 看做是消息的存储中心,具体这条消息中转路由到哪个queue,需要结合exchange的类型和routingkey ,以及bindingkey 来完成。而queue,exchange,和绑定关系针对每一个vhost都是相对独立的。
复制代码

2) rabbitmq exchange 的介绍:

rabbitmq 的exchange 主要有几种类型:fanout,direct,topic,header ,每一种分别表示不同的路由规则:
复制代码
  • fanout:将消息路由到与exchange 绑定的所有队列中。和routingkey 无关:
rabbitmq 实践与学习心得分享(1)
  • direct:将消息路由到Bingdingkey 与routingkey 完全匹配的队列中。
rabbitmq 实践与学习心得分享(1)
  • topic :将消息路由到Bingdingkey 与routingkey 匹配的队列中,注意这里的匹配支持模糊匹配。 routingkey和bindingkey 中含.的字符串被拆分成一个个单词:#用于匹配一个单词,*用于匹配多个单词。 如下图:com.rabbitmq.demo会匹配到queue1和queue2 ,com.hidden.client只会路由到queue2
rabbitmq 实践与学习心得分享(1)

header:基于消息头中的属性进行匹配,一般不用这种。

三.后记 rabbitmq 如何保证消息的可靠传输的呢?

在业务开发过程中,面对rabbitmq这么个黑盒子,我们脑中常常会有一点疑惑?rabbitmq 能保证我的消息能正常的发送,正常的被消费而不丢失吗?它是如何做到的呢?

rabbitmq 要做到这点,其实采用了很多手段和机制:   
  * 消息发送端:支持事务消息,发送者确认机制;---保证消息顺利发送到broker消息。  
  * 持久化,镜像队列机制----保证消息能成功落盘,以及高可用性。
  * 消息消费端:---消息者确认机制,等等。
  
  一些具体的细节,在第2节中继续分享我的学习心得。
复制代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

敏捷估计与规划

敏捷估计与规划

[美] Mike Cohn / 宋锐 / 清华大学出版社 / 2007-7 / 39.90元

《敏捷估计与规划》一书为对敏捷项目进行估计与规划提供了权威实际的指导方针。在本书中,敏捷联盟的共同创始人Mike Cohn讨论了敏捷估计与规划的思想,并使用现实的例子与案例分析向您详细地展示了如何完成工作。本书清晰地阐述了有关的概念,并引导读者逐步认识到下列一些问题的答案:我们要构建什么?它的规模有多大?需要在什么时候完成?到那个时候我们到底能完成多少?您首先会认识到优秀的计划由哪些东西组成,接着......一起来看看 《敏捷估计与规划》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码