我有一个消息驱动的 Bean,它通过以下方式提供消息:
- 它从传入消息中获取数据。
- 使用步骤 1 中的数据通过 HTTP 调用外部服务(字面意思是使用 HttpURLConnection 发送 GET 请求)。无论调用需要多长时间 - 消息都不能被丢弃。
- 使用步骤 2 的结果来保存数据(使用实体 bean)。
传入消息的比率为:
一、大部分时间低:一天一个个/几十个量级。
二.有时很高:几分钟内数百个。
问题:
步骤 (2) 中的服务相对较慢(每个请求 20 秒,并且随着工作负载的增加而降级),处理情况 II 的最佳方法是什么?
我尝试过的:
- 让MDB等待直到服务执行,无论需要多长时间。这往往会因超时而回滚 MDB 事务并重新传递消息,从而增加工作量并使事情变得更糟。
- 为 HttpURLConnection 设置超时可以在 MDB onMessage() 方法的完成时间方面提供一些保证,但留下一个悬而未决的问题:如何处理“超时”消息。