RabbitMQ知识一览-工作经验

简介: 大家在项目里面应该都用过MQ,MQ作为解耦神器,还是很有必要学习的。 RabbitMQ是基于AMQP(高级消息队列协议)。,

大家在项目里面应该都用过MQ,MQ作为解耦神器,还是很有必要学习的。

RabbitMQ是基于AMQP(高级消息队列协议)。支持多种操作系统,支持多种语言。

5015984_367dd717d89ae5db
1、Broker:负责接受客户端消息和路由等功能、
2、Virtual host:虚拟主机的概念,类似权限控制组,一个Virtual host可以包括很多Exchange、Queue,不同mq的消费者生产者可以通过VHost隔离
3、Exchange:交换机,可以理解为在收到生产者的消息后负责将将消息转发给对应的Queue
4、Binding:Queue和Exchange之间绑定的关系,
5、Queue:消息队列,存放所有消息,消费者从Queue消费消息
6、Channel:通道,多路复用连接中的一条独立的双向数据流通道,不管是发出消息还是消费消息,都是通过信道完成,TCP连接
7、Consumer:消费者

Exchange分发策略:主要有四种模式,分别是fanout、direct、topic、headers。但是由于headers匹配的是消息体内header信息,而不是routingKey信息,不但跟规则上和direct差不多,而且性能差,故不常用。下面主要介绍其他三种分发策略
1、fanout:广播,所有发到exchange的消息都会被分发到每个绑定在该exchange的queue上去
2、direct:单播,每个Queue在绑定exchange的时候可以设置routingKey信息,当exchange收到消息的时候,只会将消息转发给binding的routingKey与消息体内的routingKey一致的queue。
3、topic:介于单播和广播之间,跟direct差不多,但是支持routingKey的通配符匹配,这个是日常用的最多的分发策略。*(星号)可以代替一个字。#(散列)可以替代零个或多个单词

RabbitMQ日常项目怎么用:不同事业部、大部门使用不同的MQ集群,同一大部门内不同组使用同一个MQ集群但通过VHost隔离,同一个组的不同AppId使用同一个VHost但是使用不同的Exchange(topic模式),每个AppId内不同功能模块使用不同的Queue(队列隔离可以很好的防止功能耦合,防止某一个功能的消息暴增导致其他功能受影响,最好功能之间queue隔离),每个Queue都按topic模式绑定在该appid对应的Exchange上。

命名方式:Vhost为组的名称,Exchange一般为appid的名称,queue为appid_功能名称_queue,routingKey为appid_功能名称_routingKey。这个一般是我的命名方式。

关于MQ能用来干嘛?
1、RabbitMq是有ack机制的,所以用来做重试很好用,比如说一个操作里有两个步骤,第一个异常了第二个就不执行了,而往往都是分布式接口,在分布式系统环境下,数据就很难保持一致,这时候可以通过MQ的ack机制来保证最终数据一致性
2、异步:对于一个操作带来的其他联动处理,往往不需要第一时间处理,可以在后台慢慢处理,比如写日志就可以异步消费。
3、提高处理速度:正常情况处理一个数据可以同步调用,当你处理的数据达到10万+,百万+的时候就不能在用同步的方式去处理了,而也不能采用异步线程,异步线程太不保险,有无法预估的风险,这时候分发消息,再通过mq的ack机制保证每个消息都会被正确处理,不过再往上的批处理就不能用mq了,毕竟千万级的MQ堆积对整个集群也有不小的压力。
4、多机房数据同布:大型分布式系统往往会有多个机房,通过DRC消息(Data Replication Center)底层保证最终数据一致。

