当前位置:首页 > 科技  > 软件

基于Topic的消息发布与消费模式

来源: 责编: 时间:2023-11-07 17:16:38 346观看
导读闲话朋友们,好久不见,不知道你们最近怎样,但相信你们一定都挺好。已经有一段时间没有更新了,个中原因不好细说,但是归根结底也许是自己懒。这个不好,大家不要学。今天主要就是想分享一下关于消息处理机制的一些想法。基本概

闲话

朋友们,好久不见,不知道你们最近怎样,但相信你们一定都挺好。已经有一段时间没有更新了,个中原因不好细说,但是归根结底也许是自己懒。这个不好,大家不要学。今天主要就是想分享一下关于消息处理机制的一些想法。1GU28资讯网——每日最新资讯28at.com

基本概念

1GU28资讯网——每日最新资讯28at.com

1.Topic

同一个topic下消息的格式一致,例如topic为order-update-message消息的格式都是一个统一的OrderUpdateMessage的结构1GU28资讯网——每日最新资讯28at.com

2.key主键

同一主键下的消息列表具有顺序性,例如key为订单号order-0001的消息列表(Queue)下,可能包含的消息列表(Queue)如下:1GU28资讯网——每日最新资讯28at.com

OrderUpdateMessage(id="msg-0001", orderId = "order-0001", action="create", ...)OrderUpdateMessage(id="msg-0002", orderId = "order-0001", action="paid", ...)OrderUpdateMessage(id="msg-0003", orderId = "order-0001", action="delivering", ...)OrderUpdateMessage(id="msg-0004", orderId = "order-0001", action="modifying", ...)OrderUpdateMessage(id="msg-0005", orderId = "order-0001", action="delivered", ...)

3.Group消费者组

同一个topic下同一个group下的消费者,对这个group下的消息队列进行抢占式消费。例如同一个消费者组group-1下的消费者consumer-1和消费者consumer-2,以及另外一个消费者组group-2下的消费者consumer-3,消息消费的结果可能如下:1GU28资讯网——每日最新资讯28at.com

// consumer-1消费的消息OrderUpdateMessage(id="msg-0001", orderId = "order-0001", action="create", ...)OrderUpdateMessage(id="msg-0002", orderId = "order-0001", action="paid", ...)// consumer-2消费的消息OrderUpdateMessage(id="msg-0003", orderId = "order-0001", action="modified", ...)OrderUpdateMessage(id="msg-0004", orderId = "order-0001", action="delivering", ...)OrderUpdateMessage(id="msg-0005", orderId = "order-0001", action="delivered", ...)// consumer-3消费的消息OrderUpdateMessage(id="msg-0001", orderId = "order-0001", action="create", ...)OrderUpdateMessage(id="msg-0002", orderId = "order-0001", action="paid", ...)OrderUpdateMessage(id="msg-0003", orderId = "order-0001", action="modified", ...)OrderUpdateMessage(id="msg-0004", orderId = "order-0001", action="delivering", ...)OrderUpdateMessage(id="msg-0005", orderId = "order-0001", action="delivered", ...)

Kafka的消息处理机制就是以这样的形式实现的。1GU28资讯网——每日最新资讯28at.com

4.优势 

生产者和消费者完全解耦,生产者无需关注是否有消费者在消费,消费者也无需知道生产者是否在生成新的消息。1GU28资讯网——每日最新资讯28at.com

生产者只关注消息是否成功的发送到消息处理中间件,消费者只关注能否从消息处理中间件消费到消息。1GU28资讯网——每日最新资讯28at.com

消费者可以按组消费,同组内的消费者进行抢占式消费。1GU28资讯网——每日最新资讯28at.com

RabbitMq中的优秀实践

1.RabbitMq消息处理机制

1GU28资讯网——每日最新资讯28at.com

生产者讲带有指定RoutingKey的消息发送到对应的Exchange上,Exchange通过Binding定义的路由规格,将消息按照BindingKey分发到不同的Queue上,消费者从Queue拉取消息消费。1GU28资讯网——每日最新资讯28at.com

  • Exchange & RoutingKey & Topic:RoutingKey决定了消息会被发送到哪个Exchange上,这和topic是类似的概念。
  • Bind & BindingKey & Group:Exchange根据Binding定义的路由规格,将消息按照BindingKey分发到不同的Queue上,这里可以认为是对应了Group的概念。
  • Queue & Group:Queue则是维护了一个Group下的某个队列下的所有消息。

优秀实践

因此如果要以RabbitMq实现基于Topic和Group实现的消息生产和消费的机制,可以将消息定义成以下类似的结构:1GU28资讯网——每日最新资讯28at.com

// Exchange: {value="order-update", type="fanout"}// binding1: {value="promotion-service", bindingKey="order.*.paid"}// binding2: {value='inventory-service', bindingKey="order.*"}OrderUpdateMessage(id="msg-0001", orderId = "order-0001", action="create", ...)OrderUpdateMessage(id="msg-0002", orderId = "order-0001", action="paid", ...)OrderUpdateMessage(id="msg-0003", orderId = "order-0001", action="modified", ...)OrderUpdateMessage(id="msg-0004", orderId = "order-0001", action="delivering", ...)OrderUpdateMessage(id="msg-0005", orderId = "order-0001", action="delivered", ...)OrderUpdateMessage(id="msg-0006", orderId = "order-0002", action="paid", ...)

