美文网首页
RabbitMQ入门

RabbitMQ入门

作者: CoderInsight | 来源:发表于2023-04-18 10:48 被阅读0次

1,AMQP协议

AMQP是缩写,对应英文:Advance Message Queue Protocol --> 高级消息队列协议。

2,AMQP的核心概念

RabbitMQ基础流程梳理-核心组件图.drawio.png
  • Publisher Application:生产者;
  • SeverVirtual host、Exchange、MessageQueue):又称之为Broker,接收客户端的连接,实现AMQP实体服务;
  • Virtual host:虚拟地址,用于进行逻辑隔离,最上层的消息路由。一个Virtual Host里面可以有若干个Exchange和Queue,同一个VirtualHost里面不能有相同名称的Exchange或Queue;一般是隔离不同的项目或者不同的应用的。
  • Exchange:交换器,通过路由键来实现Exchange和MessageQueue之间绑定的关系,通过RoutingKey进行关联;即生产者生产出Message并投递到Exchange上,Exchange【交换机】接收到信息之后,会和Queue【队列】根据 Routing Key【路由键】进行绑定,然后根据Binding key【绑定键】转发消息到绑定的队列中。而Exchange交换器又分为好多种:直连交换器、扇形交换器、主题交换器、首部交换器。
  • Routing key:一个路由规则,虚拟机可用它来确定如何路由一个特定消息。
  • Queue:也称为Message Queue,用来保存消息知道发送给消费者;一个消息可投入一个或对个队列。
  • Consumer:消费者;
  • Channel:信道,多路复用连接中的一条独立的双向数据流通道,几乎所有的操作都在Channel中进行,Channel是进行消息读写的通道。客户端可建立多个Channel,每个Channel代表一个会话任务。
  • Message:消息,服务器和应用程序之间传送的数据,由Properties和Body组成。Properties可以对消息进行修饰,比如消息的路由键(Routing Key)、优先级(Priority)、是否持久化(delivery-mode)延迟等高级特性;Body则就是消息体内容。
  • Binding:Exchange和Queue之间的虚拟连接, binding中可以包含routing key。
    用于消息队列和交换器之间的管理。一个绑定就是基于路由键将交换器和消息队列连接起来的路由规则。所以可以将交换器理解成一个由绑定构成的路由表。

3,RabbitMQ环境部署

[[RabbitMQ-在线安装-单节点|RabbitMQ部署参考文档]]

(1),交换机的类型

  1. 扇形交换器(Fanout exchange):扇形交换机是最基本的交换机类型,扇形交换机会把能接收到的消息全部发送给绑定在自己身上的队列。因为广播不需要思考,所以扇形交换机处理消息的速度也是所有的交换机类型里面最快的
  2. 直连交换器(Direct exchange):使用广播的方式进行消息的推送,基于直连交换机可以实现RPC【远程过程调用模式】,异步调用。具体的步骤如下:
    • 客户端即是生产者就是消费者,向RPC请求队列发送RPC调用消息,同时监听RPC响应队列。
    • 服务端监听RPC请求队列的消息,收到消息后执行服务端的方法,得到方法返回的结果。
    • 服务端将RPC方法的结果发送到RPC响应队列。
    • 客户端(RPC调用方)监听RPC响应队列,接收到RPC调用结果。
  3. 主题交换器(Topic exchange):Topic Exchange 是 RabbitMQ 中最常用的交换器之一,它根据消息的路由键将消息路由到一个或多个队列中。Topic Exchange 可以使用通配符来匹配路由键。例如,如果一个消息的路由键为 "com.example.stock.usd",那么可以使用 "#.usd" 的匹配模式来将该消息路由到绑定键 "com.example.stock.usd"、"usd" 或者 "com.example.#.usd" 的队列中。这种通配符匹配机制非常适合处理一些动态多变的请求,并且可以在不破坏系统架构的情况下进行扩展和调整。
    • *表示一个单词;
    • #表示任意数量(零个或多个)单词;
  4. 首部交换器(Headers exchange):首部交换机是忽略routing_key的一种路由方式。路由器和交换机路由的规则是通过Headers信息来交换的,这个有点像HTTP的Headers。

5,RabbitMQ消息流转

RabbitMQ基础流程梳理-消息流转图.drawio.png

(1),生产者

1,生产者在推送消息之前,首先会和Server建立 Connection【连接】;
2,然后找到对应Virtual Host【虚拟主机】,然后将带有Routing Key【路由键】消息推送到Exchange【交换机】。
3,Exchange【交换机】接收到信息之后,会和Queue【队列】根据 Routing Key【路由键】进行绑定,然后根据Binding key【绑定键】转发消息到绑定的队列中。

(2),消费者

1,消费者在拉取消息之前,首先会和Server建立 Connection【连接】;
2,然后会请求队列中的消息;
3,消费者确认接收到消息了之后,RabbitMQ会将队列中已经被处理的消息删除

  • 关于自动确认机制:消费者在订阅队列的时候,可以指定 autoAck 参数,当 autoAck 等于 false时, RabbitMQ会等待消费者显式地回复确认信号后才从内存(或者磁盘)中移去消息(实质上是先打上删除标记,之后再删除)。
    当 autoAck 等于 true 时, RabbitMQ 会自动把发送出去的消息置为确认,然后从内存(或者磁盘)中删除,而不管消费者是否真正地消费到了这些消息。
    采用消息确认机制后,只要设置 autoAck 参数为 false ,消费者就有足够的时间处理消息,不用担心处理消息过程中消费者进程挂掉后消息丢失的问题。因为 RabbitMQ 会一直等待持有消息直到消费者显式确认收到消息。

参考连接

  1. 交换机类型的其他详细描述

相关文章

  • MyBatis-从查询昨天的数据说起

    前段时间写了《RabbitMQ入门》系列RabbitMQ入门-初识RabbitMQ RabbitMQ入门-从Hel...

  • 消息服务 - RabbitMQ 基础入门

    rabbitmq RabbitMQ官方入门教程 本文算是实现对入门教程的 java版本翻译吧。本文中演示代码地址 ...

  • RabbitMQ基础

    0. 前言 什么是消息中间件 安装RabbitMQ 编写RabbitMQ的入门程序 RabbitMQ的5种模式特征...

  • RabbitMQ入门-高效的Work模式

    扛不住的Hello World模式 上篇《RabbitMQ入门-从HelloWorld开始》介绍了RabbitMQ...

  • RabbitMQ 入门

    1:windows 下rabbitMQ 的安装 2:介绍 3:RabbitMQ 常见术语 3:java 入门实例 ...

  • RabbitMQ入门-从HelloWorld开始

    从读者的反馈谈RabbitMQ 昨天发完《RabbitMQ入门-初识RabbitMQ》,我陆陆续续收到一些反馈。鉴...

  • RabbitMq相关文章索引(1)

    基本常识 rabbitmq百度百科 RabbitMQ用户角色及权限控制 rabbitMQ入门详解,大神勿喷。。。自...

  • RabbitMQ学习

    MQ入门总结(五)RabbitMQ的原理和使用Spring Boot 中使用 RabbitMQ -- 很棒Cent...

  • RabbitMQ 学习-direct模式

    RabbitMQ direct模式 关于它的快速入门,可以在这里查看:http://www.rabbitmq.co...

  • RabbitMQ入门

    [toc] 一:入门 1.安装Erlang 2.安装RabbitMQ 3.配置 激活 RabbitMQ's Man...

网友评论

      本文标题:RabbitMQ入门

      本文链接:https://www.haomeiwen.com/subject/vvphjdtx.html