MQ系列(1)——rabbitMQ简介
前文我们学习了 MQ的相关知识,现在我们来学习一下实现了AMQP协议的 rabbitMQ 中间件。rabbitMQ 是使用 erlang 语言编写的中间件(erlang之父 19年4月去世的,很伟大一个程序员)。
rabbitMQ 的结构和的角色
学习rabbtMQ我们先要弄清楚这几个概念:exchange,queue,routing-key,binding-key,message,publisher,exchange,binding-key,Connection,Channel,consumer,broker;下面对这些角色概念进行介绍。
消息的发送方被称作publisher(生产者),而消息的接收方被称作consumer(消费者),而消息队列服务器实体就是broker(指rabbitMQ);消费者或者生产者对rabbitMQ的一个连接被称作Connection(连接),在rabbit的连接模型中,为了提高连接传输效率,采用了Channel(管道)这种方式实现多路复用,类似于Nio中的模型;我们知道建立一个TCP连接代价很大,因此TCP连接建立后最好不要断开Connection-Channel连接模型就是为了达到这种目的;一个消费者(生产者)使用一个channel消费(发送)消息,而多个Channel共用一个Connection。
一个生产者向rabbit投递消息,然后消费者消费这个消息的过程是这样的——生产者将消息投递给rabbit,在rabbit中exchange(交换机)首先会接收到这个消息,交换机相当于一个“分拣员”的角色,负责分拣消息,将这些消息存储到和自己绑定的queue(队列)中去,然后和队列绑定的消费者会消费这些消息。队列和交换机绑定通过一个binding-key(绑定键)来标记,而生产者投递消息给交换机的时候会指定一个routing-key(路由键),而交换机会根据路由和绑定键来判断将消息放到那些队列中去(扩展:kafka的数据是存储在 exchange 中,它的 queue 只是逻辑队列)。
图一是rabbitMQ的一个概念简图:

