我有一个复制的缓存运行在许多也运行 OSB 的 weblogic 节点上。缓存以服务器作为启动类启动。它有一个非常简单的对象缓存,可以通过 boolean 属性“可用”简单地跟踪它们是否正在使用。
我从 OSB 向同一个类发出 java 标注,它使用将对象标记为不可用的处理器在缓存上调用“调用”,然后运行 Thread.sleep(31000)。这是我稍后要添加的一些冗长处理的占位符。
我想要发生的是,如果 invoke() 调用花费的时间太长,进程应该超时并返回或抛出异常。所以我一直在尝试配置 30000 毫秒的请求超时来测试这个。不幸的是,我不知道如何让这个超时发生。
我试过:
将处理器包装在 PriorityProcessor 中并在 invoke() 之前调用 setRequestTimeout(30000)
正在添加 <request-timeout >30000 </request-timeout > 至 <replicated-scheme/ > 缓存配置中的元素
正在添加 <tasktimeout >30000 </tasktimeout > 至 <replicated-scheme/ > 缓存配置中的元素
正在添加 <guardian-timeout >30000 </guardian-timeout > 至 <replicated-scheme/ > 缓存配置中的元素
创建 tangosol-coherence-override.xml 并添加监护人超时 <init-param > 到 <service > 元素的“类型”与缓存配置中的服务“名称”匹配
将 sleep() 调用更改为 Thread.sleep(310000) 只是为了查看是否有任何开箱即用的默认值会在 5 分钟后启动。
这些都不会导致任何类型的超时,处理器只是简单地 hibernate 了我告诉它的时间,然后毫无错误地返回。
有没有人以前做过类似的事情,可以给我一些建议吗?将不胜感激。
谢谢
詹姆斯
最佳答案
好的,在 Tim Middleton 的帮助下,我得到了答案.
基本上复制缓存不支持超时,事实证明这对我的系统来说不是一个合适的选择!
解决方法是:
<distributed-cache > 缓存配置中的方案。<thread-count > 使用数字 > 1 的方案元素(我选择了 10,但这只是您想要支持的并发实例数)。关于java - 甲骨文一致性 : How to set the timeout on an invoke call in a replicated cache?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10167918/