消息总线和消息队列理解

2024-02-29

我想知道我对消息总线和消息队列工作原理的理解是否正确。

首先,我需要明确命名,服务巴士可以与以下互换使用消息总线?这是一种发布者-订阅者类型的系统,其中消息被添加到任意数量的发布者的消息集合中,并且任意数量的订阅者可以从中读取消息,到目前为止我是对的吗?

P1 ---                                         /``````S1
       \________ Service Bus Middleware ------+------ S2
       /           MESSAGE-COLLECTION          \______S3
P2 ---

我不明白的是

  1. 订阅者如何知道它感兴趣的消息,我的意思是它显然订阅了它,但是它如何知道它应该订阅哪条消息?,它在哪里看到消息列表,它如何使用它?通过 API 或如何?

  2. 订阅者如何接收消息?

  3. 何时从 MESSAGE-COLLECTION 中删除消息?我可以想象的是,为每条消息保留一些计数器,该计数器代表订阅者的总数,一旦一个订阅者成功处理该消息,该计数器就会递减。

A 消息队列也称为消息代理是一种推拉式系统。有任意数量的生产者和任意数量的消费者。每个生产者为每个消费者创建一个队列,并向其提供消息。

             --- Message Queue 1 ---- C1
           /  
P1 ------ +
           \ 
             --- Message Queue 2 ---- C2


P2 ------ + --- Message Queue 1 ---- C1

在这种情况下,一旦消费者成功处理该消息,该消息就会被删除。是我的消息队列对其工作原理的理解正确吗?

我不确定到底是什么的另一个概念是活动中心.


我想知道我对消息总线和消息队列工作原理的理解是否正确。

一些评论/答案。这并不全面,因为许多方面都是特定于所使用的队列的。

服务总线与消息总线可以互换使用吗?

正确的。服务总线是面向服务的解决方案中使用的消息总线基础设施,提供服务之间的后端数据传输机制。

它是一种发布者-订阅者类型的系统,其中消息被添加到任意数量的发布者的消息集合中,并且任意数量的订阅者都可以从中读取消息

一般有两种型号:

  1. 发布/订阅,发布者将数据发送到总线,而无需考虑特定目标。然后,一个或多个订阅者可以使用该消息(或不使用,请参见下文)。

  2. 请求/响应,发送方将数据发送到总线,但期望特定的接收方处理消息并返回响应。

订阅者如何知道他对什么消息感兴趣......?

大多数服务总线实现都使用路由键的概念。发送到总线的每个数据实体都附有一个密钥,订阅者可以根据该密钥进行过滤。

当然,订阅者也可以选择获取发布到特定队列的所有消息。

订阅者如何接收消息?

这因服务队列产品而异。例如,在 RabbitMQ 中,消息通过 API 传递给订阅者,而在 Kafka 中,客户端必须定期轮询服务器以获取消息。

何时从 MESSAGE-COLLECTION 中删除消息?

有时根本不是。这在产品和配置之间也有所不同。有时,消息仅传递给一个接收者,并在确认传递后被删除,但有时消息会留在总线上,直到根据时间戳过期为止。许多场景都是可能的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

