首页 > 应用开发 > IT综合 > 关于Corba调用的Timeout 问题
关于Corba调用的Timeout 问题
在VisiBorker 下无论是C++ 还是 Java Corba 调用默认是没有超时的。也就是说调用将阻塞到有返回为止
如果要配置 Timeout,就必须为Orb配置相关的Policy
C++ 如下配置
Messaging::RebindMode rebind_mode = QoSExt::VB_TRANSPARENT;
CORBA::Any rebind_value;
rebind_value <<= rebind_mode;
CORBA::Policy_var rebind_policy =
orb->create_policy(Messaging::REBIND_POLICY_TYPE,
rebind_value);
CORBA::Any con_timeout_value; // 设置Bind连接的时候的TimeOut
CORBA::Any snd_timeout_value; // 设置发送时候的TimeOut
CORBA::Any rt_timeout_value; // 设置接收时候的TimeOut
// 5 seconds
con_timeout_value <<= (CORBA::ULongLong)(5 * 1000 * 10000);
snd_timeout_value <<= (CORBA::ULongLong)(5 * 1000 * 10000);
// 60 seconds
// note: rt = snd + rcv so rt > snd. if rt = snd, then it
// is effectively 0 and will not work.
rt_timeout_value <<= (CORBA::ULongLong)(15 * 1000 * 10000);
CORBA::Policy_var con_timeout_policy =
orb->create_policy(QoSExt::RELATIVE_CONN_TIMEOUT_POLICY_TYPE,
con_timeout_value);
CORBA::Policy_var snd_timeout_policy =
orb->create_policy(Messaging::RELATIVE_REQ_TIMEOUT_POLICY_TYPE,
snd_timeout_value);
CORBA::Policy_var rt_timeout_policy =
orb->create_policy(Messaging::RELATIVE_RT_TIMEOUT_POLICY_TYPE,
rt_timeout_value);
CORBA::PolicyList policies;
policies.length(4);
policies[0] = CORBA::Policy::_duplicate(rebind_policy);
policies[1] = CORBA::Policy::_duplicate(con_timeout_policy);
policies[2] = CORBA::Policy::_duplicate(snd_timeout_policy);
policies[3] = CORBA::Policy::_duplicate(rt_timeout_policy);
// Install the policies at the orb level.
CORBA::Object_var obj =
orb->resolve_initial_references("ORBPolicyManager");
CORBA::PolicyManager_var orb_mgr =
CORBA::PolicyManager::_narrow(obj);
orb_mgr->set_policy_overrides(policies, CORBA::SET_OVERRIDE);
Java 下如下配置
org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args, null);
short rebindMode = TRANSPARENT.value;
Any con_timeout_value = orb.create_any();
con_timeout_value.insert_ulonglong(5 * 1000 * 10000); // 5 seconds
Policy con_timeout_policy =
orb.create_policy(RELATIVE_CONN_TIMEOUT_POLICY_TYPE.value,
con_timeout_value);
Any snd_timeout_value = orb.create_any();
snd_timeout_value.insert_ulonglong(5 * 1000 * 10000); // 5 seconds
Policy snd_timeout_policy =
orb.create_policy(RELATIVE_REQ_TIMEOUT_POLICY_TYPE.value,
snd_timeout_value);
Any rt_timeout_value = orb.create_any();
rt_timeout_value.insert_long(15 * 1000 * 10000); // 15 seconds
Policy rt_timeout_policy =
orb.create_policy(RELATIVE_RT_TIMEOUT_POLICY_TYPE.value,
rt_timeout_value);
Any rebindValue = orb.create_any();
RebindModeHelper.insert(rebindValue, rebindMode);
Policy rebind_policy =
orb.create_policy(REBIND_POLICY_TYPE.value, rebindValue);
PolicyManager orbManager =
PolicyManagerHelper.narrow(
orb.resolve_initial_references("ORBPolicyManager"));
// Install the policy at the orb level.
orbManager.set_policy_overrides(
new Policy[] {rebind_policy, con_timeout_policy,
snd_timeout_policy, rt_timeout_policy},
SetOverrideType.SET_OVERRIDE);
[@more@]来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/90000/viewspace-1043222/ ,如需转载,请注明出处,否则将追究法律责任。