有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java我应该设置“从池中获取连接”的超时吗?

在我当前的项目中,它将接收来自上游系统的一些消息,并通过http服务将它们同时上载到另一个存储服务器

由于系统可能会在短时间内从上游系统接收到许多消息,因此我使用apache HttpClient和一个池,并设置:

  1. 若http客户端在10秒内无法连接到存储服务器,它将抛出异常
  2. 若http连接在10秒内无法从存储服务器接收响应,它将抛出异常
  3. 若系统无法在30秒内从池中获取http连接,它将抛出异常

但我的朋友不同意第三点。她说,如果新消息无法从池中获得连接,就让它们等待,因为它们最终将获得连接并保存到存储服务器。在这种情况下,不需要例外情况

但是我担心如果我们从上游收到太多的消息,就会有太多线程阻塞等待连接,这可能会导致系统不稳定

你认为第三点是好还是坏?我需要为它设置一个超时吗


共 (1) 个答案

  1. # 1 楼答案

    If system can't get http connection from pool in 30 seconds, it will throw exception.

    Do you think point 3 is good or bad? Do I need to set a timeout for it?

    这似乎是一个商业决策,而不是编码问题。请求等待很长时间可以吗?如果某个时间到期,存储接口可以抛出异常吗

    如果存储服务器以某种方式被阻塞,我假设所有请求(能够获得连接)都在等待10秒,然后抛出。如果队列中有足够的连接,那么这可能会导致持久化操作等待很长时间才能获得连接。似乎应该暂停,但这又是一个商业决定

    通常,我会提供一个超时参数(以秒或毫秒为单位),让persist方法等待完成。然后,调用方可以传入Long.MAX_VALUE,如果他们愿意,否则他们将得到一个异常。或者使用另一个没有超时参数的方法,该方法通过Long.MAX_VALUE链接到另一个方法