3

我想知道在 spring 集成中是否可以在流中包含一个外部通道。所以我有http入站网关流,在它被触发后,它应该通过udp端口​​与其他进程通信。我最关心的是如何从这个流中的 udp 端口​​接收消息。

@Bean
public IntegrationFlow httpInboundGatewayFlow() {
    return IntegrationFlows.from(Http.inboundGateway(httpInboundPath))
             .transform(niUdpRequestTransformer())
             /*sending a message to udp port*/
             .publishSubscribeChannel(runnable -> runnable
                  .subscribe(flow -> flow                      
                      .handle(udpOutboundChannel())))
            /*wait for input from udpResponse channel here (HOW TO?)*/
            /*process udpInboundFlow message*/
            .handle((payload, headers) -> successNetworkResponse())))
            .transform(new ObjectToJsonTransformer())
            .handle((payload, headers) -> payload)
            .get();
}

@Bean
public IntegrationFlow udpInboundFlow() {
    return IntegrationFlows.from(udpInboundChannel())
            .transform(niUdpResponseTransformer())
            .channel("udpResponse")
            .get();
}

使用 udpInboundFlow 应该作为某种轮询器来实现,它检查是否有正确的消息到达。

谢谢你的帮助。

4

1 回答 1

2

您所说的称为相关性。而且我以某种方式相信您希望对该 UDP 请求得到某种答复。

所以,你需要的确实是这样的:

.channel("udpResponse")
.aggregate(...)

correlationKey您应该为请求消息找出一些并确保来自 UDP 的回复具有相同的密钥。聚合器应配置为.releaseStrategy(group -> group.size() == 2).

其中第一条消息将是请求,而第二条消息确实是来自外部的结果udpResponse

有关详细信息,请参阅参考手册

于 2017-10-13T13:04:05.650 回答