SOA 中的循环依赖

2024-01-26

我猜这是一个常见问题,但我会尝试描述我当前的问题。

我有一个基本服务,我们将其命名为“CoreService”,它提供了我想说的“主要”功能:处理数据库中的数据(我们的应用程序中有一个集中式数据库)。还有许多其他应用程序,其中一些应用程序有自己的用于本地用途的数据库。还有一个简单的“NotificationService”。其目的是向不同的订阅者广播消息。

通常,这个NotificationService是从“ExternalWorld”调用的,并将通知发送到不同的服务(其中包括“CoreService”)。

今天我看到有必要从“CoreService”调用“NotificationService”。

我在这里担心的是,我引入了循环依赖:NotificationService 需要知道如何向每个服务发送消息(包括“CoreService”,因此它需要了解“CoreService”接口,因此它需要引用“CoreService” )并且“CoreService”需要向“NotificationService”发送消息(因此它也需要引用它)...循环依赖...

问题:我们应该如何构建我们的架构来处理这样的问题?

多谢!


你必须从点对点切换到调解者。调解器现在将负责将源绑定到目的地并适当地路由/发布消息(ESB 在我的脑海中响起)。

解释

你没有直接引用核心服务 from 通知服务或相反亦然。两者都会订阅 to a topic他们的兴趣。例如核心服务将事件发布到某个主题通知服务将订阅(并且核心服务还将订阅一个主题通知服务 出版事件)。然后,主题处理程序(消息系统或 ESB 等)负责将事件转发给给定主题的所有订阅者。这样,服务彼此松散耦合,甚至不需要知道它们的存在。

目前,您正在使用NotificationService作为中介/ESB,因此如果您愿意的话,可以将其作为基础设施服务,从而解决循环依赖等问题。它不再是业务服务。

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

