首页 > 其他分享 >MQ和RabbitMQ

MQ和RabbitMQ

时间:2024-05-26 22:45:41浏览次数:27  
标签:订阅 调用 服务 Broker RabbitMQ MQ 事件


  一、微服务间通讯有同步和异步两种方式:

  同步通讯:就像打电话,需要实时响应。

  异步通讯:就像发邮件,不需要马上回复。


  Feign调用就属于同步方式,虽然调用可以实时得到结果,但存在下面的问题:
    1.耦合度高2.性能下降3.浪费资源 4.级联失败.

  总结:

    同步调用的优点:
    - 时效性较强,可以立即得到结果

   同步调用的问题:

    - 耦合度高
    - 性能和吞吐能力下降
    - 有额外的资源消耗
    - 有级联失败问题


   二、 异步调用则可以避免上述问题:

    我们以购买商品为例,用户支付后需要调用订单服务完成订单状态修改,调用物流服务,从仓库分配响应的库存并准备发货。

    在事件模式中,支付服务是事件发布者(publisher),在支付完成后只需要发布一个支付成功的事件(event),事件中带上订单id。

    订单服务和物流服务是事件订阅者(Consumer),订阅支付成功的事件,监听到事件后完成自己业务即可。

 

    为了解除事件发布者与订阅者之间的耦合,两者并不是直接通信,而是有一个中间人(Broker)。发布者发布事件到Broker,不关心谁来订阅事件。订阅者从Broker订阅事件,不关心谁发来的消息。

    Broker 是一个像数据总线一样的东西,所有的服务要接收数据和发送数据都发到这个总线上,这个总线就像协议一样,让服务间的通讯变得标准和可控。

 

  好处:

    - 吞吐量提升:无需等待订阅者处理完成,响应更快速

    - 故障隔离:服务没有直接调用,不存在级联失败问题
    - 调用间没有阻塞,不会造成无效的资源占用
    - 耦合度极低,每个服务都可以灵活插拔,可替换
    - 流量削峰:不管发布事件的流量波动多大,都由Broker接收,订阅者可以按照自己的速度去处理事件

 

  缺点:

    - 架构复杂了,业务没有明显的流程线,不好管理
    - 需要依赖于Broker的可靠、安全、性能

  

    三、MQ,中文是消息队列(MessageQueue),字面来看就是存放消息的队列。也就是事件驱动架构中的Broker。

    比较常见的MQ实现:

  • ActiveMQ

  • RabbitMQ

  • RocketMQ

  • Kafka

    追求可用性:Kafka、 RocketMQ 、RabbitMQ

    追求可靠性:RabbitMQ、RocketMQ

    追求吞吐能力:RocketMQ、Kafka

    追求消息低延迟:RabbitMQ、Kafka

     四、RabbitMQ

   RabbitMQ中的一些角色:

  • publisher:生产者

  • consumer:消费者

  • exchange个:交换机,负责消息路由

  • queue:队列,存储消息

  • virtualHost:虚拟主机,隔离不同租户的exchange、queue、消息的隔离

  RabbitMQ官方提供了5个不同的Demo示例,对应了不同的消息模型:

    基本消息队列(BasicQueue)
    工作消息队列(WorkQueue)

  发布订阅(Publish、 Subscribe),有根据交换机类型不同分为三种:

    Fanout Exchange:广播

    Direct Exchange:路由

    Topic Exchange:主题

标签:订阅,调用,服务,Broker,RabbitMQ,MQ,事件
From: https://www.cnblogs.com/kongsq/p/18214435

