一、RabbitMQ 即一个消息队列,主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲,消息分发的作用。

消息中间件最主要的作用是解耦,中间件最标准的用法是生产者生产消息传送到队列,消费者从队列中拿取消息并处理,生产者不用关心是谁来消费,消费者不用关心谁在生产消息,从而达到解耦的目的。在分布式的系统中,消息队列也会被用在很多其它的方面,比如:分布式事务的支持,RPC的调用等等。

Rabbitmq系统最核心的组件是Exchange和Queue,下图是系统简单的示意图。Exchange和Queue是在rabbitmq server(又叫做broker)端,producer和consumer在应用端。

消息队列,提供了FIFO的处理机制,具有缓存消息的能力。rabbitmq中,队列消息可以设置为持久化,临时或者自动删除。

二、其中比较重要的概念有 4 个,分别为:虚拟主机,交换机,队列,和绑定。

1. 虚拟主机:一个虚拟主机持有一组交换机、队列和绑定。为什么需要多个虚拟主机呢?很简单,RabbitMQ当中,用户只能在虚拟主机的粒度进行权限控制。 因此,如果需要禁止A组访问B组的交换机/队列/绑定,必须为A和B分别创建一个虚拟主机。每一个RabbitMQ服务器都有一个默认的虚拟主机“/”。

2. 交换机:Exchange 用于转发消息,但是它不会做存储 ,如果没有 Queue bind 到 Exchange 的话,它会直接丢弃掉 Producer 发送过来的消息。 
这里有一个比较重要的概念:路由键(routing_key) 。消息到交换机的时候,交互机会转发到对应的队列中,那么究竟转发到哪个队列,就要根据该路由键。

3. 绑定:也就是交换机需要和队列相绑定,这其中如上图所示,是多对多的关系。

交换机

交换机的功能主要是接收消息并且转发到绑定的队列,交换机不存储消息,在启用ack模式后,交换机找不到队列会返回错误。交换机有四种类型:Direct, topic, Headers and Fanout

Exchange类似于数据通信网络中的交换机,提供消息路由策略。rabbitmq中,producer不是通过信道直接将消息发送给queue,而是先发送给Exchange。一个Exchange可以和多个Queue进行绑定,producer在传递消息的时候,会传递一个ROUTING_KEY,Exchange会根据这个ROUTING_KEY按照特定的路由算法,将消息路由给指定的queue。和Queue一样,Exchange也可设置为持久化,临时或者自动删除。

1. Direct (默认)直接交换器,工作方式类似于单播,Exchange会将消息发送完全匹配ROUTING_KEY的Queue

2. fanout 广播是式交换器,不管消息的ROUTING_KEY设置为什么,Exchange都会将消息转发给所有绑定的Queue。

3. topic 主题交换器,工作方式类似于组播,Exchange会将消息转发和ROUTING_KEY匹配模式相同的所有队列,比如,ROUTING_KEY为user.stock的Message会转发给绑定匹配模式为 * .stock,user.stock, * . * 和#.user.stock.#的队列。( * 表是匹配一个任意词组,#表示匹配0个或多个词组)

4.  headers 消息体的header匹配(ignore)

这里有几种方式的例子,转发自https://www.cnblogs.com/web424/p/6767713.html

三、RabbitMQ简单来说,就是生产者发送消息到虚拟主机,虚拟主机把消息交给指定的交换机,交换机按照规则扔给消息队列进行存储,消息队列等待消费者来消费。

