我猜这是一个常见问题,但我会尝试描述我当前的问题。
我有一个基本服务,我们将其命名为“CoreService”,它提供了我想说的“主要”功能:处理数据库中的数据(我们的应用程序中有一个集中式数据库)。还有许多其他应用程序,其中一些应用程序有自己的用于本地用途的数据库。还有一个简单的“NotificationService”。其目的是向不同的订阅者广播消息。
通常,这个NotificationService是从“ExternalWorld”调用的,并将通知发送到不同的服务(其中包括“CoreService”)。
今天我看到有必要从“CoreService”调用“NotificationService”。
我在这里担心的是,我引入了循环依赖:NotificationService 需要知道如何向每个服务发送消息(包括“CoreService”,因此它需要了解“CoreService”接口,因此它需要引用“CoreService” )并且“CoreService”需要向“NotificationService”发送消息(因此它也需要引用它)...循环依赖...
问题:我们应该如何构建我们的架构来处理这样的问题?
多谢!
你必须从点对点切换到调解者。调解器现在将负责将源绑定到目的地并适当地路由/发布消息(ESB 在我的脑海中响起)。
解释
你没有直接引用核心服务 from 通知服务或相反亦然。两者都会订阅 to a topic他们的兴趣。例如核心服务将事件发布到某个主题通知服务将订阅(并且核心服务还将订阅一个主题通知服务 出版事件)。然后,主题处理程序(消息系统或 ESB 等)负责将事件转发给给定主题的所有订阅者。这样,服务彼此松散耦合,甚至不需要知道它们的存在。
目前,您正在使用NotificationService作为中介/ESB,因此如果您愿意的话,可以将其作为基础设施服务,从而解决循环依赖等问题。它不再是业务服务。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)