Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring集成AMQP_Spring_Spring Integration_Spring Integration Dsl_Spring Integration Amqp - Fatal编程技术网

Spring集成AMQP

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 -> {

我刚刚开始学习spring集成 我想在队列上接收消息,并并行执行2个步骤: 步骤1->使用bean处理它 步骤2->转换并将其发送到另一个队列。 比如:

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();