图书
企业集成模式
看来他正在谈论使用面向消息的中间件
这里有一些要考虑的事情
安全
什么会阻止另一个流氓服务注册为系统中的关键组件。您将需要验证和验证服务是他们所说的身份的方法。这可以通过 PKI 系统来完成。如果您的系统完全托管在 Intranet 上,则在某些情况下您可能不需要这样做。如果是这样的话,社会工程和流氓员工将是你最大的威胁。
合同
您的客户将与服务签订什么样的合同?消息会全部序列化为 XML 并作为 TextMessage 发送吗?如果您使用纯字节消息,如果您的服务要在多个平台上运行,则必须注意字节顺序。
同步
大多数开发人员无法正确理解和使用异步消息。在可能的情况下,创建一种调用“同步”消息的方法可能符合您的设计的最佳利益。我过去通过创建带有超时和返回对象的 sendMessageAndWait() 方法来完成此操作。在该方法中,您可以创建一个临时主题 id 来接收响应,为其注册一个侦听器,然后使用锁来等待您的临时主题返回消息。
不请自来的消息
如果您想允许您的服务向您的客户发送未经请求的消息,会发生什么?服务 A 中发生了一个关键事件,它必须通知您的客户或可能是 Watch Dog 服务。允许您的设计注册一个公共通信渠道,以便服务与客户进行通信,而无需客户发起对话。
故障转移
如果处理您的信用卡的关键服务出现故障怎么办?您需要实施故障转移和看门狗服务,以确保您的关键基础设施始终正常运行。您可以在注册表中注册服务列表,然后您的注册表可以提供主要服务,如果您的主要服务停止通信,则回退到辅助服务。或者,如果您的面向消息的中间件可以处理循环消息,您也许可以注册同一主题的所有服务。考虑创建一种方法来了解服务何时终止。由于大多数消息都是异步的,因此很难确定服务何时下线。这可以通过心跳和看门狗来完成。
我过去曾为需要通信的大型系统创建过几次此类系统。如果您和其他开发人员了解这种系统的优缺点,它会非常强大和灵活。
我能给出的最大建议是为您的其他开发人员构建一个工具包,这样他们就不必考虑如何注册服务、实现故障转移或响应来自客户端的消息。这些东西会杀死你的系统并让其他人说它太复杂了。让他们感到轻松,将允许您的系统以您需要的方式工作,具有灵活性和解耦性,同时不会给您的开发人员带来理解企业设计模式的负担。
这不是象牙塔建筑师/建筑。如果他说,“这就是它的方式,现在去做,不要打扰我,因为我知道我是对的。” 如果你真的想引用一个反模式,它可能是 Kitchen Sink。不,现在我想起来,它也不是厨房水槽。
如果你能找到一个,请将其作为评论发布。
反模式