class MeshClientConfig extends AbstractConfig {
    // ---------- configuration items ------------
    // mesh proxy port
    protected Integer port;
    // mesh management port
    protected Integer mport;
    // mesh host ip
    protected String host;
    // default application for all services
    protected String application;
    protected Integer minClientConnection;
    protected Integer maxClientConnection;
    protected String serialization;
    protected Integer connectTimeout;
    protected Integer requestTimeout;
    // the maximum length limit of the request or response packet
    protected Integer maxContentLength;
    // the filters decorated on the mesh client
    protected String filter;
    protected String accessLog;
    // min gzip size
    protected Integer mingzSize;
    // specify the endpoint used, such as using unix socket
    protected String endpointFactory;
    // specify motan protocol codec (such as 'motan' using the motan1 protocol)
    protected String codec;
    protected String check;
    protected Boolean asyncInitConnection;
    protected Integer fusingThreshold;

    // ---------- internal variable ------------
    protected MeshClient meshClient;
    protected URL url;
    protected AtomicBoolean initialized = new AtomicBoolean(false);

    public MeshClient getMeshClient() {
        if (meshClient == null) {
            initMeshClient();
        }
        return meshClient;
    }

    protected synchronized void initMeshClient() {<FILL_FUNCTION_BODY>}

    protected synchronized void destroy() throws Exception {
        if (meshClient != null) {
            GlobalRuntime.removeMeshClient(meshClient.getUrl().getIdentity());
            meshClient.destroy();
            meshClient = null;
        }
        initialized.set(false);
    }

    private void buildMeshClientUrl() {
        Map<String, String> params = DefaultMeshClient.getDefaultParams();
        appendConfigParams(params);
        url = new URL(params.get(URLParamType.protocol.getName()),
                host == null ? MotanConstants.MESH_DEFAULT_HOST : host,
                port == null ? MotanConstants.MESH_DEFAULT_PORT : port,
                MeshClient.class.getName(), params);
    }

    public Integer getPort() {
        return port;
    }

    public void setPort(Integer port) {
        this.port = port;
    }

    public Integer getMport() {
        return mport;
    }

    public void setMport(Integer mport) {
        this.mport = mport;
    }

    public String getHost() {
        return host;
    }

    public void setHost(String host) {
        this.host = host;
    }

    public String getApplication() {
        return application;
    }

    public void setApplication(String application) {
        this.application = application;
    }

    public Integer getMinClientConnection() {
        return minClientConnection;
    }

    public void setMinClientConnection(Integer minClientConnection) {
        this.minClientConnection = minClientConnection;
    }

    public Integer getMaxClientConnection() {
        return maxClientConnection;
    }

    public void setMaxClientConnection(Integer maxClientConnection) {
        this.maxClientConnection = maxClientConnection;
    }

    public String getSerialization() {
        return serialization;
    }

    public void setSerialization(String serialization) {
        this.serialization = serialization;
    }

    public Integer getConnectTimeout() {
        return connectTimeout;
    }

    public void setConnectTimeout(Integer connectTimeout) {
        this.connectTimeout = connectTimeout;
    }

    public Integer getRequestTimeout() {
        return requestTimeout;
    }

    public void setRequestTimeout(Integer requestTimeout) {
        this.requestTimeout = requestTimeout;
    }

    public Integer getMaxContentLength() {
        return maxContentLength;
    }

    public void setMaxContentLength(Integer maxContentLength) {
        this.maxContentLength = maxContentLength;
    }

    public String getFilter() {
        return filter;
    }

    public void setFilter(String filter) {
        this.filter = filter;
    }

    public String getAccessLog() {
        return accessLog;
    }

    public void setAccessLog(String accessLog) {
        this.accessLog = accessLog;
    }

    public Integer getMingzSize() {
        return mingzSize;
    }

    public void setMingzSize(Integer mingzSize) {
        this.mingzSize = mingzSize;
    }

    public String getEndpointFactory() {
        return endpointFactory;
    }

    public void setEndpointFactory(String endpointFactory) {
        this.endpointFactory = endpointFactory;
    }

    public String getCodec() {
        return codec;
    }

    public void setCodec(String codec) {
        this.codec = codec;
    }

    public String getCheck() {
        return check;
    }

    public void setCheck(String check) {
        this.check = check;
    }

    public Boolean getAsyncInitConnection() {
        return asyncInitConnection;
    }

    public void setAsyncInitConnection(Boolean asyncInitConnection) {
        this.asyncInitConnection = asyncInitConnection;
    }

    public Integer getFusingThreshold() {
        return fusingThreshold;
    }

    public void setFusingThreshold(Integer fusingThreshold) {
        this.fusingThreshold = fusingThreshold;
    }
}

        if (initialized.get()) {
            return;
        }
        buildMeshClientUrl();
        DefaultMeshClient defaultMeshClient = new DefaultMeshClient(url);
        try {
            defaultMeshClient.init();
        } catch (Exception e) {
            LoggerUtil.error("mesh client init fail. url:" + url.toFullStr(), e);
            boolean check = Boolean.parseBoolean(url.getParameter(URLParamType.check.getName(), URLParamType.check.getValue()));
            if (check) {
                throw e;
            }
        }
        meshClient = defaultMeshClient;
        GlobalRuntime.addMeshClient(meshClient.getUrl().getIdentity(), meshClient);
        initialized.set(true);
    
<methods>public non-sealed void <init>() ,public java.lang.String getId() ,public void setId(java.lang.String) ,public java.lang.String toString() <variables>private static final java.lang.String[] SUFFIXS,protected java.lang.String id,private static final long serialVersionUID