198、RabbitMQ 的核心概念 及 工作机制概述; Exchange 类型 及 该类型对应的路由规则;了解什么是JMS。

目录

  • JMS 讲解
  • ★ RabbitMQ的核心概念
  • ★ RabbitMQ工作机制
  • ★ Connection(连接) 与 Channel(通信信道)
  • ★ Exchange
  • ★ Exchange与Queue
  • ★ Exchange的类型(4种)及 该类型对应的路由规则

看RabbitMQ 之前,可以先了解下什么是 JMS。

JMS 讲解

先简单看下 JMS 是什么,用来对比。
JMS 也是一种消息机制
JMS 规范,属于 Java EE 规范
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

AMQP ( Advanced Message Queuing Protocol ) 高级消息队列协议
在这里插入图片描述

★ RabbitMQ的核心概念

Connection: 代表客户端(包括消息生产者和消费者)与RabbitMQ之间的连接。

Channel: 连接内部的Channel。

Exchange: 充当消息交换机的组件。

Queue: 消息队列。

★ RabbitMQ工作机制

AMQP ( Advanced Message Queuing Protocol ) 高级消息队列协议
RabbitMQ 是一种属于 AMQP 这种协议的消息组件。
RabbitMQ 是遵循 AMQP 的一个实现

▲ 原有JMS只有三层:

消息生产者---------->消息目的---------->消息消费者

▲ AMQP(RabbitMQ)增加了一层

消息生产者----------Exchange-----------消息队列(目的)----------消息消费者

同理,无论是消息生产者,还是消息消费者,它们都使用Connection与消息Broker之间建立连接——这一点与JMS是一样。

RabbitMQ的消息生产者、消息消费者实际与消息Broker通信的是Channel,
JMS实际则使用Session。

在这里插入图片描述

★ Connection(连接) 与 Channel(通信信道)

▲ 不管是消息生产者,还是消息消费者,它们都要通过Connection建立与RabbitMQ之间的连接,因此Connection就代表客户端与RabbitMQ之间的连接。

▲ 但客户端与RabbitMQ之间实际通信所用的是Channel(信道),这是因为RabbitMQ采用了类似于Java NIO的做法,避免为应用程序中的每个线程都建立单独的连接,因此是使用Channel来复用连接,这样不仅可以降低性能开销,而且也便于管理。

简单两句话:

 - Connction代表了客户端与消息Broker之间的连接。建立连接用Connection。- Channel代表了客户端与消息Broker之间的通信信道。实际通信用Channel。Channel位于Connection之内,也就是说,Channel必须通过Connection来获得。

★ Exchange

消息生产者发送消息时,只需指定两个关键信息:

 - exchange:将该消息发送到哪个Exchange。- routing key:消息的路由key。该路由key会决定消息要被路由到哪些消息队列。

RabbitMQ的消息生产者只需指定将消息发送到哪个Exchange,Exchange相当于消息交换机,

▲ Exchange 它会根据自身的类型和消息的路由key(routing key),将消息分发到一个或多个消息队列(Queue)
消息实际依然由于消息队列来负责管理。
消息由Exchange负责分发。

▲ 简单来说:
消息生产者将消息发送给Exchange,Exchange负责将消息分发给对应的Queue,Exchange分发消息的关键在于它本身的类型和路由key。

▲ 消息生产者发送消息时,与消息队列是无关的。(只跟exchange和routing key有关)

▲ 消息消费者接收消息时,只需从指定消息队列中获取消息即可,与Exchange是无关的。
(只跟消息队列有关)

★ Exchange与Queue

▲ 为了让Exchange能将信息分发给Queue,Queue需要将自己绑定到Exchange上(也就是让Exchange来管理多个Queue),
Exchange只会将消息分发给绑定到自己的Queue,没有绑定的Queue不会得到Exchange分发的消息。

将Queue绑定到Exchange的过程,就相当于将Queue注册到Exchange的过程。

▲ 将Queue绑定到Exchange时,也需要指定一个路由key。

▲ Exchange就根据发送消息时指定的路由key、绑定Queue时指定的路由key来决定要将消息分发给哪些Queue。

【备注】:路由key(就是个字符串),两个地方需要用到:

A:将Queue绑定到Exchange时,需要指定路由key。

B:发送消息时,需要Exchange和路由key。




★ Exchange的类型(4种)及 该类型对应的路由规则


Exchange来分发消息时,要看Exchange本身的类型、消息的路由key。

fan:扇子  out:出现、向外   fanout:扇出、展开、散开、分列

fanout: 广播Exchange这种类型的Exchange会将消息广播到所有与它绑定的Queue。
这种类型的Exchange在分发消息时不看路由key。
只要将消息发送到该Exchange,该消息就会被自动广播所有消息队列——这就是典型的Pub-Sub模型。

direct: 这种类型的Exchange将消息直接发送到路由key对应的队列。
direct:笔直的、径直的
消息队列绑定到Exchange时,要指定路由key;
发送消息时,也要指定路由key;
就是使用direct类型的Exchange只有当两个路由key完全相同时,该消息队列才能被分发消息

topic: 这种类型的Exchange在匹配路由key时支持通配符,相当于它是增强型的direct

【备注】:此处的topic类型的Exchange与JMS的消息主题没有半毛钱的关系。

headers: 这种类型的Exchange要根据消息自带的头信息进行路由。这种类型比较少用。




消息发送到消息队列的一些示例:

