我的情况是,我将接收多个请求,处理来自请求的数据,然后使用 POST 将数据转发到另一台服务器。可能有数千个请求同时发送到服务器。我以前从来没有处理过这种卷,所以我不得不对如何继续进行一些(受过教育的)猜测。
我正在使用 Jave EE 应用程序服务器,并且正在使用 org.apache.client.HttpClient 作为 POST 请求转发数据。每包数据比较小(每包50-100kb)这是我目前的策略:
当一个请求进来时,我立即生成一个新线程来处理和发送数据(每个单独的请求一个线程)。我正在使用 java.util.concurrent.ThreadPoolExecutor 和 java.util.concurrent.ArrayBlockingQueue 来控制线程和排队。如果线程池中的所有线程都在使用,则传入数据排队。如果队列已满,则删除数据(我完全可以接受)。我正在关注有关使用 org.apache.client.HttpClient 进行线程化的文档,因此所有线程都共享 HttpClient 对象,并且在每个请求上只创建 HttpPost 对象。
我知道,在我自己进行基准测试之前,我不会完全了解我的实现的含义,但我想知道在走那么远之前是否有任何危险信号。为了弄清楚我的实际问题是什么:
我的方法中有任何危险信号吗?(我做错的任何明显的事情都可能导致严重的性能损失,因为我对此相对较新)
知道会有数千个数据包,给每个数据包自己的线程是不明智的吗?(但是线程数将被线程池限制)
将传入请求排队并在每个线程发送多个数据包而不是每个线程发送一个数据包会更聪明吗?