相关文章

  • LIUNX 安装 rabbitmq
    在Linux上安装RabbitMQ主要包括以下步骤。这里以Ubuntu为例,其他Linux发行版可能会有些许不同。1.更新软件包索引在开始之前,确保系统的软件包索引是最新的:sudoaptupdate2.安装ErlangRabbitMQ依赖Erlang运行时环境。可以通过以下命令安装:sudoaptinst......
  • 【Rabbitmq使用】docker compose 命令重启rabbitmq后数据丢失问题
    目录0.导火索1.问题和背景2.原因与解决2.1原因2.2解决0.导火索在服务器上使用一个rabbitmq服务,但是需要多个项目使用这一个mq服务,于是就建立了rabbitmq的虚拟主机virtualhost来作为各个服务的迷你版mq来使用;再使用dockercompose命令重启后,某个项目报错如下:......
  • 重构MQ处理架构:MVEL表达式和责任链设计模式应用实践
    重构MQ处理架构:MVEL表达式和责任链设计模式应用实践https://mp.weixin.qq.com/s/_UZhfi1BiGNHQAHWhGus8Q 3.责任链设计模式【3.1定义】责任链模式(ChainofResponsibility)又名职责链模式,是一种行为设计模式,它允许你构建一个由多个对象组成的链,每个对象都有机会处理请求,或者......
  • Windos环境安装RocketMQ
    1.下载RocketMQ安装包,这里下载二进制包安装地址:https://rocketmq.apache.org/download/2.配置系统环境变量3.修改脚本文件配置(runbroker.cmd、runserver.cmd)RocketMQ默认的虚拟机内存较大,启动可能因为内存不足报错,用记事本打开bin目录下的runbroker.cmd打开runserver.cm......
  • uniapp中使用mqtt.js的踩坑记录
    最近在uniapp的vue3.0版本中使用mqtt.js库时遇到了一些坑,经过亲身踩坑,现在把实际能够实现在uniapp的app端能够使用mqtt.js的方法步骤记录如下:一、安装首先安装mqtt.js,建议使用较为稳定的3.0.0版本:[email protected]二、引入mqtt.jsimportmqttfrom'mqtt/dist/mqtt.......
  • Asp .Net Core 系列:集成 CAP + RabbitMQ + MySQL(含幂等性)
    简介官网:https://cap.dotnetcore.xyz/CAP是什么?是一个EventBus,同时也是一个在微服务或者SOA系统中解决分布式事务问题的一个框架。它有助于创建可扩展,可靠并且易于更改的微服务系统。什么是EventBus?事件总线是一种机制,它允许不同的组件彼此通信而不彼此了解。组件可以......
  • RabbitMQ广播模式
    RabbitMQ广播模式Fanout交换机工作原理Fanout交换机会将接收到的消息广播给所有与之绑定的队列,不考虑路由键。每个绑定到fanout交换机的队列都会接收到消息。使用场景广播消息:所有消费者都需要接收到相同的消息。日志广播:将日志消息广播给多个日志处理服务。Direct......
  • LLM-文心一言:modbus、opc、can、mqtt协议
    Modbus、OPC、CAN和MQTT都是不同的通信协议,它们在工业自动化、物联网和其他领域有着广泛的应用。以下是对这些协议的简要介绍:Modbus:Modbus是一种串行通信协议,由Modicon公司(现为施耐德电气的一部分)在1979年提出,用于可编程逻辑控制器(PLC)之间的通信。它已经成为工业领域通信协议的......
  • rabbitMq的status报错Error: unable to perform an operation on node ‘rabbit……
    遇到下图这个错大部分问题可能是由于 RabbitMQ CLI工具的ErlangCookie与服务器上的不匹配而导致连接问题。ErlangCookie在RabbitMQ节点之间进行身份验证和安全通信时起着重要作用。可以在c盘搜索一下看下两个.erlang.cookie文件中的内容是否一致,不一致的话就改成一致的......
  • RocketMq如何实现顺序消息?
    RocketMq是一款金融级别的消息中间件,作为高可靠的中间件,在需要保证消息顺序性的场景下,可不能掉链子!那么,RocketMq是如何实现顺序消息的呢?RocketMq并不保证Topic维度的消息顺序性,而是在Queue维度保证了消息顺序性。RocketMq的消费进程会同步消费Queue中的消息,且消费......