簡體   English   中英

緩沖Spring集成的發布-訂閱通道

[英]Buffering Spring integration publish-subscribe channel

我有一個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上的directChannel將以最佳速度處理消息,而不會在其他地方造成延遲。

分發的另一種方法是publish-subscribe-channeltask-executor器-所有訂閱者都將在其一個線程中執行。

但是,是的,無論如何您都應該記住,您總是會在Kafka和該文件生產者之間滯后。

您不需要任何DummyTransformer ,BTW。 關於此事,有一個特殊的<bridge>組件: http : //docs.spring.io/spring-integration/reference/html/messaging-channels-section.html#bridge

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM