grpc 使用有状态数据重新连接到其他服务器的最佳方式是什么?

what is best way that grpc reconnect to other server with stateful data?

我有 2 个服务器正在使用 grpc。

我的详细服务器逻辑描述如下。

服务器结构(---->是grpc连接)

Client ----> ServerA ----> ServerB

数据流如下。

  1. 客户端发送流数据。 ex(DEF 数据发送)
  2. ServerA存储数据。 (ABC是之前的数据,DEF是新的数据,所以total Data是ABCDEF)
  3. 服务器A从客户端(DEF)向服务器B发送最新数据

在这种情况下,当某些事件发生时,我需要断开与 ServerB 的连接并连接到另一台服务器。

例如,

事件发生时的示意图如下

Client ----> ServerA --X(Stream Stop)--> ServerB
                      
               ㅣ--(reconnect to other server using grpc)--> ServerB'

我想按顺序发送旧数据流。

even server is chaining ServerA 从客户端接收数据(EX 数据是 GHI)

所以,当ServerA的连接变更完成后。

数据流如下

  1. 服务器 A 将之前的总数据发送给服务器 B' (ABCDEF)
  2. 服务器 A 正在接收最新数据。当服务器更改未完成时,可能会收到此数据 (GHI)
  3. 最新数据(GHI)被发送到ServerB'

我希望此流程图能够正常工作。

你能告诉我什么好主意吗??

谢谢。

我找到答案了。答案是反应性 X.

例如,

ReplaySubject subject = ReplaySubject.create();
subject.subscribe(..anysub function);

...
void pushData(int data) {
    if(server change) {
        subject data supress
        subject clear // caused when replay subscribe clear
        ReplaySubject newSubject = ReplaySubject.create();        
        newSubject.onNext(suppress data);
        newSubject.onNext(data);
        subject = newSubject;
    } else {
        subject.onNext(data);
    }
    //when server change event trigger

}

这是我最好的方法。