All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.dubbo.config.ProtocolConfig Maven / Gradle / Ivy

There is a newer version: 3.3.0
Show newest version
/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.apache.dubbo.config;

import org.apache.dubbo.common.utils.CollectionUtils;
import org.apache.dubbo.common.utils.StringUtils;
import org.apache.dubbo.config.support.Parameter;
import org.apache.dubbo.rpc.model.ApplicationModel;

import java.lang.reflect.Field;
import java.util.Map;
import java.util.Optional;

import static org.apache.dubbo.common.constants.CommonConstants.DUBBO_PROTOCOL;
import static org.apache.dubbo.common.constants.CommonConstants.SSL_ENABLED_KEY;
import static org.apache.dubbo.common.constants.CommonConstants.THREAD_POOL_EXHAUSTED_LISTENERS_KEY;
import static org.apache.dubbo.common.constants.LoggerCodeConstants.COMMON_UNEXPECTED_EXCEPTION;
import static org.apache.dubbo.common.constants.ProviderConstants.DEFAULT_PREFER_SERIALIZATION;

/**
 * ProtocolConfig
 *
 * @export
 */
public class ProtocolConfig extends AbstractConfig {

    private static final long serialVersionUID = 6913423882496634749L;

    /**
     * Protocol name
     */
    private String name;

    /**
     * Service ip address (when there are multiple network cards available)
     */
    private String host;

    /**
     * Service port
     */
    private Integer port;

    /**
     * Context path
     */
    private String contextpath;

    /**
     * Thread pool
     */
    private String threadpool;

    /**
     * Thread pool name
     */
    private String threadname;

    /**
     * Thread pool core thread size
     */
    private Integer corethreads;

    /**
     * Thread pool size (fixed size)
     */
    private Integer threads;

    /**
     * IO thread pool size (fixed size)
     */
    private Integer iothreads;

    /**
     * Thread pool keepAliveTime, default unit TimeUnit.MILLISECONDS
     */
    private Integer alive;

    /**
     * Thread pool's queue length
     */
    private Integer queues;


    /**
     * Thread pool exhausted listeners
     */
    private String threadPoolExhaustedListeners;

    /**
     * Max acceptable connections
     */
    private Integer accepts;

    /**
     * Protocol codec
     */
    private String codec;

    /**
     * Serialization
     */
    private String serialization;

