RabbitMQ 入门学习

2024-08-06 14:43:16 浏览数 (3)

RabbitMQ 入门学习

MQ 消息队列

MQ全称为Message Queue即消息队列

什么是消息队列?

  • "消息队列" 是在消息的传输过程中保存消息的容器。
  • 它是典型的:生产者————消费者模型 1.生产者不断向消息队列中生产消息 2.消费者不断的从队列中获取消息。 3.因为消息的生产和消费都是异步的,而且只关心消息的发送和接收。 4.没有业务逻辑的侵入,这样就实现了生产者和消费者的解耦。

消息队列 常用场景:

以下信息来源于:大佬,感谢大佬!!分享

服务解耦

场景

  • 服务A产生数据, 而服务B,C,D需要这些数据 那么我们可以在A服务中直接调用B,C,D服务,把数据传递到下游服务即可
  •   随着我们的应用规模不断扩大,会有更多的服务需要A的数据, 如果有几十甚至几百个下游服务,而且会不断变更,再加上还要考虑下游服务出错的情况, 那么,A服务中调用代码的维护会极为困难

MQ解耦

  • A服务只需要向消息服务器发送消息,而不用考虑谁需要这些数据;
  • 下游服务如果需要数据,自行从消息服务器订阅消息,不再需要数据时则取消订阅即可
流量削峰

场景:

  • 假设我们有一个应用,平时访问量是每秒300请求,我们用一台服务器即可轻松应对
  • 在高峰期, 访问量瞬间翻了十倍, 达到每秒3000次请求, 单台服务器无法应对, 这时我们增加到10台服务器,减压
  • 但如果这种瞬时高峰的情况每天只出现一次,每次只有半小时 那么我们10台服务器在多数时间都只分担每秒几十次请求,这样就有点浪费资源了

MQ

  • 使用RabbitMQ来进行流量削峰 高峰情况下, 瞬间出现的大量请求数据, 先发送到消息队列服务器, 排队等待被处理
  • 我们的应用,可以慢慢的从消息队列接收请求数据进行处理 这样把数据处理时间拉长,以减轻瞬时压力
异步调用

场景:

  • 外卖支付 支付后要发送支付成功的通知 再寻找外卖小哥来进行配送,而寻找外卖小哥的过程非常耗时
  • 尤其是高峰期,可能要等待几十秒甚至更长,这样就造成整条调用链路响应非常缓慢

MQ

  • 订单数据可以发送到消息队列服务器 那么调用链路也就可以到此结束, 订单系统则可以立即得到响应, 整条链路的响应时间只有200毫秒左右;
  • 寻找外卖小哥的应用可以,异步的方式从消息队列接收订单消息,再执行耗时的寻找操作

常见MQ产品

  • ActiveMQ:基于JMS
  • Kafka:分布式消息系统,高吞吐量
  • RabbitMQ:基于AMQP协议,erlang语言开发,稳定性好
  • RocketMQ:基于JMS,阿里巴巴产品,目前交由Apache基金会

AMQP 和 JMS

  • AMQP 高级消息队列协议! 是应用层协议的一个开放标准,为面向消息的中间件设计,兼容 JMS RabbitMQ 就是基于 AMQP 协议实现的。
  • JMS java 消息服务 JMS的客户端之间可以通过JMS服务进行异步的消息传输。 JMS(JAVA Message Service,Java消息服务)API是一个消息服务的标准或者说是规范 允许应用程序组件基于JavaEE平台创建、发送、接收和读取消息。 它使分布式通信耦合度更低,消息服务更加可靠以及异步性。 ActiveMQ 就是基于 JMS 规范实现的。
总结:
  • AMQP 为消息定义了线路层(wire-level protocol)的协议   JMS所定义的是API规范。
  • 跨平台: Java 体系中,多个client均可以通过JMS进行交互,不需要应用修改代码,但是其对跨平台的支持较差。 而AMQP天然具有跨平台、跨语言特性。
  • 支持消息类型: JMS 支持TextMessage、MapMessage 等复杂的消息类型; 而 AMQP 仅支持 byte[] 消息类型(复杂的类型可序列化后发送)
  • Exchange 交换机提供的路由算法 AMQP可以提供多样化的路由方式来传递消息到消息队列 4种交换机类型,6种模式 JMS 仅支持 队列 和 主题/订阅 方式两种