消息总线和消息队列理解 的相关文章

  • 可以使用数据流将 pubsub 消息重复数据删除回 pubsub 吗?

    我有一个将数据写入 Google Cloud pubsub 的应用程序 根据 pubsub 的文档 由于重试机制而导致的重复偶尔可能会发生 还有消息乱序的问题 这在 pubsub 中也得不到保证 另外 根据文档 可以使用 Google Cl
  • 通道适配器和消息网关模式有什么区别?

    无论我读了多少关于这两种模式的文章 我都看不出其中的区别 这是一个很好的问题 因为它们的相似之处在于它们都提供对消息系统的应用程序访问 我认为正是他们实现这一目标的方式使他们与众不同 通道适配器模式涉及如何从现有系统获取数据而不修改该系统
  • Angular 项目结构最佳实践

    这是我的 Angular 项目的目录结构 Angular 应用程序可以通过许多不同类型的组件而变得庞大 组织 Angular 应用程序的最佳实践是什么 app layout home layout header menu content d
  • zend 模型架构

    假设我的数据库中有两个表 项目和用户 我创建了两个扩展 Zend Db Table Abstract 的模型 Model DbTable Users and Model DbTable Projects 现在 创建一个实例是一个好的模式吗
  • 如何将扩展 PUB-SUB 模式中的发布者和订阅者与 C++ 中 ZeroMQ 中的中介同步?

    Extended PUB SUB topology https i stack imgur com GEgpx png 我在一个有 1 个中介的用例中有多个发布者和多个订阅者 在 ZeroMQ 指南中 我了解了如何使用额外的方法来同步 1
  • JPA 实体和/与 DTO

    在这些情况下帮助决定何时使用 DTO 以及何时使用 Entity 的总体思路是什么 UI 服务器端java调用服务 它应该获取 发送实体还是 DTO Web 服务调用服务 服务是否应该接受实体或 DTO 我喜欢阅读传递实体的代码 传递更简单
  • Java 包结构中的模块与层

    我曾经把所有东西都放在这样的包中 com company app module1 com company app module2 但它使得基于包的 AOP 切入点变得困难 并导致需要 IDE 才能理解的巨大包 所以现在我意识到我需要一个更深
  • 什么是自以为是的软件?

    Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 我经常看到人们说某些软件 非常固执己见 或者微软倾向于编写 不固执己见 的框架 这实际上意味着
  • 架构:API 作为网站和移动应用程序的核心

    我对完整的架构理念有不同的问题 我希望有丰富经验的人可以帮助我 因为我几乎陷入了所有可能性之中 我正计划重写一个社区网站 我们的客户希望将来使用本机移动应用程序 所以我需要考虑到这一点 因此 我决定创建一个基于 PHP 框架 Kohana
  • 网络断开后,raft follower如何重新加入?

    我在木筏上遇到了问题 在论文 寻找一种可理解的共识算法 扩展版 中写道 要开始选举 追随者会增加其当前的 任期并过渡到候选状态 第 5 2 节 它还说 AppendEntries RPC 和 RequestVot RPC 中的接收者应为 R
  • 什么算作失败?

    假设我有一个伪 C 程序 For i 0 to 10 x a 2 x 5 next 30 FLOPS 的 FLOP 数量是 1 x 1 x 5 1 2 x 5 10 loop 吗 我很难理解什么是失败 请注意 指示我从何处获取 操作 计数
  • MVP 和 GWT 小部件之间的通信

    如果我将 MVP 模式与 GWT 结合使用 如 2009 年 Google I O 中的 GWT 架构最佳实践讨论 但已将信息分散到多个小部件中 那么应该如何填充值对象 假设我有一个 EditPersonView Presenter 一个
  • 如何发出 JMS 同步请求

    我有一个 Web 应用程序 预计将从外部应用程序获取和显示数据 该外部应用程序只能通过消息传递 JMS 访问 因此 如果用户在浏览器上提交请求 则同一 HTTP 请求线程将必须与消息系统 MQ 系列 交互 以便同一请求线程可以显示从消息系统
  • 使用 i386 arch 而不是 x86_64 在 OSX 上构建 libFLAC

    我正在尝试构建 libFLAC 以在我的项目中使用 但是当涉及到链接时 GCC 会忽略该库 因为它说它不是为当前体系结构 i386 构建的 当我以 64 位编译程序时 它正确链接了库 这意味着该库是针对 x86 64 架构编译的 不幸的是
  • Azure ServiceBus 和异步 - 是还是不是?

    我正在 Azure 上运行服务总线 泵送每秒 10 100 条消息 最近我已经切换到 net 4 5所有人都兴奋地重构了所有代码 异步 和 等待 每行至少两次 以确保它 正确 完成 现在我想知道这是否真的是为了是好是坏 如果您可以查看代码片
  • 你现在在做MDA(模型驱动架构)吗?如果是这样,您使用什么工具,效果如何?

    模型驱动架构是这样一种想法 您创建模型 以一种不依赖任何 或至少大多数 实现技术的方式表达您需要解决的问题 然后为一个或多个特定平台生成实现 人们声称 在更高的抽象级别上工作更加强大和高效 此外 您的模型比技术更长寿 因此 当您的第一语言
  • 这叫什么类型的建筑?

    对于我当前正在开发的 Web 应用程序 ASP NET MVC 我们采用以下架构 Data Access Layer 将数据持久保存到任意数据库的逻辑 Domain 数据模型 Service Layer 业务逻辑 例如订单处理 账户管理等
  • 是否有用于序列化和反序列化各种格式的对象层次结构的模式?

    给定一个复杂的对象层次结构 幸运的是它不包含循环引用 如何实现支持各种格式的序列化 我不是来讨论实际实施的 相反 我正在寻找可能派上用场的设计模式的提示 更准确地说 我正在使用 Ruby 我想解析 XML 和 JSON 数据以构建复杂的对象
  • socket.io 广播功能 & Redis pub/sub 架构

    如果有人能帮助我解决一个小疑问 我将不胜感激 使用socket io广播功能和在Redis上使用pub sub设计架构有什么区别 例如 在另一个示例中 node js 服务器正在侦听 socket io 针对 键 模型 todo 和值 数据
  • WPF 和 WCF 应用程序的用户身份验证/授权的“最佳实践”是什么?

    假设我有一个 NET 富客户端 WPF 应用程序 它将同时部署在 3 个不同的场景中 客户端和服务器代码在单个进程中运行 客户端代码在 Intranet 计算机上运行 并通过 WCF 与运行应用程序 域 基础设施代码的服务器计算机进行通信

