Spring集成AMQP
我刚刚开始学习spring集成 我想在队列上接收消息,并并行执行2个步骤: 步骤1->使用bean处理它 步骤2->转换并将其发送到另一个队列。 比如:Spring集成AMQP,spring,spring-integration,spring-integration-dsl,spring-integration-amqp,Spring,Spring Integration,Spring Integration Dsl,Spring Integration Amqp,我刚刚开始学习spring集成 我想在队列上接收消息,并并行执行2个步骤: 步骤1->使用bean处理它 步骤2->转换并将其发送到另一个队列。 比如: return IntegrationFlows.from(Amqp.inboundAdapter(connectionFactory, "queue1") .configureContainer(simpleMessageListenerContainerSpec -> {
return IntegrationFlows.from(Amqp.inboundAdapter(connectionFactory, "queue1")
.configureContainer(simpleMessageListenerContainerSpec -> {
simpleMessageListenerContainerSpec.concurrentConsumers(3);
}))
.log(message -> "SERVICE EVENT QUEUE : Received Message : " + message.getPayload())
.handle(serviceBean, "process")
.<String,String>transform(String::toLowerCase)
.log(message -> "SERVICE EVENT QUEUE : Transformed Message : " + message.getPayload())
.handle(
Amqp.outboundAdapter(rabbitTemplate)
.exchangeName("exchange")
.routingKey("queue2.routing"))
.get();
返回IntegrationFlows.from(Amqp.inboundAdapter(connectionFactory,“queue1”)
.configureContainer(simpleMessageListenerContainerSpec->{
simpleMessageListenerContainerSpec.concurrentConsumers(3);
}))
.log(消息->“服务事件队列:收到的消息:”+message.getPayload())
.handle(serviceBean,“进程”)
.transform(字符串::toLowerCase)
.log(消息->“服务事件队列:转换的消息:”+message.getPayload())
.处理(
Amqp.outboundAdapter(rabbitTemplate)
.exchangeName(“交易所”)
.routingKey(“queue2.routing”))
.get();
我错过了什么?未执行第一个句柄之后的操作。我想我没有正确理解这一部分。
另外,如何并行执行这两个步骤?您应该从理论开始,了解Spring集成中的许多概念和组件 “并行2步”正是一种发布-订阅模式:Spring Integration为其提供了一个实现:。正如您在文档中看到的,要实现并行性,您需要使用
任务执行器配置这样的通道
通过Java DSL,我们为发布-订阅配置提供了一个高级API:
因此,要使您的.handle(serviceBean,“process”)
和.transform(String::toLowerCase)
成为并行的,您需要这样的东西:
return IntegrationFlows.from(Amqp.inboundAdapter(connectionFactory, "queue1")
.configureContainer(simpleMessageListenerContainerSpec -> {
simpleMessageListenerContainerSpec.concurrentConsumers(3);
}))
.log(message -> "SERVICE EVENT QUEUE : Received Message : " + message.getPayload())
.publishSubscribeChannel(Executors.newCachedThreadPool(), s -> s
.subscribe(f -> f
.handle(serviceBean, "process")))
.<String,String>transform(String::toLowerCase)
.log(message -> "SERVICE EVENT QUEUE : Transformed Message : " + message.getPayload())
.handle(
Amqp.outboundAdapter(rabbitTemplate)
.exchangeName("exchange")
.routingKey("queue2.routing"))
.get();
返回IntegrationFlows.from(Amqp.inboundAdapter(connectionFactory,“queue1”)
.configureContainer(simpleMessageListenerContainerSpec->{
simpleMessageListenerContainerSpec.concurrentConsumers(3);
}))
.log(消息->“服务事件队列:收到的消息:”+message.getPayload())
.publishSubscribeChannel(Executors.newCachedThreadPool(),s->s
.订阅(f->f
.handle(serviceBean,“进程”))
.transform(字符串::toLowerCase)
.log(消息->“服务事件队列:转换的消息:”+message.getPayload())
.处理(
Amqp.outboundAdapter(rabbitTemplate)
.exchangeName(“交易所”)
.routingKey(“queue2.routing”))
.get();