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。
相关文章推荐
- 基于 Red Hat 的发行版 Oracle Linux 正式发布Oracle Linux 7.1
- Oracle Containers for J2EE远程安全漏洞(CVE-2014-0413)
- Oracle 10g R2不能使用EM的问题
- 表空间操作
- PreparedStatement中in子句的处理
- VMware下RedHat4.8_64位安装Oracle 10g RAC--简略脚本
- oracle sql日期比较
- 基于 Red Hat 的发行版 Oracle Linux 正式发布Oracle Linux 7.1
- OS block size和Oracle block size,查找OS Blocksize的方法
- oracle中创建数据库和表空间的几点总结
- 数据库自动备份脚本
- oracle的nvl函数的使用介绍
- 解决oracle用户连接失败的解决方法
- oracle的一些tips技巧
- Oracle 下的开发日积月累
- Oracle存储过程之数据库中获取数据实例
- Windows下ORACLE 10g完全卸载的方法分析
- Oracle 函数大全[字符串函数,数学函数,日期函数]第1/4页
- ORACLE LATERAL-SQL-INJECTION 个人见解