消息总线(MQ)知多少

android——消息总线(Eventbus、FlowBus) Eventbus的使用例子 简介:Eventbus 主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅。以及将发送者和接收者解耦。 注意: 1、EventBus.getDefault().register(this); 放在初始化组件之前 (如: findViewById() ) ,一定放... 阅读详情

版权声明:本文为博主原创文章,欢迎转载并注明出处 https://blog.youkuaiyun.com/u010255818/article/details/77855873
1 什么时候用MQ?
1.1 MQ的基本概念

  消息总线(Message Queue,MQ),是一种跨进程的通信机制,用于在上下游之间传递消息。MQ是一种常见的上下游“逻辑解耦+物理解耦”的消息通信服务,消息发送上游只需要依赖MQ,逻辑上和物理上都不用依赖其他服务。
1.2 MQ的使用场景
场景一:数据驱动的任务依赖

  有些任务之间有一定的依赖关系,比如:task3需要使用task2的输出作为输入,task2需要使用task1的输出作为输入。这样的话,tast1, task2, task3之间就有任务依赖关系,必须task1先执行,再task2执行,再task3执行。对于这类需求,常见的实现方式是,使用cron人工排执行时间表:

    1. task1,0:00执行,经验执行时间为50分钟;
     2.  task2,1:00执行(为task1预留10分钟buffer),经验执行时间也是50分钟;
     3. task3,2:00执行(为task2预留10分钟buffer)
        这里写图片描述

è¿éåå¾çæè¿°

这种方法的坏处是:

        1.如果有一个任务执行时间超过了预留buffer的时间,将会得到错误的结果;
        2.总任务的执行时间很长,总是要预留很多buffer,如果前置任务提前完成,后置任务不会提前开始;
        3.如果一个任务被多个任务依赖,这个任务将会称为关键路径,排班表很难体现依赖关系,容易出错;
        4.如果有一个任务的执行时间要调整,将会有多个任务的执行时间要调整。

优化方案是,采用MQ解耦:

       1. task1准时开始,结束后发一个“task1 done”的消息;
        2.task2订阅“task1 done”的消息,收到消息后第一时间启动执行,结束后发一个“task2 done”的消息;
        3.task3同理
        这里写图片描述

è¿éåå¾çæè¿°

采用MQ的优点是:

        1.不需要预留buffer,上游任务执行完,下游任务总会在第一时间被执行;
        2.依赖多个任务,被多个任务依赖都很好处理,只需要订阅相关消息即可;
       3. 有任务执行时间变化,下游任务都不需要调整执行时间

  需要特别说明的是,MQ只用来传递上游任务执行完成的消息,并不用于传递真正的输入输出数据。
场景二:上游不必关心执行结果

  上游需要关注执行结果时要用“调用”;上游不关注执行结果时,就可以使用MQ了。58同城的很多下游需要关注“用户发布帖子”这个事件,比如用户发布帖子后,修改用户统计数据。
  对于这类需求,常见的实现方式是使用调用关系:帖子发布服务执行完成之后,调用下游业务来完成消息的通知。但事实上,这个通知是否正常正确的执行,帖子发布服务根本不关注。

这种方法的坏处是:

      1. 帖子发布流程的执行时间增加了;
       2.下游服务宕机,可能导致帖子发布服务受影响,上下游逻辑+物理依赖严重;
       3. 每当增加一个需要知道“帖子发布成功”信息的下游,修改代码的是帖子发布服务,属于架构设计中典型的依赖倒转。
        这里写图片描述

è¿éåå¾çæè¿°

优化方案是,采用MQ解耦:

        1.帖子发布成功后,向MQ发一个消息;
      2.   哪个下游关注“帖子发布成功”的消息,主动去MQ订阅
        这里写图片描述

è¿éåå¾çæè¿°

采用MQ的优点是:

      1.  上游执行时间短;
       2. 上下游逻辑+物理解耦,除了与MQ有物理连接,模块之间都不相互依赖;
       3. 新增一个下游消息关注方,上游不需要修改任何代码

场景三:上游关注执行结果,但执行时间很长

  有时候上游需要关注执行结果,但执行结果时间很长。微信支付,跨公网调用微信的接口,执行时间会比较长,但调用方又非常关注执行结果,此时一般怎么玩呢?

一般采用“回调网关+MQ”方案来解耦:

        1.调用方直接跨公网调用微信接口;
        2.微信返回调用成功,此时并不代表返回成功;
        3.微信执行完成后,回调统一网关;
       4. 网关将返回结果通知MQ;
        5.请求方收到结果通知
        这里写图片描述