如图:假设消息生产者又发送了一条消息,路由key 是 abc , 那么这个 路由key 是 abc 的 消息,在发送到 exchange 之后,就会直接被丢弃了,因为 exchange 绑定的众多 queue 消息队列中,没有对应的 路由key 是 abc。所以这个消息不会分发给任何的消息队列。
在这里插入图片描述

 路由key通配符解释:单词与单词之间用【  .   点号】隔开, 比如:路由key是:aaa.bbb.ccc   ,就表示这个路由key是由三个单词组成的。【* . crazyit . * 】 表示这个 路由key 只能是三个单词组成,第一个和第三个单词随便,
但是中间的单词一定要是 crazyit  ,才可以匹配上。【* . org】 表示这个 路由key 只能是两个单词组成,第一个单词随便,
但是第二个单词一定要是 org,才可以匹配上【# . org】 # 号代表0-N 个单词,表示这个 路由key 是多个单词组成,或者只有一个 org 也算匹配上。org 前面有多少个单词都没问题,或者没单词也可以,只要最后一个单词是 org , 那么就可以匹配上。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/133297.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux系统下centos中在线添加硬盘后不重启在线扩容linux系统目录不重启系统

Centos7 在线添加硬盘不重启系统 CentOS 7在线添加新磁盘,无需重启 现有环境基本都是线下server以及线上虚拟机等,几乎都支持热插拔,热扩容,所以在线添加新磁盘就尤为重要,这样可以无需中断当前服务或进程也可对其进行添加硬盘操作。 1.添加硬盘: 虚拟机在线状态下对其进行添加…

如何使用CSS和JavaScript实施暗模式?

近年来,暗模式作为用户界面选项备受追捧。它提供了更暗的背景和更亮的文本,不仅可以减轻眼睛疲劳,还可以节省电池续航时间,尤其是在OLED屏幕上。 不妨了解如何结合使用CSS和JavaScript为网站和Web应用程序添加暗模式选项。 了解暗…

pytorch学习第三篇:梯度

下面介绍了在pytorch中如何进行梯度运算,并介绍了在运行梯度计算时遇到的问题,通过解决一个个问题,来深入理解梯度计算。 梯度计算 import torch x = torch.rand(3,4,requires_grad=True) b = torch.rand(4,3,requires_grad=True) print(x,b)y = x@bt = y.sum()求导数 t.…

2015架构案例(五十一)

第5题 【说明】某信息技术公司计划开发一套在线投票系统,用于为市场调研、信息调查和销售反馈等业务提供服务。该系统计划通过大量宣传和奖品鼓励的方式快速积累用户,当用户规模扩大到一定程度时,开始联系相关企业提供信息服务,并…

华为云云耀云服务器L实例评测 | 实例评测使用之硬件参数评测:华为云云耀云服务器下的 Linux 磁盘目录分析神器 ncdu

华为云云耀云服务器L实例评测 | 实例评测使用之硬件参数评测:华为云云耀云服务器下的 Linux 磁盘目录分析神器 ncdu 介绍华为云云耀云服务器 华为云云耀云服务器 (目前已经全新升级为 华为云云耀云服务器L实例) 华为云云耀云服务器…

Python3无法调用Sqlalchemy解决(mysqldb)

原因 在安装Sqlalchemy后运行程序报错 无法导入mysqldb,缺失模块 ImportError: No module named ‘MySQLdb’ 既然缺少 MySQLdb 这个模块,尝试按照正常的想法执行 pip install MySQLdbpip install mysql-python 应该能解决,但是却找不到…

Umi + React + Ant Design Pro + TS 项目搭建

新建项目目录 mkdir 【项目名称】在对应目录 D:\react\demo 中,安装 Umi 脚手架: yarn create umi接下来,安装将要用到的相关依赖 umijs/plugins: npm i umijs/plugins -Dumijs/plugins 是 Umi 的官方插件集,包含了…

第二证券:跨行转账为什么迟迟不到账?

现在,越来越多的人挑选使用跨行转账来结束日常资金生意。不过,有时候在进行跨行转账时,或许会出现迟迟不到账的状况。这种状况常常让人感到困惑和焦虑。所以,我们需求深入分析这个问题,找出原因,以便可以防…

ES相关面试问题整理

索引模板了解么 索引模板,一种复用机制,就像一些项目的开发框架如 Laravel 一样,省去了大量的重复,体力劳动。当新建一个 Elasticsearch 索引时,自动匹配模板,完成索引的基础部分搭建。 模板定义&#xf…

阿里云10M公网收费价格表(一年和1个月报价)

阿里云服务器10M带宽收费价格表,阿里云服务器上海地域10M带宽一年优惠价格5355元,10M带宽一个月525元,地域不同带宽价格不同,阿里云服务器网以华东1(上海)地域为例,5M及5M以下带宽按照23元一个月…

C++:多态

本文主要介绍c中多态的概念、多态的定义及实现、抽象类、多态的原理、单继承和多继承关系中的虚函数表。 目录 一、多态的概念 二、多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写 4.C11 override 和 final 5.重载、覆盖(重写)、隐藏(重定义)的对比 三、…

并发、并行、同步、异步、阻塞、非阻塞

一、多核、多cpu (一)多核 Multicore 核是CPU最重要的部分。负责运算。核包括控制单元、运算单元、寄存器等单元。 多核就是指单个CPU中有多个核。 (二)多cpu Multiprocessor 多cpu就是一个系统拥有多个CPU。每个CPU可能有单个核…