Spring 在 DSL 中不回复的集成网关
Spring Integration Gateway Without Reply in DSL
我的问题与这个Whosebug Question非常相似,因为我想发送到 JMS,然后继续我的集成流程。
响应完全异步,因此在单独的 Jms.messageDrivenChannelAdapter
上处理。所以,我基本上想“解雇后忘记”。
我的代码是这样的(Spring 5.3.14);
.enrichHeaders(
h -> h.headerFunction("JMSCorrelationID", m -> m.getHeaders().get(MessageHeaders.ID))
)
.handle(
Jms
.outboundGateway(connectionFactory)
.requestDestination(queueName)
)
.handle(p -> System.err.println("Do something else with ... " + p))
.get();
我明白了;
org.springframework.integration.MessageTimeoutException: failed to receive JMS response within timeout of: 5000ms,
对我的引用答案暗示我需要听一个虚拟队列,我不想这样做。那么我需要在上面的代码中修复什么?
编辑;使用以下解决方案的最终代码 测试了with/without“queue PUT inhibit”以导致异常。
.publishSubscribeChannel(s -> s
.subscribe(f -> f.handle(
Jms
.outboundAdapter(connectionFactory)
.destination(queueName)
))
.subscribe(f -> f.handle(
p -> System.err.println("Do something else with ... " + p)
))
)
您需要改用 Jms.outboundChannelAdapter()
。与下一个 handle()
一起将它们作为两个订阅者 sub-flows 包装成 publishSubscribeChannel()
。这样一来,它们将一个接一个地被调用,但并行且它们各自的流程。
我的问题与这个Whosebug Question非常相似,因为我想发送到 JMS,然后继续我的集成流程。
响应完全异步,因此在单独的 Jms.messageDrivenChannelAdapter
上处理。所以,我基本上想“解雇后忘记”。
我的代码是这样的(Spring 5.3.14);
.enrichHeaders(
h -> h.headerFunction("JMSCorrelationID", m -> m.getHeaders().get(MessageHeaders.ID))
)
.handle(
Jms
.outboundGateway(connectionFactory)
.requestDestination(queueName)
)
.handle(p -> System.err.println("Do something else with ... " + p))
.get();
我明白了;
org.springframework.integration.MessageTimeoutException: failed to receive JMS response within timeout of: 5000ms,
对我的引用答案暗示我需要听一个虚拟队列,我不想这样做。那么我需要在上面的代码中修复什么?
编辑;使用以下解决方案的最终代码 测试了with/without“queue PUT inhibit”以导致异常。
.publishSubscribeChannel(s -> s
.subscribe(f -> f.handle(
Jms
.outboundAdapter(connectionFactory)
.destination(queueName)
))
.subscribe(f -> f.handle(
p -> System.err.println("Do something else with ... " + p)
))
)
您需要改用 Jms.outboundChannelAdapter()
。与下一个 handle()
一起将它们作为两个订阅者 sub-flows 包装成 publishSubscribeChannel()
。这样一来,它们将一个接一个地被调用,但并行且它们各自的流程。