|
WebLogic 群集公共 API 包含在一个单接口 (weblogic.rmi.cluster.CallRouter) 中。
Class java.lang.Object
Interface weblogic.rmi.cluster.CallRouter
(extends java.io.Serializable)
只有给 RMI 编译器 (rmic) 提供实现此接口的类才能启用基于参数的路由。使用下列选项(在一行内输入)针对该服务实现运行 rmic:
$ java weblogic.rmic -clusterable -callRouter
<callRouterClass> <remoteObjectClass>
每次调用远程方法时,存根控件群集都会调用该调用路由器。该路由器负责返回该调用应路由到的服务器的名称。
群集中的每个服务器都以 WebLogic Server 控制台对其定义的名称作为唯一标识。方法路由器必须使用这些名称来标识服务器。
示例:假设 ExampleImpl 类可以实现远程接口 Example,并带有一个方法 foo:
public class ExampleImpl implements Example {
public void foo(String arg) { return arg; }
}
此 CallRouter 实现 ExampleRouter 将确保所有“arg”小于“n”的 foo 调用转至 server1(如果 server1 无法访问,则转至 server3),所有“arg”大于或等于“n”的调用转至 server2(如果 server2 无法访问,则转至 server3)。
public class ExampleRouter implements CallRouter {
private static final String[] aToM = { "server1", "server3" };
private static final String[] nToZ = { "server2", "server3" };
public String[] getServerList(Method m, Object[] params) {
if (m.GetName().equals("foo")) {
if (((String)params[0]).charAt(0) < 'n') {
return aToM;
} else {
return nToZ;
}
} else {
return null;
}
}
}
此 rmic 调用将 ExampleRouter 与 ExampleImpl 相关联,以启用基于参数的路由:
$ rmic -clusterable -callRouter ExampleRouter ExampleImpl
如果正被调用的对象所在的同一个服务器实例上存在副本,该调用则不会进行负载平衡,因为使用本地副本效率更高。有关详细信息,请参阅共存对象的优化。
|