SOA 中的循环依赖 的相关文章

  • @Autowire注释的问题(空)

    我在验证器类中自动连接的两个服务有问题 这些服务工作正常 因为在我的控制器中是自动连接的 我有一个 applicationContext xml 文件和 MyApp servlet xml 文件 我的基础包是 es unican meteo
  • Symfony2 - 将 Swiftmailer 添加为服务

    我想将我的电子邮件代码从我的控制器移至服务中 到目前为止我已完成以下操作 在 services yml 中创建条目 在 acme demobundle services EmailManager php 中创建了一个 EmailManage
  • CoreBluetooth:如何为许多特性(30 - 40)设计代码?

    我搜索了一下 发现这是一个可能重复的问题 同一设备的多个 CBPeripheral https stackoverflow com questions 10836703 multiple cbperipherals for same dev
  • CISC 机器 - 它们不只是将复杂指令转换为 RISC 吗?

    也许我在架构上存在误解 但如果机器有 比如说 乘法指令 该指令是否未转换为更小的指令 或者过于复杂以至于最终与等效的 RISC 指令具有相同的速度 乘法是一个不好的例子 它在两种体系结构中都是一条指令 将上面的 乘法 替换为 CISC 中更
  • 相同的 SAML 响应是否应该被接受两次、多次?

    只要在允许的 SAML 令牌生命周期内 SAML 联合软件是否应该接受相同的 SAML 响应 简单来说 IDP 识别提供商 发出 SAML 响应 然后 SP 服务提供商 接受 处理它 第一次使用后是否可以立即重新使用相同的未修改的 SAML
  • 除了 Erlang 之外,还有哪些系统是基于“绿色流程”的?

    我正在阅读这个信息页面绿线 维基百科 http en wikipedia org wiki Green thread我想知道 除了 Erlang 之外 还有哪些编程系统依赖于 绿色进程 Edit 绿线 绿色流程 基于绿色流程 Erlang
  • 即使提供了通知,也无法在前台服务中运行蓝牙扫描超过 10 - 15 秒

    即使应用程序关闭 我也使用服务来保留对 Android 手机的扫描 我使用广播接收器在被杀死时重新启动我的服务 它会重新启动扫描 并且只工作大约 15 秒 然后停止 当我单击 MainActivity 中的 button1 时 我启动了服务
  • Google BigQuery 底层架构

    所以我大约 10 分钟前才开始摆弄 Google BigQuery 我想知道是否有人知道他们用来存储数据的底层架构 例如 这只是他们自己的下一代 BigTable 基础设施吗 另外 他们在索引 索引重建等方面使用什么样的策略是否清楚 我只是
  • 在 Android KitKat 中接收彩信

    所以这个视频Android 4 4 短信 API http www youtube com watch v mdq0R2WQssQ DevBytes 解释了 KitKat 中 SMS API 的最新变化 他们还提供了示例项目的链接 http
  • Sharepoint Server 对于 Excel Services 或 Excel Web Access 是必需的吗

    Excel Services 和 Excel Web Access 随 Microsoft Office SharePoint Server 2007 一起提供 我想知道是否可以在不运行 Sharepoint Server 的情况下使用 E
  • JNA Windows 服务启动类型

    我一直在使用 JNA 并且能够使用下面的代码返回 Windows 服务的状态 即启动或停止 但我不确定如何返回服务的启动类型 我确信 JNA 之外还有其他方法 但如果可能的话我想继续使用 JNA import com sun jna imp
  • 生成单调递增整数(最大 64 位)

    作为新项目的一部分 我们需要一个可以生成单调递增整数的服务 该服务的要求是 服务不需要生成连续的整数 只要它生成单调递增的整数就应该没问题 它应该产生 64 位整数 该服务应该具有高可用性 服务应该能够适应故障 或重新启动 我本来打算使用r
  • 从另一个命令 Handle() 方法中调用命令

    嗨 我正在使用简易注射器 https simpleinjector orgDI 库并一直在关注一些关于围绕命令模式设计的架构模型的非常有趣的材料 同时 在我的架构的命令方面 https cuttingedge it blogs steven
  • 使用服务时应用程序终止时音乐暂停

    我正在使用一个Service类在后台播放音乐 当我在顶部显示通知栏时 我的应用程序出现问题 当我终止该应用程序时 音乐停止约 1 秒 然后再次开始 我不知道出了什么问题 我正在关注this https www simplifiedcodin
  • 了解 IServiceProvider 和 QueryService

    谁能解释一下背后的想法IServiceProvider and QueryService 我不明白服务是什么以及它与其他类型的对象或接口有何不同 我看到的解释很少 主要是一些评论here https learn microsoft com
  • 如何设计流星智能包以透明地将应用程序分离到不同的实例中?

    这是对于那些非常熟悉 Meteor 架构的人来说的问题 我正在尝试设计一个智能包 可以透明地运行 Meteor 应用程序的多个 副本 也就是说 给定一个现有的 Meteor 应用程序和几个预定义的用户组 该包可以半自动地 隔离 该应用程序
  • 内存缓存 VS。分布式系统中的集中式缓存

    我们目前正在寻找最合适的解决方案来访问分布式系统上的关键数据 并且我们正在考虑是否使用内存缓存而不是集中式缓存 有关我们希望存储 访问的数据的一些信息 数据量非常小 数据很冷 这意味着它几乎不会改变 并且只有当人们改变我们后台系统中的某些内
  • Inno Setup - 在文件复制之前正确停止服务

    我们的安装过程包括一个 Windows 服务 如果我们的软件配置为作为服务器安装 相对于客户端安装 则会安装该服务 我添加了服务库 http www sandon it files services unicode iss为了能够管理服务
  • 丰富的领域模型和 ORM

    Martin Fowler 认为贫血领域模型是一种反模式 将持久性模型作为域模型进行滚动似乎也严重偏离 因为对象关系阻抗不匹配 http en wikipedia org wiki Object Relational impedance m
  • 从前台服务的活动中释放内存

    我有一个带有前台服务和一项活动的应用程序 该服务可以在启动时自行启动 也可以从 Activity 中启动 我注意到当服务在启动时自行启动时 内存使用量约为 3MB 一旦我打开该 Activity 内存使用量就会跃升至约 9mB 一旦 Act

随机推荐