假设此时有promotion-service(1个实例)和inventory-service(2个实例)两个消费者消费消息,则对应的消息消费的结果可能是:1GU28资讯网——每日最新资讯28at.com

// inventory-service// Exchange: {value="order-update", type="fanout"}// QueueBinding: {value=Queue('inventory-service'), bindingKey="order.*"}// inventory-service实例1消费到的消息OrderUpdateMessage(id="msg-0001", orderId = "order-0001", action="create", ...)OrderUpdateMessage(id="msg-0002", orderId = "order-0001", action="paid", ...)OrderUpdateMessage(id="msg-0006", orderId = "order-0002", action="paid", ...)// inventory-service实例2消费到的消息OrderUpdateMessage(id="msg-0003", orderId = "order-0001", action="modified", ...)OrderUpdateMessage(id="msg-0004", orderId = "order-0001", action="delivering", ...)OrderUpdateMessage(id="msg-0005", orderId = "order-0001", action="delivered", ...)// promotion-service// Exchange: {value="order-update", type="fanout"}// QueueBinding: {value="promotion-service", bindingKey="order.*.paid"}// promotion-service实例1消费到的消息OrderUpdateMessage(id="msg-0002", orderId = "order-0001", action="paid", ...)OrderUpdateMessage(id="msg-0006", orderId = "order-0002", action="paid", ...)

总结

RabbitMQ的Exchange支持不同类型(Direct, Fanout, Topic, Headers),以及Binding可以对消息以更灵活的通配符的方式将消息分发到对应的Queue上,因此其消息处理机制更加灵活。1GU28资讯网——每日最新资讯28at.com

基于Topic的消息发布与消费模式,能够将消费者和生产者完全解耦,相对RabbitMQ中的所支持的灵活处理消息的方式,更加简单且易于理解,这也是Kafka的消息处理机制。1GU28资讯网——每日最新资讯28at.com

通过对比不同的中间件的消息处理机制也许能找到更好的实践方式。1GU28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-17548-0.html基于Topic的消息发布与消费模式

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 数据结构与集合的不解之缘,你了解多少?

下一篇: 解锁多核处理器的力量:探索数据并行化在 Java 8 Stream 中的应用

标签:
  • 热门焦点
  • 鸿蒙OS 4.0公测机型公布:甚至连nova6都支持

    华为全新的HarmonyOS 4.0操作系统将于今天下午正式登场,官方在发布会之前也已经正式给出了可升级的机型产品,这意味着这些机型会率先支持升级享用。这次的HarmonyOS 4.0支持
  • 卢伟冰长文解析K60至尊版 对Redmi有着里程碑式的意义

    在今天的Redmi后性能时代战略发布会结束之后,Redmi总经理卢伟冰又带来了一篇长文,详解了为什么 Redmi 要开启后性能时代?为什么选择和 MediaTek、Pixelworks 深度合作?以及后性
  • Mate60手机壳曝光 致敬自己的经典设计

    8月3日消息,今天下午博主数码闲聊站带来了华为Mate60的第三方手机壳图,可以让我们在真机发布之前看看这款华为全新旗舰的大致轮廓。从曝光的图片看,Mate 60背后摄像头面积依然
  • 中兴AX5400Pro+上手体验:再升级 双2.5G网口+USB 3.0这次全都有

    2021年11月的时候,中兴先后发布了两款路由器产品,中兴AX5400和中兴AX5400 Pro,从产品命名上就不难看出这是隶属于同一系列的,但在外观设计上这两款产品可以说是完全没一点关系
  • 7月安卓手机性能榜:红魔8S Pro再夺榜首

    7月份的手机市场风平浪静,除了红魔和努比亚带来了两款搭载骁龙8Gen2领先版处理器的新机之外,别的也想不到有什么新品了,这也正常,通常6月7月都是手机厂商修整的时间,进入8月份之
  • 得物效率前端微应用推进过程与思考

    一、背景效率工程随着业务的发展,组织规模的扩大,越来越多的企业开始意识到协作效率对于企业团队的重要性,甚至是决定其在某个行业竞争中突围的关键,是企业长久生存的根本。得物
  • 华为Mate60标准版细节曝光:经典星环相机模组回归

    这段时间以来,关于华为新旗舰的爆料日渐密集。据此前多方爆料,今年华为将开始恢复一年双旗舰战略,除上半年推出的P60系列外,往年下半年的Mate系列也将
  • 2022爆款:ROG魔霸6 冰川散热系统持续护航

    喜逢开学季,各大商家开始推出自己的新产品,进行打折促销活动。对于忠实的端游爱好者来说,能够拥有一款梦寐以求的笔记本电脑是一件十分开心的事。但是现在的
  • 电博会与软博会实现"线下+云端"的双线融合

    在本次“电博会”与“软博会”双展会利好条件的加持下,既可以发挥展会拉动人流、信息流、资金流实现快速交互流动的作用,继而推动区域经济良性发展;又可以聚
Top