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