grpc 使用有状态数据重新连接到其他服务器的最佳方式是什么?
what is best way that grpc reconnect to other server with stateful data?
我有 2 个服务器正在使用 grpc。
我的详细服务器逻辑描述如下。
服务器结构(---->是grpc连接)
Client ----> ServerA ----> ServerB
数据流如下。
- 客户端发送流数据。 ex(DEF 数据发送)
- ServerA存储数据。 (ABC是之前的数据,DEF是新的数据,所以total Data是ABCDEF)
- 服务器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的连接变更完成后。
数据流如下
- 服务器 A 将之前的总数据发送给服务器 B' (ABCDEF)
- 服务器 A 正在接收最新数据。当服务器更改未完成时,可能会收到此数据 (GHI)
- 最新数据(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
}
这是我最好的方法。
我有 2 个服务器正在使用 grpc。
我的详细服务器逻辑描述如下。
服务器结构(---->是grpc连接)
Client ----> ServerA ----> ServerB
数据流如下。
- 客户端发送流数据。 ex(DEF 数据发送)
- ServerA存储数据。 (ABC是之前的数据,DEF是新的数据,所以total Data是ABCDEF)
- 服务器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的连接变更完成后。
数据流如下
- 服务器 A 将之前的总数据发送给服务器 B' (ABCDEF)
- 服务器 A 正在接收最新数据。当服务器更改未完成时,可能会收到此数据 (GHI)
- 最新数据(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
}
这是我最好的方法。