图一:rabbitMQ 概念简图
rabbitMQ交换机类型
在rabbit中交换机共有四种类型,下面对其类型和其消息路由规则做说明:
direct exchange(直连交换机):消息中的routing-key如果和binding-key一致, 交换器就将消息发到对应的队列中,routing-key要与binding-key完全匹配。fanout exchange(扇型交换机):扇型交换机会将交给自己的消息发到所有和自己绑定的队列中去,它不会去匹配routing-key和binding-key。topic exchange(主题交换机):主题交换机的routing-key匹配binding-key的方式支持模糊匹配, 以.分割单词,*匹配一个单词,#匹配多个单词,比如如路由键是com.muggle.first能被com.#和*.muggle.*绑定键匹配。headers exchange(头交换机):类似主题交换机,但是头交换机使用多个消息属性来代替路由键建立路由规则。通过判断消息头的值能否与指定的绑定相匹配来确立路由规则。当交换机的x-match属性为any时,消息头的任意一个值被匹配就可以满足条件,当为all的时候,就需要消息头的所有值都匹配成功,这种交换机在实际生产中用的并不多。
在实际生产中,我们可以选择不同交换机类型来灵活的配置我们的生产者和消费者之间消息的消费关系。如延时队列,消息广播等的功能。
作者:muggle 点我关注作者
出处:https://muggle-book.gitee.io/
版权:本文版权归作者所有
转载:欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任
MQ系列(1)——rabbitMQ简介的更多相关文章
- 【SpringBoot MQ 系列】RabbitMq 核心知识点小结
[MQ 系列]RabbitMq 核心知识点小结 以下内容,部分取材于官方教程,部分来源网络博主的分享,如有兴趣了解更多详细的知识点,可以在本文最后的文章列表中获取原地址 RabbitMQ 是一个基于 ...
- 【SpringBoot MQ 系列】RabbitListener 消费基本使用姿势介绍
[MQ 系列]RabbitListener 消费基本使用姿势介绍 之前介绍了 rabbitmq 的消息发送姿势,既然有发送,当然就得有消费者,在 SpringBoot 环境下,消费可以说比较简单了,借 ...
- 我为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比(转载)
转载自:https://www.sojson.com/blog/48.html 前言: MQ 是什么?队列是什么,MQ 我们可以理解为消息队列,队列我们可以理解为管道.以管道的方式做消息传递. 场景: ...
- 为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比
原文:https://www.sojson.com/blog/48.html 前言: MQ 是什么?队列是什么,MQ 我们可以理解为消息队列,队列我们可以理解为管道.以管道的方式做消息传递. 场景: ...
- RabbitMQ系列(一)rabbitmq简介
------------恢复内容开始------------ 参考:https://www.cnblogs.com/vipstone/p/9275256.html RabbitMQ简介 在介绍Rabb ...
- SpringBoot系列之RabbitMQ使用实用教程
SpringBoot系列之RabbitMQ使用实用教程 @ 目录 1. 消息队列概述 1.1 MQ的概述 1.2 MQ目的地形式 2. 消息队列实现方式 2.1 常见MQ框架 2.2 MQ实现方式 3 ...
- 《吃透MQ系列》核心基础全在这里了
这是<吃透XXX>技术系列的开篇,这个系列的思路是:先找到每个技术栈最本质的东西,然后以此为出发点,逐渐延伸出其他核心知识.所以,整个系列侧重于思考力的训练,不仅仅是讲清楚 What,而是 ...
- 《吃透MQ系列》之扒开Kafka的神秘面纱
大家好,这是<吃透 MQ 系列>的第二弹,有些珊珊来迟,后台被好几个读者催更了,实属抱歉! 这篇文章拖更了好几周,起初的想法是:围绕每一个具体的消息中间件,不仅要写透,而且要控制好篇幅,写 ...
- RabbitMQ简介
AMQP简介 在了解RabbitMQ之前,首先要了解AMQP协议.AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消 ...
- MQ选型之RabbitMQ
RabbitMQ是部署最广泛的开源消息代理.[官方原话] 前言: MQ 是什么?队列是什么,MQ 我们可以理解为消息队列(message queue),队列我们可以理解为管道.以管道的方式做消息传递. ...
随机推荐
- 好用的python性能测试神器–Locust
原文链接:https://mp.weixin.qq.com/s/9PxSPuHmucSLi_welq6uNQ 现在性能测试工具太多,根据业务不同使用,比如说我们熟悉的loadrunner.jmeter ...
- queue.Queue()
一.构造方法 Queue是构造方法,函数签名是Queue(maxsize=0) ,其中maxsize设置队列的大小. 二.实例方法 Queue.qsize(): 返回queue的近似值.注意:qsiz ...
- Java—JSON串转换成实体Bean对象模板
介绍 模板需求说明 开发中经常遇到前端传递过来的JSON串的转换,后端需要解析成对象,有解析成List的,也有解析成Map的. 依赖 <dependency> <groupId& ...
- 谈谈C#多线程开发:并行、并发与异步编程
阅读导航 一.使用Task 二.并行编程 三.线程同步 四.异步编程模型 五.多线程数据安全 六.异常处理 概述 现代程序开发过程中不可避免会使用到多线程相关的技术,之所以要使用多线程,主要原因或目的 ...
- [注]6W运营法则教你盘活社区内容运营
社区运营人员大体分为两种:一种是内容运营,这类人才基于产品,一般对文字以及对广告文案比较敏感:另外一种则是更多基于产品推广运营,前者需要把内容最大化地曝光,后者则是把产品推送给用户,两者的是相辅相成, ...
- Bank4
Account: package banking4; public class Account { private double balance; public Account(double int_ ...
- JavaScript 简版-菜鸟中的菜鸟2
JavaScript 输出 JavaScript 没有任何打印或者输出的函数. JavaScript 显示数据 JavaScript 可以通过不同的方式来输出数据: 使用 window.alert() ...
- 04 . Python入门之条件语句
一. Python条件语句 Python条件语句是通过一条或多条语句执行结果(True或False)来决定执行的代码块. 可以通过下图简单了解语句的执行过程 Python程序语言指定任何非0和非空(n ...
- jchdl - GSL实例 - DLatch(D锁存器)
https://mp.weixin.qq.com/s/c8kDgye50nKJR4tkC0RzVA D锁存器对电平敏感,当使能位使能时,输出Q跟随输入D的变化而变化. 摘自康华光<电子 ...
- Java实现蓝桥杯 算法提高 线段和点
算法提高 线段和点 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 有n个点和m个区间,点和区间的端点全部是整数,对于点a和区间[b,c],若a>=b且a<=c,称点a满 ...