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

时间:2015-03-18 08:50:15

标签: listener jmx mbeans gemfire spring-data-gemfire

我一直在阅读GemFire分布式数据存储/管理/缓存系统如何执行通知。在阅读这篇文章时,我有了这个问题。

Gemfire似乎正在使用MBeans在事件期间创建通知。使用MBean创建通知而不是实现基于Listener的方法有多么不同/合适? (不仅仅是在GemFire中,一般而言)

注意:我对MBean的主题很新。只是理解它的主要目的是公开要管理的资源。

1 个答案:

答案 0 :(得分:1)

CONTEXT

  

... MBean的主题......它的主要目的是公开要管理的资源。

这是正确的。 (GemFire)作为MBean公开的资源都可以被查询和更改,具体取决于MBean使用JMX为资源公开的内容(例如Region,DiskStore,Gateway,AEQ等)。

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

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

GemFire Callbacks对比,对等/客户端缓​​存应用程序可以使用回调(例如CacheListener)来注册某些类型事件的兴趣,例如区域条目创建/更新等。其他回调如{{3可用于在Cache未命中时读取外部数据源(例如RDBMS)。同样,CacheLoaders可用于“写入”缓存(区域)创建/更新上的外部数据源,或者可能与CacheWriter / AEQ执行a AsyncEventListener异步“后写”到外部数据源。

还有许多其他回调和方法可以使用这些回调,但几乎所有回调都在GemFire客户端/对等缓存应用程序中以编程方式使用,以“接收”某种类型的通知。

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

ANSWER

现在,当谈到“发送”通知时,GemFire代表您的应用程序进行了大量的分发。 JMX主要用于发送有关管理更改的通知...添加了区域,更改了驱逐策略,部署了功能等。相反,当数据更改为群集中对其感兴趣的其他成员时,GemFire会发送分发事件事件。 “感兴趣的”成员通常包括群集中的其他节点,这些节点承载相同的Region并且具有相同的键/值,需要更新,并且在某些情况下以原子方式(在TX中)以保持一致性。

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

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

总而言之,发送的事件/通知和使用的分发机制在很大程度上取决于事件/通知类型。同样,通知的方式(JMX通知与GemFire回调)也取决于消息的类型和目的。

对于冗长的解释感到抱歉;它是加载/广泛的问题和复杂的主题,根据用例可能会有很大差异。

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