简而言之,这是我试图实现的规格:
1) 必须针对应用程序中的某些事件发送一些警报。
2) 这些警报有用户订阅它们。
3) 并且用户已经设置了他们自己的通知偏好(例如电子邮件和/或短信)。
到目前为止,我还没有在 Java 中找到开源解决方案。
JMX 通知是一个选项吗?我对 JMX 的了解越多,我就越觉得它试图实现与我的问题不同的东西。
任何帮助都会很有用。
简而言之,这是我试图实现的规格:
1) 必须针对应用程序中的某些事件发送一些警报。
2) 这些警报有用户订阅它们。
3) 并且用户已经设置了他们自己的通知偏好(例如电子邮件和/或短信)。
到目前为止,我还没有在 Java 中找到开源解决方案。
JMX 通知是一个选项吗?我对 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 来引发警报链接文本的示例代码。一旦您使用本地监控,您需要设置 -Dom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false 所以您可以从远程计算机连接。一个很好的简单程序来监控启用了 jmx 的 java,它可以绘制移动图形的网页,并在阈值更改时通过电子邮件发送警报是链接文本. 它还可以让您通过网页远程控制您的应用程序。又好又简单。当然,如果您使用的是 jmx,您可以轻松换用更复杂的东西,例如 nagios 或一些昂贵的商业工具。这些工具的关键在于它们有工作流程和轮班表以及管理一大群人想要照顾很多东西(数据库、服务器、java等)的东西——如果你刚开始的话,这可能太复杂了让 jmx 的 java 端正常工作。
Solarwinds是一种商业企业监控工具,能够连接到 JMX 进行监控。它能够生成 SMS 和电子邮件警报。
您是指 JMS(而不是 JMX)吗?JMS 是一个消息传递 API,而 JMX 是一个监控/管理 API。使用 JMS 作为后端是实现后端消息的好方法,它将负责解耦、负载平衡和持久性。但是您仍然必须有一个组件来接收消息并将它们发送给用户。