gpt4 book ai didi

spring-integration - Spring集成Java DSL服务执行器(.handle)应该使用bean

转载 作者:行者123 更新时间:2023-12-03 23:41:09 25 4
gpt4 key购买 nike

我有一个 spring 集成应用程序,它使用 IntegrationFlow 构建器模式引导 Java DSL 配置。我需要使用 .handle() 方法,我不想像大多数网络示例那样在那里使用 lambda 函数。相反,我想将其委托(delegate)给一个单独的 bean(服务)。我该如何实现?

我发现下面的一个示例使用了内部类,但我需要使用依赖于其他 bean 的 Autowiring 的 Spring bean,因此内部类不适合我。对我来说最好的方法是什么?

@Bean
public IntegrationFlow icedFlow() {
return IntegrationFlows.from(MessageChannels.queue("iced", 10))
.handle(new GenericHandler<OrderItem>() {

@Override
public Object handle(OrderItem payload, Map<String, Object> headers) {
Uninterruptibles.sleepUninterruptibly(1, TimeUnit.SECONDS);
System.out.println(Thread.currentThread().getName()
+ " prepared cold drink #" + coldDrinkCounter.incrementAndGet()
+ " for order #" + payload.getOrderNumber() + ": " + payload);
return payload;
}

})
.channel("output")
.get();
}

最佳答案

拜托,找一个自 1.1 版以来的新 API:

@Configuration
@EnableIntegration
@ComponentScan
public class MyConfiguration {

@Autowired
private GreetingService greetingService;

@Bean
public IntegrationFlow greetingFlow() {
return IntegrationFlows.from("greetingChannel")
.handle(this.greetingService)
.get();
}

}

@Component
public class GreetingService {

public void greeting(String payload) {
System.out.println("Hello " + payload);
}
}

https://spring.io/blog/2015/04/15/spring-integration-java-dsl-1-1-m1-is-available

该方法还有另一个重载版本:

public B handle(Object service, String methodName) {

有关详细信息,请参阅 IntegrationFlowDefinition JavaDocs。

编辑

.handle(this.greetingService::greeting) 样式示例:

    @Bean
public IntegrationFlow lambdasFlow() {
return flow -> flow
.handle(this::divideForHalf)
.handle(this::logMessage);
}

public Integer divideForHalf(Integer payload, Map<String, Object> headers) {
return payload / 2;
}

public void logMessage(Message<?> message) {
System.out.println("My Message: " + message);
}

关于spring-integration - Spring集成Java DSL服务执行器(.handle)应该使用bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34405400/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com