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

一.写在前面

半年前新加入一家公司,发现公司所用的产品中引入了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节中继续分享我的学习心得。
复制代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值