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