返回介绍

20.3 处理通知

发布于 2024-08-17 00:45:49 字数 1225 浏览 0 评论 0 收藏 0

通过查询MBean获得信息只是查看应用状态的一种方法。但当应用发生重要事件时,如果希望能够及时告知我们,这通常不是最有效的方法。

例如,假设Spittr应用保存了已发布的Spittle数量,而我们希望知道每发布一百万Spittle时的精确时间(例如一百万、两百万、三百万等)。一种解决方法是编写代码定期查询数据库,计算Spittle的数量。但是执行这种查询会让应用和数据库都很繁忙,因为它需要不断的检查Spittle的数量。

与重复查询数据库获得Spittle的数量相比,更好的方式是当这类事件发生时让MBean通知我们。JMX通知(JMX notification,如图20.5 所示)是MBean与外部世界主动通信的一种方法,而不是等待外部应用对MBean进行查询以获得信息。

图20.5 JMX通知使MBean与外部世界进行主动通信

Spring通过NotificationPublisherAware接口提供了发送通知的支持。任何希望发送通知的MBean都必须实现这个接口。例如,请查看如下程序清单中的SpittleNotifierImpl。

程序清单20.2 使用NotificationPublisher来发送JMX通知

正如我们所看到的,SpittleNotifierImpl实现了NotificationPublisherAware接口。这并不是一个要求苛刻的接口,它仅要求实现一个方法:setNotificationPublisher。

SpittleNotificationImpl也实现了SpittleNotifier接口的方法:millionthSpittlePosted()。这个方法使用了setNotificationPublisher()方法所注入的NotificationPublisher来发送通知:我们的Spittle数量又到了一个新的百万级别。

一旦sendNotification()方法被调用,就会发出通知。嗯……好像我们还没决定谁来接收这个通知。那就让我们建立一个通知监听器来监听和处理通知。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文