我有一个用例,我需要一个序列在它继续之前等待一段时间。基本上它是一个“Thread.Sleep(x)”,但这意味着线程不可用于线程池。这可能会对高负载系统产生影响。所以我有两个问题:
1)实现此用例的最佳方法是什么?
2)使用Thread.Sleep对WSO有多大的负担?
也欢迎使用替代解决方案,例如使用主题和内容:)
希望你们能帮忙!
回答回复中的问题: 我们正在向外部系统和离线数据存储(ODS; WSO2的DSS组件)发送请求。外部系统先行,但当它在一秒钟内没有返回时,我们希望ODS回应请求。
替代路径:
- ODS处于离线状态,在这种情况下,系统必须等待外部系统更长时间;
- 外部系统在一段时间后返回,虽然ODS结果已发送给请求者,但我们仍希望外部系统的响应更新我们的ODS。
我们目前正在调查克隆和聚合器。
答案 0 :(得分:0)
当您说Thread.sleep()
时,我想到的第一件事就是使用Class Mediator。这将是编写自定义逻辑和添加睡眠的简单方法。
“Writing your own Custom Mediation in Java”的示例将帮助您了解编写类介体的步骤。
您需要将包含自定义中介类的Jar复制到repository/components/lib/
在中介逻辑中使用线程休眠时,请求将在指定的时间段内挂起。
这可能会影响您的表现。但是你应该能够tune the parameters满足你的需求。
这完全取决于您的要求。