or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

cluster-token-client.mdcodec-system.mdcommand-interface.mdconfiguration.mdindex.mdnetwork-transport.md
tile.json

tessl/maven-com-alibaba-csp--sentinel-cluster-client-default

Default cluster client implementation for Sentinel cluster flow control

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
mavenpkg:maven/com.alibaba.csp/sentinel-cluster-client-default@1.8.x

To install, run

npx @tessl/cli install tessl/maven-com-alibaba-csp--sentinel-cluster-client-default@1.8.0

index.mddocs/

Sentinel Cluster Client Default

The Sentinel Cluster Client Default provides the default cluster client implementation for Sentinel's distributed flow control capabilities. It enables coordination between multiple application instances through a centralized cluster server using high-performance Netty communication.

Package Information

  • Package Name: sentinel-cluster-client-default
  • Package Type: Maven (JAR)
  • Language: Java
  • Group ID: com.alibaba.csp
  • Artifact ID: sentinel-cluster-client-default
  • Installation: Add Maven dependency:
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-cluster-client-default</artifactId>
    <version>1.8.8</version>
</dependency>

Core Imports

import com.alibaba.csp.sentinel.cluster.client.DefaultClusterTokenClient;
import com.alibaba.csp.sentinel.cluster.client.ClusterTokenClient;
import com.alibaba.csp.sentinel.cluster.client.NettyTransportClient;
import com.alibaba.csp.sentinel.cluster.client.config.ClusterClientConfigManager;
import com.alibaba.csp.sentinel.cluster.client.config.ClusterClientConfig;
import com.alibaba.csp.sentinel.cluster.client.config.ClusterClientAssignConfig;
import com.alibaba.csp.sentinel.cluster.client.codec.registry.RequestDataWriterRegistry;
import com.alibaba.csp.sentinel.cluster.client.codec.registry.ResponseDataDecodeRegistry;
import com.alibaba.csp.sentinel.command.handler.ModifyClusterClientConfigHandler;
import com.alibaba.csp.sentinel.command.handler.FetchClusterClientConfigHandler;
import com.alibaba.csp.sentinel.command.entity.ClusterClientStateEntity;

Basic Usage

import com.alibaba.csp.sentinel.cluster.client.DefaultClusterTokenClient;
import com.alibaba.csp.sentinel.cluster.client.config.ClusterClientConfigManager;
import com.alibaba.csp.sentinel.cluster.client.config.ClusterClientAssignConfig;
import com.alibaba.csp.sentinel.cluster.TokenResult;
import com.alibaba.csp.sentinel.cluster.TokenResultStatus;

// Configure server connection
ClusterClientAssignConfig assignConfig = new ClusterClientAssignConfig("localhost", 8719);
ClusterClientConfigManager.applyNewAssignConfig(assignConfig);

// Create and start client
DefaultClusterTokenClient client = new DefaultClusterTokenClient();
client.start();

// Request flow control tokens
TokenResult result = client.requestToken(12345L, 1, false);
if (result.getStatus() == TokenResultStatus.OK) {
    // Token acquired successfully
    System.out.println("Remaining tokens: " + result.getRemaining());
} else {
    // Token request failed or blocked
    System.out.println("Request failed: " + result.getStatus());
}

// Clean up
client.stop();

Architecture

The Sentinel Cluster Client Default is built around several key components:

  • Token Client: DefaultClusterTokenClient provides the main API for requesting flow control tokens from cluster servers
  • Transport Layer: NettyTransportClient handles high-performance network communication using Netty
  • Configuration Management: ClusterClientConfigManager manages dynamic configuration updates for server assignments and client settings
  • Codec System: Request/response encoding and decoding for efficient network serialization
  • Command Interface: HTTP command handlers for runtime configuration and monitoring

Capabilities

Cluster Token Client

Main interface for requesting flow control tokens from the cluster server. Supports regular flow control, parameterized flow control, and connection lifecycle management.