è¿éåå¾çæè¿°

  这里需要注意的是,不应该由回调网关来调用上游来通知结果,如果是这样的话,每次新增调用方,回调网关都需要修改代码,仍然会反向依赖,使用回调网关+MQ的方案,新增任何对微信支付的调用,都不需要修改代码啦。
1.3 什么时候不使用MQ

  虽然MQ是分层架构中的解耦利器,但调用与被调用的关系,是无法被MQ取代的。

MQ的不足是:

        1.系统更复杂,多了一个MQ组件;
        2.消息传递路径更长,延时会增加;
        3.消息可靠性和重复性互为矛盾,消息不丢不重难以同时保证;
        4.上游无法知道下游的执行结果,这一点是很致命的

例如:用户登录场景,登录页面调用passport服务,passport服务的执行结果直接影响登录结果,此处的”登录页面”与”passport服务”就必须使用调用关系,而不能使用MQ通信。
1.4 总结

   1.MQ是一个互联网架构中常见的解耦利器。
    2.什么时候不使用MQ?上游实时关注执行结果。
    3.什么时候使用MQ?1)数据驱动的任务依赖; 2)上游不关心多下游执行结果; 3)异步返回执行时间长。

2 MQ是如何做到消息必达?

  MQ要想尽量消息必达,架构上有两个核心设计点:(1)消息落地(2)消息超时、重传、确认。
2.1 MQ核心架构

这里写图片描述

è¿éåå¾çæè¿°

  MQ是一个系统间解耦的利器,它能够很好的解除发布者、订阅者之间的耦合,将上下游的消息投递解耦成两个部分。MQ的核心架构图,基本可以分为三大块:

   1. 发送方 -> 左侧粉色部分,由两部分构成:业务调用方与MQ-client-sender,其中后者向前者提供了两个核心API:SendMsg(bytes[] msg)、SendCallback();
   2. MQ核心集群 -> 中间蓝色部分,分为四个部分:MQ-server,zk,db,管理后台web;
    3.接收方 -> 右侧黄色部分,由两部分构成:业务接收方与MQ-client-receiver,其中后者向前者提供了两个核心API:RecvCallback(bytes[] msg)、SendAck()

2.2 MQ消息可靠投递核心流程

  MQ既然将消息投递拆成了上下半场,为了保证消息的可靠投递,上下半场都必须尽量保证消息必达。
这里写图片描述

è¿éåå¾çæè¿°

MQ消息投递上半场,MQ-client-sender到MQ-server流程见上图:

   1. MQ-client将消息发送给MQ-server(此时业务方调用的是API:SendMsg);
    2.MQ-server将消息落地,落地后即为发送成功;
    3.MQ-server将应答发送给MQ-client(此时回调业务方是API:SendCallback)

  MQ消息投递下半场,MQ-server到MQ-client-receiver流程见上图:

    1.MQ-server将消息发送给MQ-client(此时回调业务方是API:RecvCallback);
    2.MQ-client回复应答给MQ-server(此时业务方主动调用API:SendAck);
    3.MQ-server收到ack,将之前已经落地的消息删除,完成消息的可靠投递

2.3 如果消息丢了怎么办?

  MQ消息投递的上下半场,都可以出现消息丢失,为了降低消息丢失的概率,MQ需要进行超时和重传。
2.3.1 上半场的超时与重传

  MQ上半场的1或者2或者3如果丢失或者超时,MQ-client-sender内的timer会重发消息,直到期望收到3,如果重传N次后还未收到,则SendCallback回调发送失败,需要注意的是,这个过程中MQ-server可能会收到同一条消息的多次重发。
2.3.2 下半场的超时与重传

  MQ下半场的4或者5或者6如果丢失或者超时,MQ-server内的timer会重发消息,直到收到5并且成功执行6,这个过程可能会重发很多次消息,一般采用指数退避的策略,先隔x秒重发,2x秒重发,4x秒重发,以此类推,需要注意的是,这个过程中MQ-client-receiver也可能会收到同一条消息的多次重发。
3.MQ如何做到消息幂等
3.1 消息必达的前提

MQ消息必达,架构上有两个核心设计点:消息落地,消息超时、重传、确认
这里写图片描述

è¿éåå¾çæè¿°
  它由发送端、服务端、固化存储、接收端四大部分组成。为保证消息的可达性,超时、重传、确认机制可能导致消息总线、或者业务方收到重复的消息,从而对业务产生影响。所以,MQ幂等性设计至关重要。
