java - 甲骨文一致性 : How to set the timeout on an invoke call in a replicated cache?

标签 java oracle caching timeout weblogic

我有一个复制的缓存运行在许多也运行 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 的帮助下,我得到了答案.

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

解决方法是:

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

关于java - 甲骨文一致性 : How to set the timeout on an invoke call in a replicated cache?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10167918/

相关文章:

c# - Entity Framework 生成 short 而不是 int

php - 使用可变项创建一个两次通过的 PHP 缓存系统

jsp - 是否可以缓存 JSP 字节码以避免使用 Tomcat 重新编译?

java - 为不同屏幕设计 xml 布局 : Android

oracle - 如何在窗口中安排 Oracle DBMS 作业

oracle - 如何使用 RefCursor 返回类型测试 Oracle 存储过程?

asp.net - 更新面板实现?

java - Spring Security、无状态 REST 服务和 CSRF

java - restTemplate 删除与正文

java - 从 1.4.2 升级后,Spring Boot 1.4.3+ 中的 LoadTimeWeaving 不起作用