以下是我试图简单实现的规范:
1)必须在应用程序中的某些事件上发送一些警报。
2)这些警报让用户订阅它们。
3)并且用户已经设置了他们自己的通知偏好(例如,电子邮件和/或SMS)。
到目前为止,我还没能找到Java的开源解决方案。
JMX Notifications是一个选项吗?我对JMX的了解越多,我就越觉得它试图实现与我的问题不同的东西。
任何帮助都会有用。
JMX可以是解决此问题的机制,但它不是完整的解决方案。
JMX为您的程序提供设施和服务,以允许客户端访问监视数据以及允许客户端对应用程序进行控制调用。
如您所述,JMX的一个方面是通知系统。该系统提供的是基础设施,使您的程序可以轻松地向客户端提供警报和通知,现代JVM还提供免费的JMX服务器,允许客户端远程连接到您的应用程序并订阅这些事件。
但是制作JMX警报是一回事,完全采取行动是另一回事。
您需要做的是在某个地方安装一些JMX客户端,“订阅”您的程序的JMX通知,然后客户端可以通过发送电子邮件或其他任何方式对这些通知采取行动。
JMX客户端可以是通过TCP与您的应用程序通信的远程客户端,也可以是程序中的内部JMX客户端,例如,在线程中运行,它可以对通知进行操作。
因此,基本上,JMX为您想要做的事情提供管道和基础设施,但不会将警报转换为电子邮件的“最后一英里”。
正如@fawce所提到的,有一些不同复杂程度的“通用”JMX客户端可以对JMX数据起作用,可以做你想做的事情(我不熟悉它们,所以我不能直接说),或者你可以编写代码您自己的系统来监控JMX数据。
如果你的意思是JMX,有一个名为monju的JBoss / Nagios网桥,它有一个通用的JMX钩子。
我建议使用JMX通知和SNMP,它们应该支持您的场景,2)和3)由SNMP软件覆盖。
只要您可以访问带有某些API的SMS网关,您也可以自己使用Java编写代码。只要您有权访问允许匿名访问的SMTP主机,使用javax.mail就很简单。 2)的灵活发布 - 订阅机制可用于连接1)和3)。
这是一篇很好的文章,其中包含在您的应用中使用jms来提高警报link text的示例代码。一旦你使用本地监控,你需要设置-Dom.sun.management.jmxremote.port = 9999 -Dcom.sun.management.jmxremote.authenticate = false -Dcom.sun.management.jmxremote.ssl = false so您可以从远程计算机连接。一个很好的简单程序来监控启用jmx的java,它可以绘制移动图表的网页,并在阈值变化时通过电子邮件发送警报是link text。它还可以让您通过网页远程控制您的应用程序。好又简单。当然,如果你使用jmx,你可以很容易地交换使用更复杂的东西,如nagios或一些昂贵的商业工具。关于这些工具的关键点在于它们具有工作流和轮换以及管理想要管理大量事物(数据库,服务器,Java等)的大团队的东西 - 如果你刚刚开始,这可能太复杂了让jmx的java端工作。
Solarwinds是一个商业企业监控工具,能够挂钩到JMX进行监控。它能够生成SMS和电子邮件警报。
你的意思是JMS(而不是JMX)? JMS是一个消息传递API,而JMX是一个监视/管理API。使用JMS作为后端是实现后端消息的好方法,它将负责解耦,负载平衡和持久性。但是,您仍然必须拥有一个接收消息并将其发送给用户的组件。