public class DefaultClusterTokenClient implements ClusterTokenClient {
    public DefaultClusterTokenClient();
    public void start() throws Exception;
    public void stop() throws Exception;
    public int getState();
    public TokenServerDescriptor currentServer();
    public TokenResult requestToken(Long flowId, int acquireCount, boolean prioritized);
    public TokenResult requestParamToken(Long flowId, int acquireCount, Collection<Object> params);
}

Cluster Token Client

Configuration Management

Dynamic configuration system for managing cluster server assignments and client settings. Supports property-based configuration updates and server change notifications.

public final class ClusterClientConfigManager {
    public static void applyNewConfig(ClusterClientConfig config);
    public static void applyNewAssignConfig(ClusterClientAssignConfig assignConfig);
    public static void addServerChangeObserver(ServerChangeObserver observer);
    public static String getServerHost();
    public static int getServerPort();
    public static int getRequestTimeout();
}

Configuration Management

Network Transport

Low-level Netty transport client for cluster server communication. Handles connection management, reconnection logic, and request/response processing.

public class NettyTransportClient implements ClusterTransportClient {
    public NettyTransportClient(String host, int port);
    public void start() throws Exception;
    public void stop() throws Exception;
    public boolean isReady();
    public ClusterResponse sendRequest(ClusterRequest request) throws Exception;
}

Network Transport

Codec System

Request and response encoding/decoding system for efficient network serialization. Provides extensible registry for custom data types and protocols.

public final class RequestDataWriterRegistry {
    public static <T> boolean addWriter(int type, EntityWriter<T, ByteBuf> writer);
    public static EntityWriter<Object, ByteBuf> getWriter(int type);
}

public final class ResponseDataDecodeRegistry {
    public static boolean addDecoder(int type, EntityDecoder<ByteBuf, ?> decoder);
    public static EntityDecoder<ByteBuf, Object> getDecoder(int type);
}

Codec System

Command Interface

HTTP command handlers for runtime configuration and monitoring of cluster client settings and state.

@CommandMapping(name = "cluster/client/modifyConfig", desc = "modify cluster client config")
public class ModifyClusterClientConfigHandler implements CommandHandler<String> {
    public CommandResponse<String> handle(CommandRequest request);
}

@CommandMapping(name = "cluster/client/fetchConfig", desc = "get cluster client config")
public class FetchClusterClientConfigHandler implements CommandHandler<String> {
    public CommandResponse<String> handle(CommandRequest request);
}

Command Interface

Types

// Configuration classes
public class ClusterClientConfig {
    public Integer getRequestTimeout();
    public ClusterClientConfig setRequestTimeout(Integer requestTimeout);
}

public class ClusterClientAssignConfig {
    public ClusterClientAssignConfig(String serverHost, Integer serverPort);
    public String getServerHost();
    public Integer getServerPort();
    public ClusterClientAssignConfig setServerHost(String serverHost);
    public ClusterClientAssignConfig setServerPort(Integer serverPort);
}

// Observer interface
public interface ServerChangeObserver {
    void onRemoteServerChange(ClusterClientAssignConfig assignConfig);
}

// Command entity for state management and HTTP command interfaces
public class ClusterClientStateEntity {
    public String getServerHost();
    public ClusterClientStateEntity setServerHost(String serverHost);
    public Integer getServerPort();
    public ClusterClientStateEntity setServerPort(Integer serverPort);
    public Integer getClientState();
    public ClusterClientStateEntity setClientState(Integer clientState);
    public Integer getRequestTimeout();
    public ClusterClientStateEntity setRequestTimeout(Integer requestTimeout);
    public ClusterClientConfig toClientConfig();
    public ClusterClientAssignConfig toAssignConfig();
}

// Constants
public final class ClientConstants {
    public static final int TYPE_PING = 0;
    public static final int TYPE_FLOW = 1;
    public static final int TYPE_PARAM_FLOW = 2;
    public static final int CLIENT_STATUS_OFF = 0;
    public static final int CLIENT_STATUS_PENDING = 1;
    public static final int CLIENT_STATUS_STARTED = 2;
}