我有一个 spring 集成应用程序,它有一个带有两个订阅者的 pub-sub 通道 - 一个将消息发布到 Kafka,另一个将消息写入文件。问题是将消息写入文件的服务激活器无法跟上向 Kafka 生成的其他服务激活器的速度。这会导致整体消息处理速度变慢。为了克服这个问题,我在 pub-sub 通道和写入文件的服务激活器之间添加了一个额外的层。转换器,除了消费消息并将消息放入文件编写器消费的直接通道之外什么都不做。这在我的情况下提高了性能,但我想知道这是否是正确的方法?示例配置如下:
<int:publish-subscribe-channel id="pschannel"/>
<int:service-activator id="kafkaSA" ref="producer" input- channel="pschannel" method="publish"/>
<int:transformer input-channel="pschannel" ref="dummytransformer" method="doNothing" output-channel="directChannel"/>
<bean id="dummytransformer" class="org.test.DummyTransformer"/>
<int:channel id="directChannel">
<int:queue capacity="200000" />
<int:channel>
<int:service-activator id="fileSA" ref="filewriter" input-channel="directChannel" method="publish" >
<int:poller max-messages-per-poll="10000" fixed-delay="100" />
</int:service-activator>
首先,它不是直接的,因为它实际上是<queue>
由您的配置决定的。
嗯,这确实是一种方法,您绝对不会阻止您的 Kafka 生产者(第一个订阅者)。
您应该考虑队列和轮询器的无限配置:
<int:channel id="directChannel">
<int:queue/>
<int:channel>
...
<int:poller fixed-delay="100" />
这样,消费者directChannel
将以最佳速度处理消息,而不会在其他地方造成延迟。
另一种分配方式是task-executor
for publish-subscribe-channel
- 所有订阅者都将在他们的一个线程中执行。
但是,是的,无论如何您都应该记住,Kafka 和那个文件制作者之间总是会有延迟。
你不需要任何DummyTransformer
,顺便说一句。<bridge>
关于此事有一个特殊的组成部分:http : //docs.spring.io/spring-integration/reference/html/messaging-channels-section.html#bridge
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句