嵌套 RPC 调用上的 RpcDispatcher 超时



我目前正在WildFly中创建一个集群应用程序,该应用程序通过自定义JGROUPS通道进行通信。应用程序向协调器发送 RPC 调用,以检查是否可以进行所需的更改。

协调器再次向所有集群成员发送 RPC 调用以同步其状态(告诉他们将进行更改(。协调器无法处理第二个调用的响应,因为第一个调用仍在处理中("每个发送方最多一个线程"逻辑(,因此整个事情因超时而失败。类似于线程死锁。

如何克服这个限制?就我而言,只有两个嵌套调用,该解决方案也应该适用于更多的嵌套调用(我无法确保将来可能会发生更多的嵌套调用(

--

我正在使用 RPC 调用,因为它们是同步的,因此我可以确保所有节点始终具有相同的状态。

  1. 节点 A 向协调器发送"更改请求">
  2. 协调器将"更改完成"发送到所有节点
  3. 节点 A 将向所有节点发送"需要先前更改的内容">
  4. 如果没有同步,节点 B 可能会在 #2 之前收到 #3,对吗?据我所知,只有每个发件人的消息是有序的,但除了使用 SEQUENCE 协议之外,所有发件人都没有总顺序,该协议将始终将消息转发给为真正发件人发送消息的协调器。

一个可能的解决方案是基于asyncDispatching=true实现自己的RpcDispatcher,它是请求处理程序方法handle(Message req, Response response)。自己的实现只是将 respone 对象添加到方法调用的args

这样,您就不会阻止发送方的 JGROUPS 线程。

最新更新