3.2 上半场的幂等性设计

MQ消息发送上半场,即上图中的步骤1-3

    1,发送端MQ-client将消息发给服务端MQ-server;
    2,服务端MQ-server将消息落地;
    3,服务端MQ-server回ACK给发送端MQ-client

  如果3丢失,发送端MQ-client超时后会重发消息,可能导致服务端MQ-server收到重复消息。此时重发是MQ-client发起的,消息的处理是MQ-server。
  为了避免步骤2落地重复的消息,对每条消息,MQ系统内部必须生成一个inner-msg-id,作为去重和幂等的依据,这个内部消息ID的特性是:

    1)全局唯一;
    2)MQ生成,具备业务无关性,对消息发送方和消息接收方屏蔽

  有了这个inner-msg-id,就能保证上半场重发,也只有1条消息落到MQ-server的DB中,实现上半场幂等。
3.3 下半场的幂等性设计

MQ消息发送下半场,即上图中的步骤4-6

    4,服务端MQ-server将消息发给接收端MQ-client;
    5,接收端MQ-client回ACK给服务端;
    6,服务端MQ-server将落地消息删除

  需要强调的是,接收端MQ-client回ACK给服务端MQ-server,是消息消费业务方的主动调用行为,不能由MQ-client自动发起,因为MQ系统不知道消费方什么时候真正消费成功。
  如果5丢失,服务端MQ-server超时后会重发消息,可能导致MQ-client收到重复的消息。此时重发是MQ-server发起的,消息的处理是消息消费业务方,消息重发势必导致业务方重复消费。为了保证业务幂等性,业务消息体中,必须有一个biz-id,作为去重和幂等的依据,这个业务ID的特性是:

    (1)对于同一个业务场景,全局唯一
    (2)由业务消息发送方生成,业务相关,对MQ透明
    (3)由业务消息消费方负责判重,以保证幂等

  有了这个业务ID,才能够保证下半场消息消费业务方即使收到重复消息,也只有1条消息被消费,保证了幂等。
3.4 总结

  MQ为了保证消息必达,消息上下半场均可能发送重复消息,如何保证消息的幂等性呢?

上半场

    MQ-client生成inner-msg-id,保证上半场幂等。
    这个ID全局唯一,业务无关,由MQ保证。

下半场

    业务发送方带入biz-id,业务接收方去重保证幂等。
    这个ID对单业务唯一,业务相关,对MQ透明。

结论:幂等性,不仅对MQ有要求,对业务上下游也有要求。
4. MQ如何实现消息延迟
4.1 缘起

  很多时候,业务有“在一段时间之后,完成一个工作任务”的需求。例如:滴滴打车订单完成后,如果用户一直不评价,48小时后会将自动评价为5星。一般来说怎么实现这类“48小时后自动评价为5星”需求呢?常见方案:启动一个cron定时任务,每小时跑一次,将完成时间超过48小时的订单取出,置为5星,并把评价状态置为已评价。
  假设订单表的结构为:t_order(oid, finish_time, stars, status, …),更具体的,定时任务每隔一个小时会这么做一次:
select oid from t_order where finish_time > 48hours and status=0;
update t_order set stars=5 and status=1 where oid in[…];
  如果数据量很大,需要分页查询,分页update,这将会是一个for循环。方案的不足:

    (1)轮询效率比较低
    (2)每次扫库,已经被执行过记录,仍然会被扫描(只是不会出现在结果集中),有重复计算的嫌疑
    (3)时效性不够好,如果每小时轮询一次,最差的情况下,时间误差会达到1小时
    (4)如果通过增加cron轮询频率来减少(3)中的时间误差,(1)中轮询低效和(2)中重复计算的问题会进一步凸显

4.2 高效延时消息设计与实现

  高效延时消息,包含两个重要的数据结构:

    (1)环形队列,例如可以创建一个包含3600个slot的环形队列(本质是个数组)
    (2)任务集合,环上每一个slot是一个Set

  同时,启动一个timer,这个timer每隔1s,在上述环形队列中移动一格,有一个Current Index指针来标识正在检测的slot。

Task结构中有两个很重要的属性:

    (1)Cycle-Num:当Current Index第几圈扫描到这个Slot时,执行任务
    (2)Task-Function:需要执行的任务指针

