我有一个要求
- 读取数据库表
- 处理数据(dataCleanser)
为了增加吞吐量,我实现了每 5 分钟(其中 10 分钟)唤醒一次的 EJB 计时器(非持久性)并执行上述工作。
问题是“背压”,dataCleanser 有时可能需要 12 分钟(进行外部 API 调用),当这种情况发生时,Websphere 会报告挂起的线程。
在这些情况下,我想以编程方式减少计时器的数量(比如从 10 个减少到 5 个)。只有当计时器返回报告其成功执行或异常或超时的状态时,我才能这样做
这样我就可以控制背压。
is there anyway to do that in Websphere 8?
用另一种方式问问题
- can the EJB timers(with transaction_not_supported) invoke another EJB that have transaction timeouts?
- can those timeouts be caught in the calling timer code?
如果这是不可能的,那么使用带有睡眠的普通旧无限循环然后调用和 EJB(依次调用 dataCleanser)和事务超时有什么缺点?
不利的一面是,我知道这变成了单线程,而且我不会像使用计时器那样进行 10 次并行执行。