使用 Listeners 和 MBean 发送通知的区别?

Difference between using Listeners and MBean to send Notifications?

我一直在阅读 GemFire 分布式数据 store/management/cache 系统如何执行通知。在阅读时,我有这个问题。

Gemfire 似乎在使用 MBean 在事件期间创建通知。 different/suitable 如何使用 MBean 创建通知而不是实施基于侦听器的方法? (不仅在 GemFire 中,而且在一般情况下)

注意:我对 MBean 这个话题很陌生。只是理解它的主要目的是公开要管理的资源。

上下文

...topic of MBean... it's main purpose is to expose resources to be managed.

没错。 (GemFire) 可以使用 JMX 查询和更改作为 MBean 公开的资源,具体取决于 MBean 为资源公开的内容(例如区域、磁盘存储、网关、AEQ 等)。

GemFire 的 JMX 接口随后可以被使用 JMX API 的应用程序和工具使用。 GemFire 的 Gfsh(命令行 shell 和管理工具)以及 Pulse(网络监控工具)都是 JMX 客户端的示例,也是您可以使用 JMX 编写的应用程序类型。

您还可以使用标准 JDK 工具,如 jconsole 或 jvisualvm 连接到 GemFire 管理器(集群中的管理节点,它联合了集群中所有成员的视图以及从管理器控制任何单个成员)。有关详细信息,请参阅 GemFire 的 section in the User Guide on Management

对比 GemFire Callbacks, callbacks (e.g. CacheListener) can be used by peer/client cache applications to register interests in certain types of events, like Region entry creation/updates, etc. Other callbacks like CacheLoaders can used to read-through to an external data source (e.g. RDBMS) on a Cache miss. Likewise, the CacheWriter can be used to 'write-through' to an external data source on a Cache (Region) create/update, or perhaps asynchronously with a AEQ/AsyncEventListener 对外部数据源执行 'write-behind'。

还有许多其他回调和可以使用这些回调的方式,但几乎所有回调都在 GemFire client/peer 缓存应用程序中以编程方式用于 "receive" 某种类型的通知。

有关详细信息,请参阅 Events and Event Handling 上的 GemFire 用户指南。

回答

现在,当涉及到 "sending" 通知时,GemFire 会代表您的应用程序进行大量分发。 JMX 主要用于发送有关管理更改的通知...添加区域、更改驱逐策略、部署功能等。相比之下,GemFire 在数据更改时向集群中其他感兴趣的成员发送分发事件事件。 "Interested" 成员通常包括集群中托管相同区域并具有相同 key/values 的其他节点,这些节点需要更新,并且在某些情况下为了保持一致性而自动更新(在 TX 中)。

现在,如果您想从您的应用程序发送通知,那么您最好使用 Spring 和 Spring Data GemFire 来配置和访问 GemFire。 Spring 提供卓越的 support for application messaging.

当然,还有其他选项可用,包括 JMS, which Spring provides integration support

总而言之,发送的events/notifications和使用的分发机制高度依赖于event/notification类型。同样,通知的方式(JMX 通知与 GemFire 回调)也取决于消息的类型和目的。

抱歉解释冗长; loaded/broad 问题和复杂的主题可能会因用例而有很大差异。

希望这对您有所帮助(一点点;-)