2017-08-29 106 views
2

我们有许多相关的Java Spring应用程序在我们的服务器上运行。让我们称他们为App1,App2 & App3。按照标准,所有这些都使用common-utils.jar中的通用代码。我希望这些应用程序(App1,App2 & App3)将其状态广播到一个或多个远程监听器。对于例如 App1:我未能读取文件abc。 App2:我使用了超过90%的堆空间等。JMX通知设计

这些事件的监听者将采取特定的操作,例如根据收到的通知向支持人员和/或客户端发送电子邮件。

我能想到的最佳解决方案是在our-common-utils.jar中启用NotificationSender JMX(实现NotificationBroadcasterSupport)bean。这将有一个消息从通知队列中消耗,并将sendNotification()发送给每个通知的侦听器。这将由我们的生态系统中的每个应用程序完成,但使用common-utils的通用代码。

您是否发现此设计中存在任何缺陷?任何更有效的方法/框架?

非常感谢:)

回答

1

替代解决方案是使用任何分布式协调服务zookeeper例如。我在我的第一个微服务项目中使用它。正如我所见,您正在使用spring。 Spring云提供了可以以声明方式使用的必要解决方案。我会把你的注意力放在@FeignClient。这是非常简单的使用和灵活在世界上spring

如果我现在要解决这个问题,我会使用基于spring hystrix的解决方案。为了简化你的Java服务之间的集成,我建议检查service-registration-and-discovery


忽略我的意见,如果spring是不是在你的项目的一般发动机零件(可能是你需要其他厂商的解决方案,有很多的替代品)。我将注意力集中在弹簧解决方案上,因为弹簧在我的项目中不受限制,如果合理,我可以使用任何我希望的东西。