Oracle Coherence中文教程九:动态管理群集成员

动态管理群集成员


通过自动添加新的服务器的集群,当他们开始和他们离开时,他们正在关闭或出现故障自动检测,相干管理群集成员。应用此信息有充分的机会,并可以注册以接收事件通知会员加入和离开群集。连贯性还跟踪每个成员的所有服务的提供和使用。使用此信息,其中包括计划在服务器发生故障的情况下,服务弹性负载平衡数据管理,跨集群的所有成员。

本章包含以下各节:

    使用群集和服务对象
    使用成员对象
    聆听会员活动

9.1使用群集和服务对象

从任何缓存,应用程序可以获取的本地代表缓存服务的参考。从任何服务,应用程序可以获取集群的本地代表参考。

CacheService service = cache.getCacheService();

Cluster      cluster = service.getCluster();

从群集对象,应用程序可以决定在群集中运行的服务的集合。在实施例9-1中说明了这一点。

9-1确定服务运行在群集

...

for (Enumeration enum = cluster.getServiceNames(); enum.hasMoreElements(); )

    {

    String sName = (String) enum.nextElement();

    ServiceInfo info = cluster.getServiceInfo(sName);

    // ...

    }

...

ServiceInfo对象提供有关服务的信息,包括名称,类型,版本和会员。

有关此功能的更多信息,请参阅的API文档NamedCacheCacheService,服务,ServiceInfo和群集。

9.2使用成员对象

应用程序可以确定集群中的每个成员的主要信息是:

    会员的IP地址
    什么样的日期/时间会员加入群集

作为一个例子,如果有四个服务器集群中的每台服务器上运行一个副本(实例)的应用程序和应用程序的所有四个实例集群,那么集群是由四名成员组成。从群集对象,应用程序可以决定什么地方议员是:

Member memberThis = cluster.getLocalMember();

应用程序还可以从群集对象,确定群集成员的整套:

Set setMembers = cluster.getMemberSet();

ServiceInfo对象,应用程序可以决定参与该服务的集群成员集:

ServiceInfo info = cluster.getServiceInfo(sName);

Set setMembers = info.getMemberSet();

有关此功能的更多信息,请参阅API文档会员。

9.3聆听会员活动

应用程序必须创建一个类实现的MemberListener接口(见例9-2)听集群和服务成员的变化。监听器类,然后添加的服务上使用的服务的addMemberListener的方法,或通过加入到高速缓存方案定义一个元素。

使用配置的方法与编程方法有两个好处。首先,编程,听众只能被添加到一个正在运行的服务。因此,第一MEMBER_JOINED事件被错过。其次,必须发出的addMemberListener调用每个群集节点上运行相应的服务。配置方法解决了这两个问题。

下面的例子增加一个监听器实现名为MyMemberListener服务使用addMemberListener方法:

Service service = cluster.getService(sName);

service.addMemberListener(package.MyMemberListener);

下面的示例将一个监听器实现名为MyMemberListener使用DistributedCache加入到分布式缓存方案定义的元素命名服务:

   example-distributed

   DistributedCache

   

      package.MyMemberListener

   

   

      

         example-binary-backing-map

      

   

   true

元素可以用在的  元素。请参阅附录B缓存配置元素有效的缓存配置元素的参考。

注意事项:
一个MemberListener实现必须有一个公共的默认构造函数,使用时的元素添加一个监听器服务。

9-2演示了一个MemberListener实现,打印出的所有成员,它接收的事件:

9-2 A样品MemberListener实现

public class MemberEventPrinter

        extends Base

        implements MemberListener

    {

    public void memberJoined(MemberEvent evt)

        {

        out(evt);

        }

    public void memberLeaving(MemberEvent evt)

        {

        out(evt);

        }

    public void memberLeft(MemberEvent evt)

        {

        out(evt);

        }

    }

MemberEvent对象进行左右事件类型(要么MEMBER_JOINED的,MEMBER_LEAVING,或MEMBER_LEFT),成员产生的事件,作为事件源和服务的信息。此外,事件提供了一种方法,为LOCAL(),这表明它的应用程序是成员加入或离开集群。认识软重新启动应用程序会自动重新加入群集发生故障后,这是非常有用的。

注意事项:
调用的CacheFactory.shutdown()方法注销所有的听众。在这种情况下,,同时MEMBER_LEAVINGMEMBER_LEFT事件被发送。如果成员因任何其他原因终止,只有MEMBER_LEFT事件被发送。

实施例9-3​​明了如何可以使用封装在一个MemberEvent对象的信息。

9-3事件类型信息在MemberEvent对象

public class RejoinEventPrinter

        extends Base

        implements MemberListener

    {

    public void memberJoined(MemberEvent evt)

        {

        if (evt.isLocal())

            {

            out("this member just rejoined the cluster: " + evt);

            }

        }

    public void memberLeaving(MemberEvent evt)

        {

        }

    public void memberLeft(MemberEvent evt)

        {

        }

}


有关这些功能的更多信息,请参阅API文档,服务,MemberListener MemberEvent

你可能感兴趣的:(Oracle,Coherence)