è¿éåå¾çæè¿°

  假设当前Current Index指向第一格,当有延时消息到达之后,例如希望3610秒之后,触发一个延时消息任务,只需:

    (1)计算这个Task应该放在哪一个slot,现在指向1,3610秒之后,应该是第11格,所以这个Task应该放在第11个slot的Set中
    (2)计算这个Task的Cycle-Num,由于环形队列是3600格(每秒移动一格,正好1小时),这个任务是3610秒后执行,所以应该绕3610/3600=1圈之后再执行,于是Cycle-Num=1

  Current Index不停的移动,每秒移动到一个新slot,这个slot中对应的Set,每个Task看Cycle-Num是不是0:

    (1)如果不是0,说明还需要多移动几圈,将Cycle-Num减1
    (2)如果是0,说明马上要执行这个Task了,取出Task-Funciton执行(可以用单独的线程来执行Task),并把这个Task从Set中删除

  使用了“延时消息”方案之后,“订单48小时后关闭评价”的需求,只需将在订单关闭时,触发一个48小时之后的延时消息即可:

    (1)无需再轮询全部订单,效率高
    (2)一个订单,任务只执行一次
    (3)时效性好,精确到秒(控制timer移动频率可以控制精度)
--------------------- 
作者:胡说八道的潘老师 
来源:优快云 
原文:https://blog.youkuaiyun.com/u010255818/article/details/77855873 
版权声明:本文为博主原创文章,转载请附上博文链接!

消息中间件(MQ)的相关知识 声明:原文出处已在文末标出,本人出于学习,对其做了整理,收集干货,不作商业用途! 目录 一、消息中间件的简介 二、消息中间件(MQ)的使用场景(为什么要使用MQ) 2.1 解耦 2.2 异步 2.3 削峰 2.4 日志处理 2.5 消息通讯 2.5.1 点对点通讯 2.5.2 发布/订阅通讯 三、消息中间件常用协议 3.1 AMQP协议 3.2MQTT协议 3.3 S...... 阅读详情

相关推荐

十七、Bus消息总线

通过Bus总线将修改的配置内容同步到各个config client中,而不需要config client手动发送post请求获取配置信息更新的内容

Tony_chenph的博客 900

从“消息队列”到“服务总线”和“流处理平台”

消息队列是分布式系统中重要的组件,也是企业不同应用系统集成的关键中间件。目前常用的Kafka、RabbitMQ等都是属于消息队列。在企业IT架构中,还会用到服务总线、流处理平台等技术概念或组件。 本文为你梳理一下消息队列是做什么的?何时使用消息队列?企业服务总线和流处理平台和它又是什么关系?希望对你有所帮助。

陈喆小博 4029

消息队列(MQ)& 企业服务总线(ESB)

消息队列(MQ) 企业服务总线(ESB) 定义 MQ(Message Queue)消息队列。 把要传输的数据放在队列中,通过消息传递队列发送和接收消息数据,实现数据的传递。 ESB(Enterprise Service Bus) 是一个集中式的服务总线,它是传统消息中间件技术与XML、Web服务等技术结合的产物。通过ESB,可以实现集成业务处理,监控系统间消息流动,管理系统间交互的业务服务。 >>传统消息中间件指MQ 解决的问题 传递数据...

Meomry_HuiYi的博客 3188

SpringCloud - 整合MQ实现消息总线服务

SpringCloud - 整合MQ实现消息总线服务

weixin_46619605的博客 1201

如何加载交易策略EA到MT4/MT5

1、打开MT4/MT5软件 2、首先,必须有一个EA,而且必须是mq4/ex4为扩展名。点击左上角“文件”—“打开数据文件夹”,找到安装路径 3、将EA的ex4或mq4文件放到MT4目录\MQL4\Experts里面(本文以名为Demo的EA为例) 4、如果有DLL库文件,复制到experts目录下的libraries子目录中 5、如果有tpl模板文件,复制到templates目录中 6、添加完成后重启MT4,点击允许EA运行图标 7、在导航中找到刚才安装的EA,拖拽到...

weixin_41364817的博客 7362

Keysight ADS新手必看:3分钟搞定TDR模拟的保姆级教程(附差分信号设置技巧)

本文为Keysight ADS新手提供TDR模拟的保姆级教程,详细介绍了从基础环境准备到差分信号设置的全流程。通过内置模板调用、待测器件连接和仿真结果解读,帮助用户快速掌握TDR模拟技术,特别包含差分信号配置技巧,提升信号完整性分析效率。

weixin_30872157的博客 200

如何察看mq中queue的消息内容?

