websocket 和 zookeeper 机制有点类似,将网关与 admin 建立好 websocket 连接时,admin 会推送一次全量数据,后续如果配置数据发生变更,则将增量数据通过 websocket 主动推送给 soul-web
使用websocket同步的时候,特别要注意断线重连,也叫保持心跳。soul使用java-websocket 这个第三方库来进行websocket连接。
Java
运行代码
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class WebsocketSyncCache extends WebsocketCacheHandler {
/**
* The Client.
*/
private WebSocketClient client;
public WebsocketSyncCache(final SoulConfig.WebsocketConfig websocketConfig) {
ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(1,
SoulThreadFactory.create("websocket-connect", true));
client = new WebSocketClient(new URI(websocketConfig.getUrl())) {
@Override
public void onOpen(final ServerHandshake serverHandshake) {
//....
}
@Override
public void onMessage(final String result) {
//....
}
};
//进行连接
client.connectBlocking();
//使用调度线程池进行断线重连,30秒进行一次
executor.scheduleAtFixedRate(() -> {
if (client != null && client.isClosed()) {
client.reconnectBlocking();
}
}, 10, 30, TimeUnit.SECONDS);
}
AI 代码解读