首页 > 其他分享 >异步通讯

异步通讯

时间:2023-11-13 20:23:38浏览次数:29  
标签:异步 通讯 服务 订阅 Broker 调用 事件 发布者

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

 

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

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

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

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

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

好处:

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

  • 故障隔离:服务没有直接调用,不存在级联失败问题

  • 调用间没有阻塞,不会造成无效的资源占用

  • 耦合度极低,每个服务都可以灵活插拔,可替换

  • 流量削峰:不管发布事件的流量波动多大,都由Broker接收,订阅者可以按照自己的速度去处理事件

缺点:

  • 架构复杂了,业务没有明显的流程线,不好管理

  • 需要依赖于Broker的可靠、安全、性能

 

 

标签:异步,通讯,服务,订阅,Broker,调用,事件,发布者
From: https://www.cnblogs.com/daitu66/p/17830068.html

相关文章

  • Vue 在内部对异步队列尝试使用原生的 Promise.then、MutationObserver 和 setImmedia
    下列关于Vue的描述错误的是()A当给某个组件修改某个值时,该组件不会立即重新渲染BVue内部使用原生Promise.then、MutationObserver和setImmediate实现异步队列,不会采用setTimeout(fn,0)C$nextTick()返回一个Promise对象D$nextTick()可以配合async/await使用正确答案:B官......
  • WorkPlus即时通讯app:10分钟快速搭建,支持局域网私有化部署!
    随着数字通讯的飞速发展,“IM+办公”模式被越来越多的政企组织所接受和采用。然而,公有云IM服务的信息安全问题时有发生,这使得一些政府部门和事业单位对此存在着爱恨交加的复杂心态。在这样的背景下,私有化IM作为一种解决方案逐渐受到关注。私有化IM可以在企业自己的服务器上部署和运......
  • 【实用小教程】如何批量导出、备份微信通讯录好友
    6-11对于有微信通讯录备份需求的人来说,要把微信的通讯录联系人的微信号、备注的手机号等信息弄出来,有不少困难,因为微信本身不提供这样的功能,所以如果要一个个抄,是不太现实的。本教程要解决的问题就是微信通讯录备份的问题,速度贼快,原理就是通过分析微信存储在本地的文件,直接从文件里......
  • Vue中的异步更新和 $nextTick
    场景引入需求:当用户点击编辑按钮后,显示一个弹窗,该弹窗有一个文本框,使得文本框自动聚焦看似代码如下:this.isShowEdit=true;//显示输入框this.$refs.inp.focus();//获取焦点代码看似没有问题,显示文本框后,让文本框聚焦,但是在vue中却不能实现,这是由于vue是异步更新Dom的t......
  • requestAnimationFrame虽然是异步函数,但是由于i是用let定义的,每一次都会生成一个块级
    以下代码执行后,console输出的信息是?for(leti=0;i<5;i++){requestAnimationFrame(()=>console.log(i));}01234requestAnimationFrame虽然是异步函数,但是由于i是用let定义的,每一次都会生成一个块级作用域,来把当前值和requestAnimationFrame放在这个作用域中......
  • 关于asyncio.create_task异步并发执行的研究
    关于asyncio.create_task异步并发执行的研究#不在乎结果版本asyncdefdo_some_thing(a,b):time.sleep(3)print(f"{datetime.datetime.now()}handledo_some_thingwitha:{a}andb:{b}")returna+bclassTaskHandler(tornado.web.RequestHandler):......
  • kafka复习:(2)客户端发送消息并异步处理返回结果
    packagecom.cisdi.dsp.modules.metaAnalysis.rest.kafka2023;importorg.apache.kafka.clients.producer.*;importorg.apache.kafka.common.serialization.StringSerializer;importjava.time.Duration;importjava.util.Properties;importjava.util.concurrent.E......
  • 大模型训练中的同步与异步模式
    在深度学习领域,GPU(图形处理器)因其高效的并行计算能力而成为训练深度神经网络的常用硬件。当我们在一个GPU上训练模型时,我们通常会使用一种称为“数据并行”(DataParallelism)的技术,将数据集分成多个小块,并在多个GPU上并行处理。然而,当涉及到多个GPU的训练时,存在两种主要模式:同步模式......
  • vue3异步组件
    父组件中,子组件的加载一般是按照先后顺序加载的,子组件加载后才会加载父组件。一个页面的子组件很多,由于会先加载子组件,那么父组件可能会出现比较长的白屏等待时间大型项目,可能需要拆分应用为更小的块,并仅在需要时再从服务器加载相关组件Vue提供defineAsyncComponent方法:import......
  • vue3异步组件
    父组件中,子组件的加载一般是按照先后顺序加载的,子组件加载后才会加载父组件。一个页面的子组件很多,由于会先加载子组件,那么父组件可能会出现比较长的白屏等待时间大型项目,可能需要拆分应用为更小的块,并仅在需要时再从服务器加载相关组件Vue提供defineAsyncComponent方法:import......