首页 文章

缓冲Spring集成发布 - 订阅 Channels

提问于
浏览
0

我有一个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>

1 回答

  • 1

    首先它不是直接的,因为你的配置真的是 <queue> .

    嗯,这真的是一种方法,你肯定不会阻止你的Kafka制作人(第一个订阅者) .

    您应该考虑队列和轮询器的无限配置:

    <int:channel id="directChannel">
        <int:queue/>
    <int:channel>
    ...
    <int:poller fixed-delay="100" />
    

    这样, directChannel 上的消费者将以最佳速度处理消息,而不会在其他地方造成滞后 .

    另一种分发方式是 task-executor task-executor - 所有订阅者都将在他们的一个帖子中执行 .

    但是,是的,你应该记住任何一种方式,你总是会在Kafka和文件制作人之间有一个滞后 .

    你不需要任何 DummyTransformer ,BTW . 关于此事有一个特殊的 <bridge> 组件:http://docs.spring.io/spring-integration/reference/html/messaging-channels-section.html#bridge

相关问题