善用MQ,会让你的项目更灵活.......

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
3天前
|
消息中间件 存储 负载均衡
一览纵山小,原来RocketMQ是这样工作的!
Apache RocketMQ作为一款高性能、高可靠性的分布式消息中间件,通过其独特的架构设计和高效的消息处理机制,为分布式系统提供了强大的消息传递能力。本文从RocketMQ的核心组件、消息的产生与投递、消息消费与负载均衡等方面详细解析了其工作原理,希望能够帮助读者更深入地理解RocketMQ的技术实现。
|
11月前
|
消息中间件 存储 网络协议
从原理到实战,手把手教你在项目中使用RabbitMQ
RabbitMQ 的文章之前写过,但是当时给的示例是 Demo 版的,这篇文章主要是结合之前写的理论知识,将 RabbitMQ 集成到技术派项目中。 话不多说,上文章目录: 下面我们先回顾一下理论知识,如果对这块知识已经清楚的同学,可以直接跳到实战部分。 1. 消息队列 1.1 消息队列模式 消息队列目前主要 2 种模式,分别为“点对点模式”和“发布/订阅模式”。 点对点模式 一个具体的消息只能由一个消费者消费,多个生产者可以向同一个消息队列发送消息,但是一个消息在被一个消息者处理的时候,这个消息在队列上会被锁住或者被移除并且其他消费者无法处理该消息。 需要额外注意的是,如果消费者
526 5
|
3月前
|
消息中间件 Prometheus 监控
探秘RabbitMQ:社区插件与扩展的奇妙世界【RabbitMQ 三】
探秘RabbitMQ:社区插件与扩展的奇妙世界【RabbitMQ 三】
160 0
|
11月前
|
消息中间件 存储 负载均衡
工作八年?是高级开发?竟然答不出:如何保证RabbitMQ的高可用?
一个8年工作经验的小伙伴,被问到这样一个问题,说如何保证RabbitMQ的高可用。关于这个问题呢,这位小伙伴倒是有个实操经验,就是不知道如何组织语言。所以,当时面试结果不太理想。今天,我给大家分享一下我的理解。
140 0
|
消息中间件 存储 网络协议
|
消息中间件 存储 缓存
RabbitMQ学习(十):发布确认高级
在生产环境中由于一些不明原因,导致 RabbitMQ 重启,在 RabbitMQ 重启期间生产者消息投递失败导致消息丢失,需要手动处理和恢复。在这样比较极端的情况,当RabbitMQ 集群不可用的时候,无法投递的消息该如何处理呢?如何才能进行 RabbitMQ 的消息可靠投递呢?
101 0
RabbitMQ学习(十):发布确认高级
|
消息中间件 存储 网络协议
常见的RabbitMQ实战居然还能这样搞?
常见的消息队列很多,主要包括 RabbitMQ、Kafka、RocketMQ 和 ActiveMQ,相关的选型可以看我之前的系列, 这篇文章只讲 RabbitMQ,先讲原理,后搞实战。 文章很长,如果你能一次性看完,“大哥,请收下我的膝盖”,建议大家先收藏,啥时需要面试,或者工作中遇到了,可以再慢慢看。 不 BB,直接上思维导图:
|
消息中间件 Java 程序员
Docker下RabbitMQ四部曲之三:细说java开发
本文是《Docker下RabbitMQ四部曲》系列的第三篇,实战两个基于SpringBoot的工程,分别用来生产和消费RabbitMQ消息
101 0
Docker下RabbitMQ四部曲之三:细说java开发
|
消息中间件 监控 数据可视化
SpringCloud进阶:一文通透RabbitMQ服务监控
前面我们介绍了通过turbine直接聚合多个服务的监控信息,实现了服务的监控,但是这种方式有个不太好的地方就是turbine和服务的耦合性太强了,针对这个问题,我们可以将服务的监控消息发送到RabbitMQ中,然后turbine中RabbitMQ中获取获取监控消息,这样就实现类服务和turbine的解耦。 我们通过案例来演示下如何实现该效果 一、启动RabbitMQ服务 显然我们需要安装启动一个RabbitMQ服务 二、创建consumer服务 创建一个consumer服务,同时要将dashboard的监控信息发送到RabbitMQ服务中。 1.创建项目
SpringCloud进阶:一文通透RabbitMQ服务监控
|
消息中间件 Linux 网络安全
阿粉教你避开安装RabbitMQ的那些坑(命令实战)(下)
前段时间的时候,阿粉给大家在一篇文章中讲了关于如何安装RabbitMQ,以及如何在Windows下安装RabbitMQ的文章,但是后台就有粉丝说,为啥不讲 RabbitMQ 在Linux下的安装呢,我在 Linux 下安装了好几次都失败了,然后我还不知道是什么问题。于是阿粉专门整了个小小的云服务器,就打算在自己的云服务器上装上 RabbitMQ 并且给大家详细说一下安装的命令。
阿粉教你避开安装RabbitMQ的那些坑(命令实战)(下)