随机推荐

  • 我可以向量化这个Python代码吗?

    我编写了这段 python 代码来获取标签的邻居 一组共享一些公共属性的像素 标签的邻居被定义为位于边界另一侧的其他标签 相邻标签共享边界 所以 我写的代码可以工作 但速度非常慢 segments It is a 2 dimensional
  • 删除 sourceSets.main.runtimeClasspath 中的 jar

    我的 gradle 中有这个 sourceSets main compileClasspath configurations provided runtimeClasspath configurations provided test co
  • 从选择框中删除重复条目

    我如何使用 jQuery 删除重复项
  • 如何制作在 iOS 上的 VLC 中播放的音乐文件的 URL?

    我想通过我的网站向 iPhone 和 iPad 用户提供 MP3 和其他文件格式 VLC 的 iOS 应用程序似乎符合要求 但他们说 Additionally third party websites and apps may includ
  • 从 VBA 项目中删除密码

    如何以编程方式从 Excel VBA 项目中删除 已知 密码 需要明确的是 我想从 VBA 项目中删除密码 而不是从工作簿或任何工作表中删除密码 删除 VBA 项目密码的另一种方法是 使用十六进制编辑器打开 xls 文件 即十六进制编辑ht
  • 如何调试 Captive Portal 中的浏览器?

    强制门户有一个浏览器 当您尝试连接到无线网络时 该浏览器有时会打开 有谁知道我该如何调试它 我已经尝试过的 我尝试运行模拟器 但模拟器无法打开门户 我尝试过将 iPhone 连接到我的 Mac 并使用 Safari 开发进行调试 但这仅在
  • 如何在雪豹上安装gem pg

    我需要在雪豹上安装 gem pg 因为我正在 Rails 代码库上运行 rake 我没有使用 postgres 这是我收到的错误 sudo gem install pg Password Sorry try again Password B
  • 自动映射器有什么用?

    What s 自动映射器 http www codeplex com AutoMapper for 它将如何帮助我处理域和控制器层 asp net mvc 也许一个例子会有所帮助 假设您有一个很好标准化的数据库模式 如下所示 Orders
  • Python——词法分析和标记化

    我希望加快我的发现过程 因为这是我第一次涉足词法分析领域 也许这甚至是一条错误的道路 首先 我将描述我的问题 我有非常大的属性文件 大约 1 000 个属性 经过提炼后 实际上只有大约 15 个重要属性 其余属性可以生成或很少更改 因此 例
  • 在加载时应用选择背景颜色?

    请查看以下链接以查看我的代码的运行情况 http codepen io DigitalSquid pen mAkuC http codepen io DigitalSquid pen mAkuC 如何使背景颜色出现在页面加载时 on win
  • MVC 模式中的“Hello World”

    在面试某家公司的时候 我被问到了这个问题 你知道哪些设计模式 然后我被告知基于 MVC 设计模式编写最简单的 hello world 应用程序 我想出了一个 JavaScript 程序 var arr a b c d this is an
  • 应用 pyspark ALS 的“recommendProductsForUsers”时出现 StackOverflow 错误(尽管可用 >300GB RAM 的集群)

    寻找专业知识来指导我解决以下问题 背景 我正在尝试使用受启发的基本 PySpark 脚本这 例子 https github com GoogleCloudPlatform spark recommendation engine blob m
  • Laravel 至少需要一个字段

    我有两个字段billable option and billable option yes 我想验证至少一个字段是必填字段 我努力了 this gt validate request billable option gt required
  • 获取linux可执行文件加载地址(__builtin_return_address和addr2line)

    我正在编写一些代码来存储每个内存分配的回溯 然后 我将这些列表写入文件以进行离线分析 在win32中我使用 AddressOfReturnAddress然后手动创建回溯 由于我使用的每次运行的地址都是随机的GetModuleInformat
  • 无法在 Crashlytics 中获取本机崩溃的堆栈跟踪

    我有一个 Android 项目 其中包含本机库 so 我已将 firebase crashlytics 集成到我的项目中 我能够在 firebase crashlytics 中获取 Java 崩溃的崩溃转储 但是 如果发生本机崩溃 堆栈跟踪
  • 如何定义具有键类型和值类型之间相关性的 Map,而它们都是并集

    这是显示我想要实现的目标的示例 除了两个问题之外 它几乎可以工作 设置不显示错误代码的错误 Immer Draft 类型 或任何 DeepWritable 实用程序类型 完全搞乱了这个技巧 基本上在我看来 我在这里所做的事情并不是什么真正的
  • 在 scrapyd 中启用 HttpProxyMiddleware

    阅读scrapy文档后 我认为HttpProxyMiddleware是默认启用的 但是当我通过 scrapyd 的 webservice 接口启动蜘蛛时 HttpProxyMiddleware 未启用 我收到以下输出 2013 02 18
  • 如何获取适用于 adMob 的测试广告横幅并测试插页式广告?

    我正在尝试设置 adMob 广告 我有两个问题 1 我是否正确使用了 adListener 接口 2 为什么我看不到插页式广告 让我们从 adListener 开始 据我从说明中了解到 adListener 是一个接口 所以我创建了一个界面
  • (iPhone) 我可以使用调度程序进行 AudioServicesPlaySystemSound 循环吗?

    我可以使用调度程序进行 AudioServicesPlaySystemSound 循环吗 一个问题是我无法获得声音持续时间 有什么方法可以获取持续时间 以便我可以动态创建循环声音的调度程序 据我所知 AudioService 没有内置循环和
  • 消息总线和消息队列理解

    我想知道我对消息总线和消息队列工作原理的理解是否正确 首先 我需要明确命名 服务巴士可以与以下互换使用消息总线 这是一种发布者 订阅者类型的系统 其中消息被添加到任意数量的发布者的消息集合中 并且任意数量的订阅者可以从中读取消息 到目前为止