RabbitMQ 简介:

  • MQ全称为Message Queue即消息队列
  • RabbitMQ是由erlang语言开发,所以安装环境需要安装 erlang
  • 基于AMQP(Advanced Message Queue 高级消息队列协议)协议实现的消息队列
  • 它是一种应用程序之间的通信方法,消息队列在分布式系统开发中应用非常广泛

RabbitMQ 的工作原理

组成部分:
  • Broker 消息队列服务进程此进程包括两个部分:Exchange交换机和Queue队列
  • Exchange 交换机:按一定的规则将消息路由转发到某个队列,对消息进行过虑。 一个有四种类型:Direct, Fanout, Topic, Headers
  • Queue 消息队列:存储消息的队列。
  • Producer 消息生产者,即生产方客户端,生产方客户端将消息发送到MQ
  • Consumer 消息消费者,即消费方客户端,接收MQ转发的消息。
-----发送消息-----
  • 生产者和Broker建立TCP连接。
  • 生产者和Broker建立通道。
  • 生产者通过通道消息发送给Broker,由Exchange将消息进行转发~ 队列中去!
----接收消息-----
  • 消费者和Broker建立TCP连接
  • 消费者和Broker建立通道
  • 消费者监听指定的Queue(队列),当有消息到达Queue时Broker默认将消息推送给消费者。

Exchange交换机四种类型

RabbitMQ消息传递模型的核心思想是:

生产者永远不会将任何消息直接发送到队列,通常生产者甚至不知道消息是否会被传递到任何队列。生产者只能向交换机(Exchange)发送消息。

交换机是一个非常简单的东西。一边接收来自生产者的消息,另一边将消息推送到队列。

  • direct : 需要生产者和消费者绑定相同的Exchange和routing key
  • fanout: 广播模式需要生产者消费者绑定相同的Exchange
  • topic: 支持模糊匹配的广播模式以点分隔** * 表示一个单词 # 表示任意数量(零个或多个)单词。
  • header: 根据生产者和消费者的header中信息进行匹配,性能较差 ,x-match [all 匹配所有/any 任意一个]

RabbitMQ环境搭建

Erlang 环境配置:
  • RabbitMQ由Erlang语言开发 所以需要安装对应的,运行环境!

下载erlang

  • 找到 otp_win64_20.3.exe,以管理员方式运行此文件,安装 无脑下一步即可!
  • 配置erlang环境变量 环境变量: ERLANG_HOME=erlang安装目录 注意别在中文目录下! path中添加: %ERLANG_HOME%bin
  • 测试
RabbitMQ 安装:
  • RabbitMQ下载
  • rabbitmq-server-3.7.3.exe:以管理员方式运行此文件安装 下一步...
  • 之后就可以在 windows 系统菜单看到:
  • install 安装服务 之后 start 启动服务即可…
  • 服务:安装/启动,ok 之后: 安装rabbitMQ的管理插件, 就可以通过浏览页面,方便的管理Rabbit了 安装目录下: 管理员身份运行 rabbitmq-plugins.bat enable rabbitmq_management
  • 进入浏览器,输入: http://localhost:15672 用户/密码 默认: guest
  • 主要端口介绍 4369 – erlang发现口 5672 – client端通信口 15672 – 管理界面ui端口 25672 – server间内部通信口

如果开始菜单中没有,服务则进入安装目录下sbin目录手动启动:

  • 安装并运行服务: rabbitmq-service.bat install 安装服务 bbitmq-service.bat start 启动服务
  • 安装管理插件 如上

RabbitMQ 服务启动不…

  • 这个我也遇到过,刚启动,就马上停止了! 后来以查 Windows账号名是中文的!!!
  • 防不胜防!!中问到哪里都难受!!

    0 人点赞