微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

对客户端隐藏 Spring 消息传递基础设施

如何解决对客户端隐藏 Spring 消息传递基础设施

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

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

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

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

解决方法

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

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

对于异步接收(也称为订阅),我建议查看对集成流程的 Reactor Flux 支持。一种选择是使用 IntegrationFlowDefinition.toReactivePublisher()。另一种是使用Flux.from(FluxMessageChannel)。然后,您只需使用所有这些 Reactor 运算符为最终用户提供高级 API 来订阅此流并使用。

在文档中查看更多信息:https://docs.spring.io/spring-integration/docs/current/reference/html/reactive-streams.html#reactive-streams

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?