Oracle Coherence:如何在复制缓存中的调用调用上设置超时?

Jam*_*mes 7 java oracle caching timeout weblogic

我有一个复制的缓存,运行在许多也在运行OSB的weblogic节点上.缓存以服务器作为启动类启动.它有一个非常简单的对象缓存,可以使用布尔属性"available"来跟踪它们是否正在使用.

从OSB我将java调用发送到同一个类,它在缓存上使用将对象标记为不可用的处理器调用"invoke",然后运行Thread.sleep(31000).这是我想要稍后添加的一些冗长处理的占位符.

我想要发生的是,如果invoke()调用花费的时间太长,则进程应该超时并返回或抛出异常.所以我一直在尝试配置一个30000毫秒的请求超时来测试它.不幸的是我无法弄清楚如何使这种超时发生.

我试过了:

  • 将处理器包装在PriorityProcessor中并在调用()之前调用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并将"guardian-timeout"添加<init-param<service>"type"的元素与缓存配置中的服务"name"匹配

  • 更改sleep()调用Thread.sleep(310000)只是为了查看是否有任何开箱即用的默认值将在5分钟后启动.

这些都没有导致任何类型的超时,处理器只是睡了很久我告诉它然后返回没有错误.

有没有人以前做过类似的事情,可以给我一些建议吗?非常感谢.

谢谢

詹姆士

Jam*_*mes 2

好的,在蒂姆·米德尔顿的帮助下我有了答案。

基本上,复制缓存不支持超时,而且事实证明它对于我的系统来说并不是一个合适的选择!

解决办法是:

  1. 切换到<distributed-cache缓存配置中的 > 方案。
  2. 将 > 元素添加<thread-count到方案中,其数字 > 1(我选择了 10,但它只是您想要支持的并发实例数)。
  3. 使用PriorityProcessor包装 EntryProcessor 并在调用 invoke() 之前使用 setRequestTimeoutMillis() 设置超时。(请注意,这是我尝试的第一件事,但事实证明缓存类型错误)