您的位置:首页 > 数据库 > Oracle

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

2015-08-18 00:17 363 查看


动态管理群集成员

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

本章包含以下各节:

    使用群集和服务对象

    使用成员对象

    聆听会员活动


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文档NamedCache,CacheService,服务,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-listener>元素。

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

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

Service service = cluster.getService(sName);

service.addMemberListener(package.MyMemberListener);

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

<distributed-scheme>

   <scheme-name>example-distributed</scheme-name>

   <service-name>DistributedCache</service-name>

   <member-listener>

      <class-name>package.MyMemberListener</class-name>

   </member-listener>

   <backing-map-scheme>

      <local-scheme>

         <scheme-ref>example-binary-backing-map</scheme-ref>

      </local-scheme>

   </backing-map-scheme>

   <autostart>true</autostart>

</distributed-scheme>

<member- listener>元素可以用在的<distributed-scheme>,<replicated-scheme> <optimistic-scheme> <invocation-scheme>和<proxy-scheme>元素。请参阅附录B,“缓存配置元素”有效的缓存配置元素的参考。

注意事项:

一个MemberListener实现必须有一个公共的默认构造函数,使用时的<member-listener>元素添加一个监听器服务。

例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_LEAVING和MEMBER_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