通过自动添加新的服务器的集群,当他们开始和他们离开时,他们正在关闭或出现故障自动检测,相干管理群集成员。应用此信息有充分的机会,并可以注册以接收事件通知会员加入和离开群集。连贯性还跟踪每个成员的所有服务的提供和使用。使用此信息,其中包括计划在服务器发生故障的情况下,服务弹性负载平衡数据管理,跨集群的所有成员。
本章包含以下各节:
使用群集和服务对象
使用成员对象
聆听会员活动
从任何缓存,应用程序可以获取的本地代表缓存服务的参考。从任何服务,应用程序可以获取集群的本地代表参考。
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和群集。
应用程序可以确定集群中的每个成员的主要信息是:
会员的IP地址
什么样的日期/时间会员加入群集
作为一个例子,如果有四个服务器集群中的每台服务器上运行一个副本(“实例”)的应用程序和应用程序的所有四个实例集群,那么集群是由四名成员组成。从群集对象,应用程序可以决定什么地方议员是:
Member memberThis = cluster.getLocalMember();
应用程序还可以从群集对象,确定群集成员的整套:
Set setMembers = cluster.getMemberSet();
ServiceInfo对象,应用程序可以决定参与该服务的集群成员集:
ServiceInfo info = cluster.getServiceInfo(sName);
Set setMembers = info.getMemberSet();
有关此功能的更多信息,请参阅API文档会员。
应用程序必须创建一个类实现的MemberListener接口(见例9-2)听集群和服务成员的变化。监听器类,然后添加的服务上使用的服务的addMemberListener的方法,或通过加入到高速缓存方案定义一个
使用配置的方法与编程方法有两个好处。首先,编程,听众只能被添加到一个正在运行的服务。因此,第一MEMBER_JOINED事件被错过。其次,必须发出的addMemberListener调用每个群集节点上运行相应的服务。配置方法解决了这两个问题。
下面的例子增加一个监听器实现名为MyMemberListener服务使用addMemberListener方法:
Service service = cluster.getService(sName);
service.addMemberListener(package.MyMemberListener);
下面的示例将一个监听器实现名为MyMemberListener使用DistributedCache加入到分布式缓存方案定义的
注意事项:
一个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_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。