Rabbitmq基本原理相关推荐

  1. Rabbitmq基本原理和架构

    全栈工程师开发手册 (作者:栾鹏) 架构系列文章 rabbitmq官网:https://www.rabbitmq.com/rabbitmqctl.8.html MQ全称为Message Queue, ...

  2. rabbitmq原理 php,Rabbitmq基本原理

    一.RabbitMQ 即一个消息队列,主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲,消息分发的作用. 消息中间件最主要的作用是解耦,中间件最标准的用法是生产者生产消息传送到队列,消费者从队 ...

  3. 消息中间件 rabbitMQ

    参考内容:https://www.cnblogs.com/dwlsxj/p/RabbitMQ.html 一.什么是RabbitMQ RabbitMQ是一个由erlang 开发的AMQP(Advance ...

  4. Centos7安装RabbitMQ与使用(超详细)

    Centos7安装RabbitMQ 第一步.安装任何软件包之前,建议使用以下命令更新软件包和存储库 yum -y update 第二步.Erlang在默认的YUM存储库中不可用,因此您将需要安装EPE ...

  5. 微服务架构系列文章、精品教程

    python工具 python相关工具使用技巧(pip) virtualenv虚拟独立python环境使用 Python下APScheduler的快速指南 python文件夹,文件监听工具(pyino ...

  6. 面试宝典 --- 2022-7-6

    我吾等年纪轻轻,一遇挫折,便松懈怠慢,日后怎成大器 成大事者不谋于众,谋于众者必流于庸俗 故天将降大任于是人也,必先苦其心志,劳其筋骨,饿其体肤,空乏其身,行拂乱其所为,所以动心忍性,曾益其所不能 j ...

  7. RabbitMQ,Apache的ActiveMQ,阿里RocketMQ,Kafka,ZeroMQ,MetaMQ,Redis也可实现消息队列,RabbitMQ的应用场景以及基本原理介绍,RabbitMQ

    RabbitMQ,Apache的ActiveMQ,阿里RocketMQ,Kafka,ZeroMQ,MetaMQ,Redis也可实现消息队列,RabbitMQ的应用场景以及基本原理介绍,RabbitMQ ...

  8. 干货:RabbitMQ消息队列基本原理介绍

    RabbitMQ 是高级消息队列协议(AMQP)的开源消息代理软件. RabbitMQ 服务器是用 Erlang 语言编写的,消息系统允许软件.应用相互连接和扩展.这些应用可以相互链接起来组成一个更大 ...

  9. RabbitMQ的应用场景以及基本原理简介

    1.背景 RabbitMQ是一个由erlang开发的AMQP(Advanved Message Queue)的开源实现. 2.应用场景 2.1异步处理 场景说明:用户注册后,需要发注册邮件和注册短信, ...

最新文章

  1. SpringBoot第十一篇:springboot集成swagger2,构建优雅的Restful API
  2. 《奇思妙想》人物篇--图灵奖得主概览
  3. 1.7 元注解作用及使用
  4. 推荐几款不错的写作利器
  5. python引用传递的区别_python的值类型和引用类型及值传递和引用传递的区别
  6. 备战秋招——操作系统
  7. 控制台查出数据传到layui数据表格却没有数据的问题
  8. 永磁直驱风力发电机结构图_国内首台10MW海上永磁直驱风力发电机研制成功
  9. 为什么我直接在servlet里面直接输出message不乱码,而跳转到web页面就出现乱码,而且存到数据库的也是乱码,我尝试了网上的各种方法,还是不成功。。
  10. Hibernate方法save、update、merge、saveOrUpdate及get和load的区别
  11. ACDSee QuickView(图片浏览器)v1.2.42官方版
  12. 消防巡检控制器,消防泵巡检控制柜专用元件
  13. 集群通信组件tribes之使用方法
  14. 三个简单的C语言程序
  15. web结课大作业结业报告(附源码及展示效果)
  16. C++ STL常用标准库容器入门(vector,map,set,string,list...)
  17. 关于如何在mac系统上安装Git并在码市上建立项目
  18. FROM_GLC的介绍与数据下载教程
  19. 阿里巴巴资深DBA的职业生涯总结
  20. windows应用程序与控制台应用程序的区别

热门文章

  1. Python配置免费的OCR识别(OCRSpace)每月25000次(保姆级教学)
  2. 扒一扒互联网大厂的真名真姓
  3. 少年群侠传服务器维护时间,少年群侠传什么时间公测_少年群侠传公测时间介绍_快吧游戏...
  4. Java实现游戏匹配
  5. 在Google Colab上使用VS Code
  6. 算法第二期——排列组合(Python)
  7. git提交代码出现错误remote: [31mx-oauth-basic: Incorrect username or password (access token)
  8. 苏宁减持阿里股票获利32亿;京东物流宣称已盈利;三星去年研发投入143亿美元丨价值早报
  9. matlab app designer小芯片超声图像处理
  10. java http流式传输