@ReleaseStrategy - Spring 集成 - 自定义实现
@ReleaseStrategy - Spring Integration - Custom implementation
如果有办法用 MessageGroup 定义 @ReleaseStrategy 并将其与 @Aggregator 关联,请告诉我。
我有如下定义的 POJO,但不确定如何将 @Aggregator 关联到它
public class FooReleaseStrategy {
@ReleaseStrategy
public boolean canRelease(MessageGroup group) {
return group.isComplete();
}
}
我有 @Aggregator 和 @CorrelationStratgy 定义的配置部分。
@Aggregator(inputChannel="sftpChannel" outputChannel="aggregateChannel")
public List<Message<?>> aggregateFiles(List<Message<?>> messages) {
return messages;
}
@CorrelationStrategy 基于文件名。
如果有人可以阐明 @ReleaseStrategy 与示例的关联,那将非常有帮助。
根据评论,我计划创建一个聚合器工厂 bean 以查看是否适用于我的用例
@Bean
@ServiceActivator(inputChannel = "sftpChannel")
public FactoryBean<MessageHandler> aggregatorFactoryBean( ) {
AggregatorFactoryBean aggregatorBean = new AggregatorFactoryBean();
aggregatorBean.setProcessorBean(new CustomAggregator());
aggregatorBean.setMethodName("aggregate");
aggregatorBean.setMessageStore(new SimpleMessageStore());
aggregatorBean.setReleaseStrategy(messageGroup -> {
return messageGroup.isComplete();
});
aggregatorBean.setOutputChannel(aggregatorFileChannel());
aggregatorBean.setExpireGroupsUponTimeout(true);
aggregatorBean.setGroupTimeoutExpression(new ValueExpression<>(1000L));
aggregatorBean.setSendPartialResultOnExpiry(false);
aggregatorBean.setExpireGroupsUponCompletion(true);
return aggregatorBean;
}
如果您想使用 @Aggregator
、@ReleaseStrategy
和 @CorrelationStrategy
,请考虑将 AggregatorFactoryBean
配置为 @Bean
并应用 [= inputChannel
和 outputChannel
.
的 15=] 注释
有关详细信息,请参阅文档:https://docs.spring.io/spring-integration/docs/5.4.0-M2/reference/html/message-routing.html#aggregator-annotations
当使用那种配置风格时,@Aggregator
、@CorrelationStrategy
和 @ReleasStrategy
通常在同一个 bean 中。
但是,您可以定义一个 ReleaseStrategyFactoryBean
bean,它将根据您的 POJO 方法提供 ReleaseStrategy
的实现。
setTarget(myRSBean);
它将找到注释。
如果有办法用 MessageGroup 定义 @ReleaseStrategy 并将其与 @Aggregator 关联,请告诉我。
我有如下定义的 POJO,但不确定如何将 @Aggregator 关联到它
public class FooReleaseStrategy {
@ReleaseStrategy
public boolean canRelease(MessageGroup group) {
return group.isComplete();
}
}
我有 @Aggregator 和 @CorrelationStratgy 定义的配置部分。
@Aggregator(inputChannel="sftpChannel" outputChannel="aggregateChannel")
public List<Message<?>> aggregateFiles(List<Message<?>> messages) {
return messages;
}
@CorrelationStrategy 基于文件名。
如果有人可以阐明 @ReleaseStrategy 与示例的关联,那将非常有帮助。
根据评论,我计划创建一个聚合器工厂 bean 以查看是否适用于我的用例
@Bean
@ServiceActivator(inputChannel = "sftpChannel")
public FactoryBean<MessageHandler> aggregatorFactoryBean( ) {
AggregatorFactoryBean aggregatorBean = new AggregatorFactoryBean();
aggregatorBean.setProcessorBean(new CustomAggregator());
aggregatorBean.setMethodName("aggregate");
aggregatorBean.setMessageStore(new SimpleMessageStore());
aggregatorBean.setReleaseStrategy(messageGroup -> {
return messageGroup.isComplete();
});
aggregatorBean.setOutputChannel(aggregatorFileChannel());
aggregatorBean.setExpireGroupsUponTimeout(true);
aggregatorBean.setGroupTimeoutExpression(new ValueExpression<>(1000L));
aggregatorBean.setSendPartialResultOnExpiry(false);
aggregatorBean.setExpireGroupsUponCompletion(true);
return aggregatorBean;
}
如果您想使用 @Aggregator
、@ReleaseStrategy
和 @CorrelationStrategy
,请考虑将 AggregatorFactoryBean
配置为 @Bean
并应用 [= inputChannel
和 outputChannel
.
有关详细信息,请参阅文档:https://docs.spring.io/spring-integration/docs/5.4.0-M2/reference/html/message-routing.html#aggregator-annotations
当使用那种配置风格时,@Aggregator
、@CorrelationStrategy
和 @ReleasStrategy
通常在同一个 bean 中。
但是,您可以定义一个 ReleaseStrategyFactoryBean
bean,它将根据您的 POJO 方法提供 ReleaseStrategy
的实现。
setTarget(myRSBean);
它将找到注释。