java我应该设置“从池中获取连接”的超时吗?
在我当前的项目中,它将接收来自上游系统的一些消息,并通过http服务将它们同时上载到另一个存储服务器
由于系统可能会在短时间内从上游系统接收到许多消息,因此我使用apache HttpClient和一个池,并设置:
- 若http客户端在10秒内无法连接到存储服务器,它将抛出异常
- 若http连接在10秒内无法从存储服务器接收响应,它将抛出异常
- 若系统无法在30秒内从池中获取http连接,它将抛出异常李>
但我的朋友不同意第三点。她说,如果新消息无法从池中获得连接,就让它们等待,因为它们最终将获得连接并保存到存储服务器。在这种情况下,不需要例外情况
但是我担心如果我们从上游收到太多的消息,就会有太多线程阻塞等待连接,这可能会导致系统不稳定
你认为第三点是好还是坏?我需要为它设置一个超时吗
# 1 楼答案
这似乎是一个商业决策,而不是编码问题。请求等待很长时间可以吗?如果某个时间到期,存储接口可以抛出异常吗
如果存储服务器以某种方式被阻塞,我假设所有请求(能够获得连接)都在等待10秒,然后抛出。如果队列中有足够的连接,那么这可能会导致持久化操作等待很长时间才能获得连接。似乎应该暂停,但这又是一个商业决定
通常,我会提供一个超时参数(以秒或毫秒为单位),让persist方法等待完成。然后,调用方可以传入
Long.MAX_VALUE
,如果他们愿意,否则他们将得到一个异常。或者使用另一个没有超时参数的方法,该方法通过Long.MAX_VALUE
链接到另一个方法