对客户端隐藏Spring消息传递基础结构



我正在开发一个使用Spring进行消息传递和集成的服务。该服务具有客户端可以用来向该服务发送控制信息的入站消息通道和服务可以用来向感兴趣的客户端发送事件信息的出站消息通道。

我希望在客户端位于不同地址空间并使用消息传递技术(例如zeromq或AMQP(与服务进行通信的场景中,以及在客户端与服务位于相同地址空间并利用基本POJO调用与服务进行通讯的场景中部署服务。

在后一种情况下——客户端和服务位于同一地址空间——我很清楚如何使用MessagingGateway之类的东西来隐藏从客户端到服务的调用的消息传递基础设施。然而,我并不清楚如何向希望从服务异步接收事件信息的客户端隐藏消息传递基础结构。

使用Spring Integration进行此操作的首选方式是什么?

ZeroMQ没有可作为消息代理处理的持久存储。从技术上讲,我们没有任何中间人可以依靠。只要有一方通信,我们就会丢失数据。这是我对ZeroMQ活页夹的五个手指。

使用纯Spring Integration,当您仍然希望使用ZeroMQ通道适配器作为应用程序之间的契约,以及向目标用户隐藏消息传递基础结构时,您确实可以使用@MessagingGateway进行发送。

对于异步接收(也称为订阅(,我建议研究集成流上的ReactorFlux支持。其中一种选择是使用IntegrationFlowDefinition.toReactivePublisher()。另一种是使用CCD_ 4。然后,您只需使用所有这些Reactor操作程序来为最终用户提供高级API,以便订阅此流并消费。

请参阅文档中的更多信息:https://docs.spring.io/spring-integration/docs/current/reference/html/reactive-streams.html#reactive-流

最后,当然,您可以使用Spring Cloud Stream及其功能支持,让最终用户只专注于某个微服务的业务逻辑。对你来说,唯一的问题是没有ZeroMQ绑定器,而且可能不会。

最新更新