Prepare:假设queue的名字叫做local.queue, queue manager的名字叫做 test.queue.manager,mq安装在/opt/mqm下。 1.先确定queue的长度不是0. $runmqsc test.queue.manager dis ql('local.queue') curdepth 2 : dis ql('local.queue') curdep...

rockstar541的专栏 8899

U盘 未知USB设备 设定地址失败 由于该设备有问题Windows 已将其停止(代码 43) 终极解决方案(做过系统装机盘而无法解决的必看)

U盘由于该设备有问题Windows 已将其停止(代码 43) 终极解决方案 我们在使用U盘的时候偶尔会碰到下列情况 一般是因为传输数据的过程中,死机或未响应直接断点或拔掉设备导致的,U盘再次插上之后出现设定地址失败。无法再次读取设备的数据。 解决方案: 首先请确认出现该情况不是因为你摔了U盘或接口处产生断裂这种物理损伤导致的!!! 首先请确认出现该情况不是因为你摔了U盘或接口处产生断裂这种物理损...

qq_39123987的博客 13万+

[MQ]消息队列与企业服务总线的简单比较,MQ&ESB

前段时间因需要,回顾了下MQ。将部分整理内容分享备忘:   消息队列(MQ) 企业服务总线(ESB) 定义 MQ(Message Queue)消息队列。 把要传输的数据放在队列中,通过消息传递队列发送和接收消息数据,实现数据的传递。 ESB(Enterprise Service Bus) 是一个集中式的服务总线,它是传统消息中间件技术与XML、Web服务等...

:: Dotnet Fantasy :: 4772

用Python的fengwo模块复刻通达信筹码峰(COST/WINNER),选股效率提升10倍

本文介绍了如何使用Python的fengwo模块高效复刻通达信的筹码峰(COST/WINNER)计算,显著提升选股效率。通过C++内核与多线程优化,fengwo模块将传统Python实现的数小时计算压缩至分钟级,解决了量化交易中的性能瓶颈问题。文章详细解析了筹码峰计算原理、fengwo模块的技术架构及实战应用,助力量化开发者构建高效选股系统。

weixin_29062823的博客 440

sophgo sdk v23.03.01

C/C++程序建议在x86主机上使用交叉编译工具链编译生成可执行文件后,再拷贝到SoC目标平台运行。# 创建docker用户组,若已有docker组会报错,没关系可忽略。对于SoC模式,模型转换也需要在docker开发容器中完成;docker开发容器的配置参照前述章节相关内容。6、创建docker容器并进入Docker。# docker命令免root权限执行。# 将当前用户加入docker组。# 重启docker服务。# 安装 docker。3、安装docker。7、SoC 环境配置。

weixin_40723768的博客 915

MQ数据总线设计

1 数据总线设计 4 1.1 MQ是干嘛的 4 1.2 什么时候不使用消息总线 4 1.3 什么时候使用MQ 4 1.3.1 典型场景一:数据驱动的任务依赖 4 1.3.2 典型场景二:上游不关心执行结果 4 1.3.3 典型场景三:上游关注执行结果,但执行时间很长 5 1.4 延迟消息设计 6 1.5 消息队列(MsgQueue)的消息必达性架构与流程 7 1.5.1 架构方向 7 1.5.2 MQ消息可靠投递核心流程 7 1.5.3 数据丢失保障措施 7 1.6 消息总线的幂等性设计 7 1.7 流量削

记录 分享 成就 1240

实战:爬取某小程序的订单数据(解析小程序 API 参数)

本文以美团外卖小程序为例,详细分析了电商类小程序订单数据接口的技术实现与采集方法。首先通过抓包定位核心接口,解析其请求参数;重点破解了token验证机制与sign签名加密算法,通过逆向分析还原参数生成逻辑;最后基于Python实现了订单数据的自动化爬取与存储。文章强调数据采集需遵守法律合规性,提供应对反爬机制的策略,并指出了必须在获得合法授权的前提下使用这些技术。该研究为数据采集工程师提供了实用的技术参考,但必须严格遵循"最小必要"原则,确保不违反平台规则和用户隐私保护法规。

2503_91057718的博客 2319

RabbitMQ mq 消息总线

服务之间最常见的通信方式是直接调用彼此来通信,消息从一端发出后立即就可以达到另一端,称为即时消息通讯

bblo 562

【华为OD技术面-手撕算法代码真题】- 最长公共前缀

🌟 强烈推荐:华为OD技术面试手撕算法代码真题 🌟大家好!今天我给大家推荐一份备受赞誉的华为OD技术面试手撕算法代码真题。所有题目均为华为od实际面试过程中出现的算法代码真题。

