7

我在许多也运行 OSB 的 weblogic 节点上运行了一个复制缓存。缓存作为启动类与服务器一起启动。它有一个非常简单的对象缓存,可以通过布尔属性“可用”简单地跟踪它们是否正在使用中。

从 OSB 我正在对同一个类进行 java 标注,该类使用将对象标记为不可用的处理器在缓存上调用“invoke”,然后运行 ​​Thread.sleep(31000)。这是我想稍后添加的一些冗长处理的占位符。

我想要发生的是,如果调用()调用时间过长,该过程应该超时并返回或抛出异常。所以我一直在尝试配置一个 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 并将 Guardian-timeout <init-param> 添加到<service“类型”与缓存配置中的服务“名称”匹配的 > 元素

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

这些都不会导致任何类型的超时,无论我告诉它多长时间,处理器都会简单地休眠,然后返回而没有错误。

有没有人做过类似的事情,可以给我一些建议?将不胜感激。

谢谢

詹姆士

4

1 回答 1

2

好的,在Tim Middleton的帮助下,我有了答案。

基本上复制的缓存不支持超时,事实证明它不是我的系统的合适选择!

解决方案是:

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