Ser*_*nov 3 spring-integration
我有一个 Spring 集成应用程序,其中使用IntegrationFlow构建器模式引导 Java DSL 配置。我需要使用一个.handle()方法,并且我不想像大多数网络示例那样在那里有 lambda 函数。相反,我想将其委托给一个单独的 bean(服务)。我该如何实施?
我发现下面的一个示例使用了内部类,但我需要使用依赖于其他 bean 的自动装配 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();
}
Run Code Online (Sandbox Code Playgroud)
请寻找自 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);
}
}
Run Code Online (Sandbox Code Playgroud)
https://spring.io/blog/2015/04/15/spring-integration-java-dsl-1-1-m1-is-available
该方法还有另一个重载版本:
public B handle(Object service, String methodName) {
Run Code Online (Sandbox Code Playgroud)
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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5876 次 |
| 最近记录: |