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()。这样一来,它们将一个接一个地被调用,但并行且它们各自的流程。