java - SOA环境下webapp的实时数据管理(远程后端)

标签 java spring web-services asynchronous websocket

我的系统由一个门户网站(基于Spring)和一个远程后端(基于J2EE)组成,后者公开 API 以提供服务。 用户应该能够从 Web 门户开始在云上部署某个 PaaS 服务(此过程由后端管理)并实时查看部署状态。

注意:上述部署只是一个复杂的操作。

为了按照上述方式部署服务,我在后端定义了一个长时间运行的事务,它包括两部分:同步异步 .

第一个公开了一个RESTful WebService,用于启动部署过程。它返回已启动交易的唯一 ID。

String lrtId = myRESTClient.startDeploy(someInfo);

另一部分对于检查进度状态很有用:它必须返回总结部署状态的信息(例如,进行中完成已停止完成百分比时间戳等)。

为了实时获取这些信息,我想到了两种解决方案:

  • 将第二部分公开为另一个 WebService 并通过以下方式调用它 投票;
  • 通过 WebSocket 公开它(并使用其他工具,例如 STOMP)。

请注意,出于安全原因,后端端点必须是私有(private)的,因此用户不能直接调用异步部分(通过脚本):只有 webapp 必须能够与后端通信。 为了克服这个限制,我想通过 Spring Web 定义一个专用的网络资源:它的 Controller 应该隐藏门户和后端之间的通信,检索实时数据并将其提供给另一个网络资源(在本例中为网页)。

下图总结了这个场景:

Scenario

作为这个用例的新手,我想知道有关所提议解决方案的一些建议。

它们是否足够?哪个更好?为了实现它们,需要了解哪些重要信息?有什么问题吗?

最佳答案

恕我直言,轮询会消耗比必要更多的资源(轮询),最好使用 Websocket。

我个人以 JMS 方式使用 websocket:发送 JMS MDB(消息驱动的 bean)(例如,在多次调用我的任何 DAO 时),然后由代理转换(它至少工作在 AMQ 上)在 STOMP over WebSocket Client 中(并使客户端与技术 WebSvc 和 WebSocket 队列 ID 对应)。

基于 WebSocket 的 STOMP 也具有事务性的优势,因此您可以知道当您收到所有 ACK 并且没有获得回滚时计算结束:它在某些情况下避免了更多的 WebService 调用。

关于java - SOA环境下webapp的实时数据管理(远程后端),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25529833/

相关文章:

javascript - 任何对免费互联网时间网络服务的引用

java - Java 8 中的 PriorityBlockingQueue 流乱序

java - 我有什么方法可以覆盖 Java 中的系统属性吗?

java - Spring 集成 JMS 在入站和出站中发布订阅

java - 编写 JPA 存储库 JUnit,其中一个存储库依赖于其他存储库

iPhone - 访问 MySql 服务器?

java - 为什么这段代码打印出两个负数?

java - 需要帮助理解奇怪的数组语法

spring - Spring - SpEL 容易受到攻击吗?

java - 如何通过链接发送参数到java web服务以及如何在java中获取它