我有一个自定义接收器模块,只有当消息数量达到计数或者它们在某个时间段内在通道中时,我才会使用来自input
的消息。简而言之,我想大力推动。
我尝试在消费并将消息存储到SimpleMessageStore
支持的聚合频道后汇总消息数量,并MessageGroupStoreReaper
检查频道中的消息。
我对这种方法不满意,因为我正在使用消息并将它们存储在内存存储中,我也知道JDBC存储,但我不想将此方法作为消息Spring XD中的频道由redis / mq支持我希望根据我的条件从input
频道使用。
我当前的bean配置如下所示:
<int:aggregator id="messageAggregator" ref="messageAggregatorBean"
method="aggregate" input-channel="input" output-channel="aggregatorOutputChannel"
release-strategy="messageReleaseStrategyBean" release-strategy-method="canRelease"
send-partial-result-on-expiry="true" message-store="resultMessageStore">
</int:aggregator>
<int:service-activator id="contributionIndexerService"
ref="contributionIndexerBean" method="bulkIndex" input-channel="aggregatorOutChannel" />
<bean id="resultMessageStore"
class="org.springframework.integration.store.SimpleMessageStore" />
<bean id="resultMessageStoreReaper"
class="org.springframework.integration.store.MessageGroupStoreReaper">
<property name="messageGroupStore" ref="resultMessageStore" />
<property name="timeout" value="60000" />
</bean>
<task:scheduled-tasks>
<task:scheduled ref="resultMessageStoreReaper" method="run"
fixed-rate="10000" />
</task:scheduled-tasks>
有任何想法或意见吗?
提前致谢。
答案 0 :(得分:0)
我不确定您是否能够确定Broker队列中的消息数(Redis / RabbitMQ,甚至只是普通的JMS),而不是确定它们在那里的数量。
你绝对应该消费来做这样的逻辑。
是的,我认为Aggregator
可以帮到你。但是对:那必须是Persistent Message Store。
案例
如果他们从某个时间开始进入频道
Aggregator
建议使用group-timeout
选项来发布那些尚未达到releaseStrategy
条件的群组,但无论如何你想要发出它们过了一段时间:http://docs.spring.io/spring-integration/reference/html/messaging-routing-chapter.html#agg-and-group-to