    /**
     * If the parameter has a value, the consumer will read the parameter first.
     * If the Dubbo Sdk you are using contains the serialization type, the serialization method specified by the argument is used.
     * 

* When this parameter is null or the serialization type specified by this parameter does not exist in the Dubbo SDK, the serialization type specified by serialization is used. * If the Dubbo SDK if still does not exist, the default type of the Dubbo SDK is used. * For Dubbo SDK >= 3.2, preferSerialization takes precedence over serialization *

* The configuration supports multiple, which are separated by commas.Such as:fastjson2,fastjson,hessian2 */ private String preferSerialization; // default:fastjson2,hessian2 /** * Charset */ private String charset; /** * Payload max length */ private Integer payload; /** * Buffer size */ private Integer buffer; /** * Heartbeat interval */ private Integer heartbeat; /** * Access log */ private String accesslog; /** * Transporter */ private String transporter; /** * How information is exchanged */ private String exchanger; /** * Thread dispatch mode */ private String dispatcher; /** * Networker */ private String networker; /** * Sever impl */ private String server; /** * Client impl */ private String client; /** * Supported telnet commands, separated with comma. */ private String telnet; /** * Command line prompt */ private String prompt; /** * Status check */ private String status; /** * Whether to register */ private Boolean register; /** * whether it is a persistent connection */ //TODO add this to provider config private Boolean keepAlive; // TODO add this to provider config private String optimizer; /** * The extension */ private String extension; /** * The customized parameters */ private Map parameters; private Boolean sslEnabled; /* * Extra Protocol for this service, using Port Unification Server */ private String extProtocol; public ProtocolConfig() { } public ProtocolConfig(ApplicationModel applicationModel) { super(applicationModel); } public ProtocolConfig(String name) { setName(name); } public ProtocolConfig(ApplicationModel applicationModel, String name) { super(applicationModel); setName(name); } public ProtocolConfig(String name, int port) { setName(name); setPort(port); } public ProtocolConfig(ApplicationModel applicationModel, String name, int port) { super(applicationModel); setName(name); setPort(port); } @Override protected void checkDefault() { super.checkDefault(); if (name == null) { name = DUBBO_PROTOCOL; } if (StringUtils.isBlank(preferSerialization)) { preferSerialization = serialization != null ? serialization : DEFAULT_PREFER_SERIALIZATION; } } @Parameter(excluded = true) public String getName() { return name; } public void setName(String name) { this.name = name; } @Parameter(excluded = true) public String getHost() { return host; } public void setHost(String host) { this.host = host; } @Parameter(excluded = true) public Integer getPort() { return port; } public void setPort(Integer port) { this.port = port; } @Deprecated @Parameter(excluded = true, attribute = false) public String getPath() { return getContextpath(); } @Deprecated public void setPath(String path) { setContextpath(path); } @Parameter(excluded = true) public String getContextpath() { return contextpath; } public void setContextpath(String contextpath) { this.contextpath = contextpath; } public String getThreadpool() { return threadpool; } public void setThreadpool(String threadpool) { this.threadpool = threadpool; } public String getThreadname() { return threadname; } public void setThreadname(String threadname) { this.threadname = threadname; } @Parameter(key = THREAD_POOL_EXHAUSTED_LISTENERS_KEY) public String getThreadPoolExhaustedListeners() { return threadPoolExhaustedListeners; } public void setThreadPoolExhaustedListeners(String threadPoolExhaustedListeners) { this.threadPoolExhaustedListeners = threadPoolExhaustedListeners; } public Integer getCorethreads() { return corethreads; } public void setCorethreads(Integer corethreads) { this.corethreads = corethreads; } public Integer getThreads() { return threads; } public void setThreads(Integer threads) { this.threads = threads; } public Integer getIothreads() { return iothreads; } public void setIothreads(Integer iothreads) { this.iothreads = iothreads; } public Integer getAlive() { return alive; } public void setAlive(Integer alive) { this.alive = alive; } public Integer getQueues() { return queues; } public void setQueues(Integer queues) { this.queues = queues; } public Integer getAccepts() { return accepts; } public void setAccepts(Integer accepts) { this.accepts = accepts; } public String getCodec() { return codec; } public void setCodec(String codec) { this.codec = codec; } public String getSerialization() { return serialization; } public void setSerialization(String serialization) { this.serialization = serialization; } public String getPreferSerialization() { return preferSerialization; } public void setPreferSerialization(String preferSerialization) { this.preferSerialization = preferSerialization; } public String getCharset() { return charset; } public void setCharset(String charset) { this.charset = charset; } public Integer getPayload() { return payload; } public void setPayload(Integer payload) { this.payload = payload; } public Integer getBuffer() { return buffer; } public void setBuffer(Integer buffer) { this.buffer = buffer; } public Integer getHeartbeat() { return heartbeat; } public void setHeartbeat(Integer heartbeat) { this.heartbeat = heartbeat; } public String getServer() { return server; } public void setServer(String server) { this.server = server; } public String getClient() { return client; } public void setClient(String client) { this.client = client; } public String getAccesslog() { return accesslog; } public void setAccesslog(String accesslog) { this.accesslog = accesslog; } public String getTelnet() { return telnet; } public void setTelnet(String telnet) { this.telnet = telnet; } @Parameter(escaped = true) public String getPrompt() { return prompt; } public void setPrompt(String prompt) { this.prompt = prompt; } public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } public Boolean isRegister() { return register; } public void setRegister(Boolean register) { this.register = register; } public String getTransporter() { return transporter; } public void setTransporter(String transporter) { this.transporter = transporter; } public String getExchanger() { return exchanger; } public void setExchanger(String exchanger) { this.exchanger = exchanger; } /** * typo, switch to use {@link #getDispatcher()} * * @deprecated {@link #getDispatcher()} */ @Deprecated @Parameter(excluded = true, attribute = false) public String getDispather() { return getDispatcher(); } /** * typo, switch to use {@link #getDispatcher()} * * @deprecated {@link #setDispatcher(String)} */ @Deprecated public void setDispather(String dispather) { setDispatcher(dispather); } public String getDispatcher() { return dispatcher; } public void setDispatcher(String dispatcher) { this.dispatcher = dispatcher; } public String getNetworker() { return networker; } public void setNetworker(String networker) { this.networker = networker; } public Map getParameters() { return parameters; } public void setParameters(Map parameters) { this.parameters = parameters; } @Parameter(key = SSL_ENABLED_KEY) public Boolean getSslEnabled() { return sslEnabled; } public void setSslEnabled(Boolean sslEnabled) { this.sslEnabled = sslEnabled; } public Boolean getKeepAlive() { return keepAlive; } public void setKeepAlive(Boolean keepAlive) { this.keepAlive = keepAlive; } public String getOptimizer() { return optimizer; } public void setOptimizer(String optimizer) { this.optimizer = optimizer; } public String getExtension() { return extension; } public void setExtension(String extension) { this.extension = extension; } @Override @Parameter(excluded = true, attribute = false) public boolean isValid() { return StringUtils.isNotEmpty(name); } public String getExtProtocol() { return extProtocol; } public void setExtProtocol(String extProtocol) { this.extProtocol = extProtocol; } public void mergeProtocol(ProtocolConfig sourceConfig) { if (sourceConfig == null) { return; } Field[] targetFields = this.getClass().getDeclaredFields(); try { Map protocolConfigMap = CollectionUtils.objToMap(sourceConfig); for (Field targetField : targetFields) { Optional.ofNullable(protocolConfigMap.get(targetField.getName())).ifPresent(value -> { try { targetField.setAccessible(true); if (targetField.get(this) == null) { targetField.set(this, value); } } catch (IllegalAccessException e) { throw new RuntimeException(e); } }); } } catch (Exception e) { logger.error(COMMON_UNEXPECTED_EXCEPTION, "", "", "merge protocol config fail, error: ", e); } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy