Sentinel教程進階七setToServer()
阿新 • • 發佈:2022-01-26
public static boolean setToServer() {
if (mode == 1) {
return true;
} else {
mode = 1;
sleepIfNeeded();
lastModified = TimeUtil.currentTimeMillis();
//啟動server
return startServer();
}
}
private static boolean startServer() { try { ClusterTokenClient tokenClient = TokenClientProvider.getClient(); if (tokenClient != null) { tokenClient.stop(); } //獲取server並啟動 EmbeddedClusterTokenServer server = EmbeddedClusterTokenServerProvider.getServer(); if (server != null) { //啟動server(實際上是啟動一個netty server) server.start(); RecordLog.info("[ClusterStateManager] Changing cluster mode to server", new Object[0]); return true; } else { RecordLog.warn("[ClusterStateManager] Cannot change to server (no server SPI found)", new Object[0]); return false; } } catch (Exception var2) { RecordLog.warn("[ClusterStateManager] Error when changing cluster mode to server", var2); return false; } } public final class EmbeddedClusterTokenServerProvider { private static EmbeddedClusterTokenServer server = null; static { //類載入的時候載入spiEmbeddedClusterTokenServer resolveInstance(); } private static void resolveInstance() { EmbeddedClusterTokenServer s = (EmbeddedClusterTokenServer)SpiLoader.of(EmbeddedClusterTokenServer.class).loadFirstInstance(); if (s == null) { RecordLog.warn("[EmbeddedClusterTokenServerProvider] No existing cluster token server, cluster server mode will not be activated", new Object[0]); } else { server = s; RecordLog.info("[EmbeddedClusterTokenServerProvider] Cluster token server resolved: {}", new Object[]{server.getClass().getCanonicalName()}); } } //返回server public static EmbeddedClusterTokenServer getServer() { return server; } }
com.alibaba.csp.sentinel.cluster.server.DefaultEmbeddedTokenServer
DefaultEmbeddedTokenServer
public class DefaultEmbeddedTokenServer implements EmbeddedClusterTokenServer { private final TokenService tokenService = TokenServiceProvider.getService(); private final ClusterTokenServer server = new SentinelDefaultTokenServer(true); public DefaultEmbeddedTokenServer() { } public void start() throws Exception { this.server.start(); } public void stop() throws Exception { this.server.stop(); } public TokenResult requestToken(Long ruleId, int acquireCount, boolean prioritized) { return this.tokenService != null ? this.tokenService.requestToken(ruleId, acquireCount, prioritized) : new TokenResult(-1); } public TokenResult requestParamToken(Long ruleId, int acquireCount, Collection<Object> params) { return this.tokenService != null ? this.tokenService.requestParamToken(ruleId, acquireCount, params) : new TokenResult(-1); } public TokenResult requestConcurrentToken(String clientAddress, Long ruleId, int acquireCount) { return null; } public void releaseConcurrentToken(Long tokenId) { } }
SentinelDefaultTokenServer
public SentinelDefaultTokenServer() { this(false); } public SentinelDefaultTokenServer(boolean embedded) { this.shouldStart = new AtomicBoolean(false); this.embedded = embedded; //ClusterServerConfigManager新增監聽 ClusterServerConfigManager.addTransportConfigChangeObserver(new ServerTransportConfigObserver() { public void onTransportConfigChange(ServerTransportConfig config) { SentinelDefaultTokenServer.this.changeServerConfig(config); } }); //初始化server this.initNewServer(); } private void initNewServer() { if (this.server == null) { int port = ClusterServerConfigManager.getPort(); if (port > 0) { //server為一個netty server this.server = new NettyTransportServer(port); this.port = port; } } }