我有一个接收数据包的应用程序,需要解析,转换和存储这些数据。
为了提高吞吐量,我尝试将各种步骤放入不同的线程中,让数据流动。通过他们之间的BlockingQueue
。
类似的东西:
(A) - > (B) - > (C) - > ...
到目前为止,我让A,B,C实现Runnable
并手动创建它们,在构造函数中提供输入/输出队列。
问题是,我需要访问A,B,C中的Spring服务。
所以我用@Component
和@Scope("prototype")
注释了A,B,C。我将它们注入另一个服务,而不是在它们之间创建和设置队列,调用thread.start(..)
是否有更好,更像春天的'这样做的方式?而且,我如何控制组件的销毁,理想情况下让它们完成当前的输入队列?
编辑1: 我遵循了Edwin Dalorzos的建议,并使用了spring集成,试图将每个消息端点的一个线程的想法归档。我让多线程工作,但不能限制每个端点的线程数。 在https://github.com/taseroth/spring-integration-multithreaded
创建了一个小演示