算法大师! 4885

《YOLOv8:从入门到实战》专栏介绍 & 专栏目录

本专栏涵盖了丰富的YOLOv8算法从入门到实战系列教程,专为学习YOLOv8的同学而设计,堪称全网最详细的教程!🌈🌈🌈

小哥谈 6491

消息总线MQ

1 什么时候用MQ? 1.1 MQ的基本概念   消息总线(Message Queue,MQ),是一种跨进程的通信机制,用于在上下游之间传递消息。MQ是一种常见的上下游“逻辑解耦+物理解耦”的消息通信服务,消息发送上游只需要依赖MQ,逻辑上和物理上都不用依赖其他服务。 1.2 MQ的使用场景 场景一:数据驱动的任务依赖   有些任务之间有一定的依赖关系,比如:task3需要使用task2...

的博客 1277

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

消息队列 MQ

MQ(message queue),从字面意思上看,本质是个队列,FIFO 先入先出,只不过队列中存放的内容是 message 而已,还是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中,MQ 是一种非常常见的上下游“逻辑解耦+物理解耦”的消息通信服务。使用了 MQ 之后,消息发送上游只需要依赖 MQ,不用依赖其他服务。

时间如瑾 代码如诗 1638

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

为什么要使用MQ和到底什么时候要使用MQ

原文地址:http://mp.weixin.qq.com/s/Brd-j3IcljcY7BV01r712Q一、缘起一切脱离业务的架构设计与新技术引入都是耍流氓。 引入一个技术之前,首先应该解答的问题是,这个技术解决什么问题。就像微服务分层架构之前,应该首先回答,为什么要引入微服务,微服务究竟解决什么问题(详见《互联网架构为什么要做微服务?》)。 最近分享了几篇MQ相关的文章:《MQ如何实现延时消息...

隐居者 1万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

MQ如何实现消息必达

原文:消息总线能否实现消息必达? 一、缘起 《高效定时任务的触发》 《延迟消息的快速实现》 任务、延迟消息都放在内存里,万一重启了怎么办? 能否保证消息必达? 二、架构方向 MQ要想尽量消息必达,架构上有两个核心设计点: (1)消息落地 (2)消息超时、重传、确认 三、MQ核心架构 上图是一个MQ的核心架构图,基本可以分为三大块: (1)发送方->左侧粉色部分...

AndroidOrCsharp 416

SpringCloud(九)配置中心和消息总线

Spring cloud bus通过轻量消息代理连接各个分布的节点。这会用在广播状态的变化(例如配置变化)或者其他的消息指令。Spring bus的一个核心思想是通过分布式的启动器对spring boot应用进行扩展,也可以用来建立一个多个应用之间的通信频道。目前唯一实现的方式是用AMQP消息代理作为通道,同样特性的设置(有些取决于通道的设置)在更多通道的文档中。Spring cloud bus被国内很多都翻译为消息总线,也挺形象的。

L08130421的博客 3113

到底什么时候该使用MQ?

一、缘起一切脱离业务的架构设计与新技术引入都是耍流氓。引入一个技术之前,首先应该解答的问题是,这个技术解决什么问题。就像微服务分层架构之前,应该首先回答,为什么要引入微...

shenjian58的博客 3803

MQ消息总线

思考 何时同步索引库? 方案一:在buy-shop-service中,添加商品的业务逻辑中,添加一个同步索引库的业务逻辑。 缺点:业务逻辑耦合度高,业务拆分不明确 方案二:业务逻辑在buy-search-service中实现,调用服务在buy-shop-service实现。业务逻辑分开。 缺点:服务之间的耦合度变高。服务的启动有先后顺序。 方案三:使用消息队列。MQ是一个消息中间件。 [外链图...

weixin_43865344的博客 583

MQ(消息队列)之如何做到消息幂等

原文链接:https://www.jianshu.com/p/8b77d4583bab?utm_campaign 一、缘起 MQ消息必达,架构上有两个核心设计点: (1)消息落地 (2)消息超时、重传、确认 再次回顾消息总线核心架构,它由发送端、服务端、固化存储、接收端四大部分组成。为保证消息的可达性,超时、重传、确认机制可能导致消息总线、或者业务方收到重复的消息,从而对业务产生...

weixin_40486739的博客 1121
上一篇: 《JAVA与模式》之策略模式——我看过最好的一篇策略模式博文
下一篇: 详细介绍Java虚拟机(JVM)
一切还来得及
博客等级 码龄11年 50粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值