以下是我试图简单实现的规范:
1)必须在应用程序中的某些事件上发送一些警报。
2)这些警告让用户订阅它们。
3)用户已设置了自己的通知首选项(例如电子邮件和/或短信)。
到目前为止,我还没能找到Java的开源解决方案。
JMX Notifications是一个选项吗?我对JMX的了解越多,我就越觉得它试图找到与我的问题不同的东西。
任何帮助都会有用。
答案 0 :(得分:12)
JMX可以解决这个问题,但它不是完整的解决方案。
JMX为您的程序提供设施和服务,允许客户端访问监控数据,并允许客户端对应用程序进行控制调用。
正如您所提到的,JMX的一个方面是通知系统。该系统提供的基础设施使您的程序可以轻松地向客户端提供警报和通知,现代JVM还提供免费的JMX服务器,允许客户端远程连接到您的应用程序并订阅这些事件。
但是制作JMX警报是一回事,完全采取行动是另一回事。
您需要做的是在某个地方安装一些JMX客户端,“订阅”您的程序的JMX通知,然后客户端可以通过发送电子邮件等处理这些通知。
JMX客户端可以是通过TCP与您的应用程序通信的远程客户端,也可以是程序中的内部JMX客户端,例如,在线程中运行,它可以对通知进行操作。
因此,基本上,JMX为您想要做的事情提供管道和基础设施,但不会将警报转换为电子邮件的“最后一英里”。
正如@fawce所提到的,有一些不同复杂程度的“通用”JMX客户端可以对JMX数据起作用,可以做你想做的事情(我不熟悉它们,所以我不能直接说),或者您可以编写自己的系统来监控JMX数据。
答案 1 :(得分:0)
如果你的意思是JMX,有一个名为monju的JBoss / Nagios网桥,它有一个通用的JMX钩子。
答案 2 :(得分:0)
我建议使用JMX通知和SNMP,它们应该支持你的场景,2)和3)被SNMP软件覆盖。
只要您可以访问带有某些API的SMS网关,您也可以自己使用Java编写代码。只要您有权访问允许匿名访问的SMTP主机,使用javax.mail就很简单。 2)的灵活发布 - 订阅机制可用于连接1)和3)。
答案 3 :(得分:0)
这是一篇很好的文章,其中包含在您的应用中使用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端工作。
答案 4 :(得分:0)
Solarwinds是一种商业企业监视工具,能够连接到JMX进行监视。它具有生成SMS和电子邮件警报的功能。
答案 5 :(得分:-1)
你的意思是JMS(而不是JMX)? JMS是一个消息传递API,而JMX是一个监视/管理API。 使用JMS作为后端是实现后端消息的好方法,它将负责解耦,负载平衡和持久性。但是你仍然必须有一个接收消息的组件并将它们发送给用户。