diff --git a/dubbo-common/src/main/java/com/alibaba/dubbo/common/Constants.java b/dubbo-common/src/main/java/com/alibaba/dubbo/common/Constants.java index e1dd7edd1e9..394489a2c2e 100644 --- a/dubbo-common/src/main/java/com/alibaba/dubbo/common/Constants.java +++ b/dubbo-common/src/main/java/com/alibaba/dubbo/common/Constants.java @@ -1,566 +1,569 @@ -/* - * Copyright 1999-2011 Alibaba Group. - * - * Licensed 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 com.alibaba.dubbo.common; - -import java.util.regex.Pattern; - -/** - * Constants - * - * @author william.liangf - */ -public class Constants { - - public static final String PROVIDER = "provider"; - - public static final String CONSUMER = "consumer"; - - public static final String REGISTER = "register"; - - public static final String UNREGISTER = "unregister"; - - public static final String SUBSCRIBE = "subscribe"; - - public static final String UNSUBSCRIBE = "unsubscribe"; - - public static final String CATEGORY_KEY = "category"; - - public static final String PROVIDERS_CATEGORY = "providers"; - - public static final String CONSUMERS_CATEGORY = "consumers"; - - public static final String ROUTERS_CATEGORY = "routers"; - - public static final String CONFIGURATORS_CATEGORY = "configurators"; - - public static final String DEFAULT_CATEGORY = PROVIDERS_CATEGORY; - - public static final String ENABLED_KEY = "enabled"; - - public static final String DISABLED_KEY = "disabled"; - - public static final String VALIDATION_KEY = "validation"; - - public static final String CACHE_KEY = "cache"; - - public static final String DYNAMIC_KEY = "dynamic"; - - public static final String DUBBO_PROPERTIES_KEY = "dubbo.properties.file"; - - public static final String DEFAULT_DUBBO_PROPERTIES = "dubbo.properties"; - - public static final String SENT_KEY = "sent"; - - public static final boolean DEFAULT_SENT = false; - - public static final String REGISTRY_PROTOCOL = "registry"; - - public static final String $INVOKE = "$invoke"; - - public static final String $ECHO = "$echo"; - - public static final int DEFAULT_IO_THREADS = Runtime.getRuntime() - .availableProcessors() + 1; - - public static final String DEFAULT_PROXY = "javassist"; - - public static final int DEFAULT_PAYLOAD = 8 * 1024 * 1024; // 8M - - public static final String DEFAULT_CLUSTER = "failover"; - - public static final String DEFAULT_DIRECTORY = "dubbo"; - - public static final String DEFAULT_LOADBALANCE = "random"; - - public static final String DEFAULT_PROTOCOL = "dubbo"; - - public static final String DEFAULT_EXCHANGER = "header"; - - public static final String DEFAULT_TRANSPORTER = "netty"; - - public static final String DEFAULT_REMOTING_SERVER = "netty"; - - public static final String DEFAULT_REMOTING_CLIENT = "netty"; - - public static final String DEFAULT_REMOTING_CODEC = "dubbo"; - - public static final String DEFAULT_REMOTING_SERIALIZATION = "hessian2"; - - public static final String DEFAULT_HTTP_SERVER = "servlet"; - - public static final String DEFAULT_HTTP_CLIENT = "jdk"; - - public static final String DEFAULT_HTTP_SERIALIZATION = "json"; - - public static final String DEFAULT_CHARSET = "UTF-8"; - - public static final int DEFAULT_WEIGHT = 100; - - public static final int DEFAULT_FORKS = 2; - - public static final String DEFAULT_THREAD_NAME = "Dubbo"; - - public static final int DEFAULT_THREADS = 200; - - public static final int DEFAULT_QUEUES = 0; - - public static final int DEFAULT_THREAD_ALIVE = 60 * 1000; - - public static final int DEFAULT_CONNECTIONS = 0; - - public static final int DEFAULT_ACCEPTS = 0; - - public static final int DEFAULT_IDLE_TIMEOUT = 600 * 1000; - - public static final int DEFAULT_HEARTBEAT = 60 * 1000; - - public static final int DEFAULT_TIMEOUT = 1000; - - public static final int DEFAULT_CONNECT_TIMEOUT = 3000; - - public static final int DEFAULT_RETRIES = 2; - - // default buffer size is 8k. - public static final int DEFAULT_BUFFER_SIZE = 8 * 1024; - - public static final int MAX_BUFFER_SIZE = 16 * 1024; - - public static final int MIN_BUFFER_SIZE = 1 * 1024; - - public static final String REMOVE_VALUE_PREFIX = "-"; - - public static final String HIDE_KEY_PREFIX = "."; - - public static final String DEFAULT_KEY_PREFIX = "default."; - - public static final String DEFAULT_KEY = "default"; - - public static final String LOADBALANCE_KEY = "loadbalance"; - - // key for router type, for e.g., "script"/"file", corresponding to ScriptRouterFactory.NAME, FileRouterFactory.NAME - public static final String ROUTER_KEY = "router"; - - public static final String CLUSTER_KEY = "cluster"; - - public static final String REGISTRY_KEY = "registry"; - - public static final String MONITOR_KEY = "monitor"; - - public static final String SIDE_KEY = "side"; - - public static final String PROVIDER_SIDE = "provider"; - - public static final String CONSUMER_SIDE = "consumer"; - - public static final String DEFAULT_REGISTRY = "dubbo"; - - public static final String BACKUP_KEY = "backup"; - - public static final String DIRECTORY_KEY = "directory"; - - public static final String DEPRECATED_KEY = "deprecated"; - - public static final String ANYHOST_KEY = "anyhost"; - - public static final String ANYHOST_VALUE = "0.0.0.0"; - - public static final String LOCALHOST_KEY = "localhost"; - - public static final String LOCALHOST_VALUE = "127.0.0.1"; - - public static final String APPLICATION_KEY = "application"; - - public static final String LOCAL_KEY = "local"; - - public static final String STUB_KEY = "stub"; - - public static final String MOCK_KEY = "mock"; - - public static final String PROTOCOL_KEY = "protocol"; - - public static final String PROXY_KEY = "proxy"; - - public static final String WEIGHT_KEY = "weight"; - - public static final String FORKS_KEY = "forks"; - - public static final String DEFAULT_THREADPOOL = "fixed"; - - public static final String DEFAULT_CLIENT_THREADPOOL = "cached"; - - public static final String THREADPOOL_KEY = "threadpool"; - - public static final String THREAD_NAME_KEY = "threadname"; - - public static final String IO_THREADS_KEY = "iothreads"; - - public static final String THREADS_KEY = "threads"; - - public static final String QUEUES_KEY = "queues"; - - public static final String THREAD_ALIVE_KEY = "threadalive"; - - public static final String EXECUTES_KEY = "executes"; - - public static final String BUFFER_KEY = "buffer"; - - public static final String PAYLOAD_KEY = "payload"; - - public static final String REFERENCE_FILTER_KEY = "reference.filter"; - - public static final String INVOKER_LISTENER_KEY = "invoker.listener"; - - public static final String SERVICE_FILTER_KEY = "service.filter"; - - public static final String EXPORTER_LISTENER_KEY = "exporter.listener"; - - public static final String ACCESS_LOG_KEY = "accesslog"; - - public static final String ACTIVES_KEY = "actives"; - - public static final String CONNECTIONS_KEY = "connections"; - - public static final String ACCEPTS_KEY = "accepts"; - - public static final String IDLE_TIMEOUT_KEY = "idle.timeout"; - - public static final String HEARTBEAT_KEY = "heartbeat"; - - public static final String HEARTBEAT_TIMEOUT_KEY = "heartbeat.timeout"; - - public static final String CONNECT_TIMEOUT_KEY = "connect.timeout"; - - public static final String TIMEOUT_KEY = "timeout"; - - public static final String RETRIES_KEY = "retries"; - - public static final String PROMPT_KEY = "prompt"; - - public static final String DEFAULT_PROMPT = "dubbo>"; - - public static final String CODEC_KEY = "codec"; - public static final String DOWNSTREAM_CODEC_KEY = "codec.downstream"; - - public static final String SERIALIZATION_KEY = "serialization"; - - public static final String EXCHANGER_KEY = "exchanger"; - - public static final String TRANSPORTER_KEY = "transporter"; - - public static final String SERVER_KEY = "server"; - - public static final String CLIENT_KEY = "client"; - - public static final String ASYNC_KEY = "async"; - - public static final String TOKEN_KEY = "token"; - - public static final String METHOD_KEY = "method"; - - public static final String METHODS_KEY = "methods"; - - public static final String CHARSET_KEY = "charset"; - - public static final String RECONNECT_KEY = "reconnect"; - - public static final String SEND_RECONNECT_KEY = "send.reconnect"; - - public static final int DEFAULT_RECONNECT_PERIOD = 2000; - - public static final String SHUTDOWN_TIMEOUT_KEY = "shutdown.timeout"; - - public static final int DEFAULT_SHUTDOWN_TIMEOUT = 1000 * 60 * 15; - - public static final String PID_KEY = "pid"; - - public static final String TIMESTAMP_KEY = "timestamp"; - - public static final String CHECK_KEY = "check"; - - public static final String REGISTER_KEY = "register"; - - public static final String SUBSCRIBE_KEY = "subscribe"; - - public static final String GROUP_KEY = "group"; - - public static final String PATH_KEY = "path"; - - public static final String INTERFACE_KEY = "interface"; - - public static final String GENERIC_KEY = "generic"; - - public static final String FILE_KEY = "file"; - - public static final String WAIT_KEY = "wait"; - - public static final String CLASSIFIER_KEY = "classifier"; - - public static final String VERSION_KEY = "version"; - - public static final String REVISION_KEY = "revision"; - - public static final String DUBBO_VERSION_KEY = "dubbo"; - - public static final String HESSIAN_VERSION_KEY = "hessian.version"; - - public static final String DISPATHER_KEY = "dispather"; - - public static final String CHANNEL_HANDLER_KEY = "channel.handler"; - - public static final String DEFAULT_CHANNEL_HANDLER = "default"; - - public static final String ANY_VALUE = "*"; - - public static final String COMMA_SEPARATOR = ","; - - public static final Pattern COMMA_SPLIT_PATTERN = Pattern - .compile("\\s*[,]+\\s*"); - - public final static String PATH_SEPARATOR = "/"; - - public static final String REGISTRY_SEPARATOR = "|"; - - public static final Pattern REGISTRY_SPLIT_PATTERN = Pattern - .compile("\\s*[|;]+\\s*"); - - public static final String SEMICOLON_SEPARATOR = ";"; - - public static final Pattern SEMICOLON_SPLIT_PATTERN = Pattern - .compile("\\s*[;]+\\s*"); - - public static final String CONNECT_QUEUE_CAPACITY = "connect.queue.capacity"; - - public static final String CONNECT_QUEUE_WARNING_SIZE = "connect.queue.warning.size"; - - public static final int DEFAULT_CONNECT_QUEUE_WARNING_SIZE = 1000; - - public static final String CHANNEL_ATTRIBUTE_READONLY_KEY = "channel.readonly"; - - public static final String CHANNEL_READONLYEVENT_SENT_KEY = "channel.readonly.sent"; - - public static final String CHANNEL_SEND_READONLYEVENT_KEY = "channel.readonly.send"; - - public static final String COUNT_PROTOCOL = "count"; - - public static final String TRACE_PROTOCOL = "trace"; - - public static final String EMPTY_PROTOCOL = "empty"; - - public static final String ADMIN_PROTOCOL = "admin"; - - public static final String PROVIDER_PROTOCOL = "provider"; - - public static final String CONSUMER_PROTOCOL = "consumer"; - - public static final String ROUTE_PROTOCOL = "route"; - - public static final String SCRIPT_PROTOCOL = "script"; - - public static final String CONDITION_PROTOCOL = "condition"; - - public static final String MOCK_PROTOCOL = "mock"; - - public static final String RETURN_PREFIX = "return "; - - public static final String THROW_PREFIX = "throw"; - - public static final String FAIL_PREFIX = "fail:"; - - public static final String FORCE_PREFIX = "force:"; - - public static final String FORCE_KEY = "force"; - - public static final String MERGER_KEY = "merger"; - - /** - * 集群时是否排除非available的invoker - */ - public static final String CLUSTER_AVAILABLE_CHECK_KEY = "cluster.availablecheck"; - - /** - */ - public static final boolean DEFAULT_CLUSTER_AVAILABLE_CHECK = true; - - /** - * 集群时是否启用sticky策略 - */ - public static final String CLUSTER_STICKY_KEY = "sticky"; - - /** - * sticky默认值. - */ - public static final boolean DEFAULT_CLUSTER_STICKY = false; - - /** - * 创建client时,是否先要建立连接。 - */ - public static final String LAZY_CONNECT_KEY = "lazy"; - - /** - * lazy连接的初始状态是连接状态还是非连接状态? - */ - public static final String LAZY_CONNECT_INITIAL_STATE_KEY = "connect.lazy.initial.state"; - - /** - * lazy连接的初始状态默认是连接状态. - */ - public static final boolean DEFAULT_LAZY_CONNECT_INITIAL_STATE = true; - - /** - * 注册中心是否同步存储文件,默认异步 - */ - public static final String REGISTRY_FILESAVE_SYNC_KEY = "save.file"; - - /** - * 注册中心失败事件重试事件 - */ - public static final String REGISTRY_RETRY_PERIOD_KEY = "retry.period"; - - /** - * 重试周期 - */ - public static final int DEFAULT_REGISTRY_RETRY_PERIOD = 5 * 1000; - - /** - * 注册中心自动重连时间 - */ - public static final String REGISTRY_RECONNECT_PERIOD_KEY = "reconnect.period"; - - public static final int DEFAULT_REGISTRY_RECONNECT_PERIOD = 3 * 1000; - - public static final String SESSION_TIMEOUT_KEY = "session"; - - public static final int DEFAULT_SESSION_TIMEOUT = 60 * 1000; - - /** - * 注册中心导出URL参数的KEY - */ - public static final String EXPORT_KEY = "export"; - - /** - * 注册中心引用URL参数的KEY - */ - public static final String REFER_KEY = "refer"; - - /** - * callback inst id - */ - public static final String CALLBACK_SERVICE_KEY = "callback.service.instid"; - - /** - * 每个客户端同一个接口 callback服务实例的限制 - */ - public static final String CALLBACK_INSTANCES_LIMIT_KEY = "callbacks"; - - /** - * 每个客户端同一个接口 callback服务实例的限制 - */ - public static final int DEFAULT_CALLBACK_INSTANCES = 1; - - public static final String CALLBACK_SERVICE_PROXY_KEY = "callback.service.proxy"; - - public static final String IS_CALLBACK_SERVICE = "is_callback_service"; - - /** - * channel中callback的invokers - */ - public static final String CHANNEL_CALLBACK_KEY = "channel.callback.invokers.key"; - - @Deprecated - public static final String SHUTDOWN_WAIT_SECONDS_KEY = "dubbo.service.shutdown.wait.seconds"; - - public static final String SHUTDOWN_WAIT_KEY = "dubbo.service.shutdown.wait"; - - public static final String IS_SERVER_KEY = "isserver"; - - /** - * 默认值毫秒,避免重新计算. - */ - public static final int DEFAULT_SERVER_SHUTDOWN_TIMEOUT = 10000; - - public static final String ON_CONNECT_KEY = "onconnect"; - - public static final String ON_DISCONNECT_KEY = "ondisconnect"; - - public static final String RETURN_KEY = "return"; - - public static final String ON_INVOKE_METHOD_KEY = "oninvoke.method"; - - public static final String ON_RETURN_METHOD_KEY = "onreturn.method"; - - public static final String ON_THROW_METHOD_KEY = "onthrow.method"; - - public static final String ON_INVOKE_INSTANCE_KEY = "oninvoke.instance"; - - public static final String ON_RETURN_INSTANCE_KEY = "onreturn.instance"; - - public static final String ON_THROW_INSTANCE_KEY = "onthrow.instance"; - - public static final String OVERRIDE_PROTOCOL = "override"; - - public static final String PRIORITY_KEY = "priority"; - - public static final String RULE_KEY = "rule"; - - public static final String TYPE_KEY = "type"; - - public static final String RUNTIME_KEY = "runtime"; - - // when ROUTER_KEY's value is set to ROUTER_TYPE_CLEAR, RegistryDirectory will clean all current routers - public static final String ROUTER_TYPE_CLEAR = "clean"; - - public static final String DEFAULT_SCRIPT_TYPE_KEY = "javascript"; - - public static final String STUB_EVENT_KEY = "dubbo.stub.event"; - - public static final boolean DEFAULT_STUB_EVENT = false; - - public static final String STUB_EVENT_METHODS_KEY = "dubbo.stub.event.methods"; - - //invocation attachment属性中如果有此值,则选择mock invoker - public static final String INVOCATION_NEED_MOCK = "invocation.need.mock"; - - public static final String LOCAL_PROTOCOL = "injvm"; - - public static final String AUTO_ATTACH_INVOCATIONID_KEY = "invocationid.autoattach"; - - public static final String SCOPE_KEY = "scope"; - - public static final String SCOPE_LOCAL = "local"; - - public static final String SCOPE_REMOTE = "remote"; - - public static final String SCOPE_NONE = "none"; - - public static final String RELIABLE_PROTOCOL = "napoli"; - - public static final String TPS_LIMIT_RATE_KEY = "tps"; - - public static final String TPS_LIMIT_INTERVAL_KEY = "tps.interval"; - - public static final long DEFAULT_TPS_LIMIT_INTERVAL = 60 * 1000; - - /* - * private Constants(){ } - */ - - public static class Attachments { - public static final String IS_ASYNC_KEY = "attachments.async"; - public static final String IS_ONEWAY_KEY = "attachments.oneway"; - public static final String INVOCATIONID_KEY = "attachments.invocation.id"; - } - -} +/* + * Copyright 1999-2011 Alibaba Group. + * + * Licensed 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 com.alibaba.dubbo.common; + +import java.util.regex.Pattern; + +/** + * Constants + * + * @author william.liangf + */ +public class Constants { + + public static final String PROVIDER = "provider"; + + public static final String CONSUMER = "consumer"; + + public static final String REGISTER = "register"; + + public static final String UNREGISTER = "unregister"; + + public static final String SUBSCRIBE = "subscribe"; + + public static final String UNSUBSCRIBE = "unsubscribe"; + + public static final String CATEGORY_KEY = "category"; + + public static final String PROVIDERS_CATEGORY = "providers"; + + public static final String CONSUMERS_CATEGORY = "consumers"; + + public static final String ROUTERS_CATEGORY = "routers"; + + public static final String CONFIGURATORS_CATEGORY = "configurators"; + + public static final String DEFAULT_CATEGORY = PROVIDERS_CATEGORY; + + public static final String ENABLED_KEY = "enabled"; + + public static final String DISABLED_KEY = "disabled"; + + public static final String VALIDATION_KEY = "validation"; + + public static final String CACHE_KEY = "cache"; + + public static final String DYNAMIC_KEY = "dynamic"; + + public static final String DUBBO_PROPERTIES_KEY = "dubbo.properties.file"; + + public static final String DEFAULT_DUBBO_PROPERTIES = "dubbo.properties"; + + public static final String SENT_KEY = "sent"; + + public static final boolean DEFAULT_SENT = false; + + public static final String REGISTRY_PROTOCOL = "registry"; + + public static final String $INVOKE = "$invoke"; + + public static final String $ECHO = "$echo"; + + public static final int DEFAULT_IO_THREADS = Runtime.getRuntime() + .availableProcessors() + 1; + + public static final String DEFAULT_PROXY = "javassist"; + + public static final int DEFAULT_PAYLOAD = 8 * 1024 * 1024; // 8M + + public static final String DEFAULT_CLUSTER = "failover"; + + public static final String DEFAULT_DIRECTORY = "dubbo"; + + public static final String DEFAULT_LOADBALANCE = "random"; + + public static final String DEFAULT_PROTOCOL = "dubbo"; + + public static final String DEFAULT_EXCHANGER = "header"; + + public static final String DEFAULT_TRANSPORTER = "netty"; + + public static final String DEFAULT_REMOTING_SERVER = "netty"; + + public static final String DEFAULT_REMOTING_CLIENT = "netty"; + + public static final String DEFAULT_REMOTING_CODEC = "dubbo"; + + public static final String DEFAULT_REMOTING_SERIALIZATION = "hessian2"; + + public static final String DEFAULT_HTTP_SERVER = "servlet"; + + public static final String DEFAULT_HTTP_CLIENT = "jdk"; + + public static final String DEFAULT_HTTP_SERIALIZATION = "json"; + + public static final String DEFAULT_CHARSET = "UTF-8"; + + public static final int DEFAULT_WEIGHT = 100; + + public static final int DEFAULT_FORKS = 2; + + public static final String DEFAULT_THREAD_NAME = "Dubbo"; + + public static final int DEFAULT_THREADS = 200; + + public static final int DEFAULT_QUEUES = 0; + + public static final int DEFAULT_THREAD_ALIVE = 60 * 1000; + + public static final int DEFAULT_CONNECTIONS = 0; + + public static final int DEFAULT_ACCEPTS = 0; + + public static final int DEFAULT_IDLE_TIMEOUT = 600 * 1000; + + public static final int DEFAULT_HEARTBEAT = 60 * 1000; + + public static final int DEFAULT_TIMEOUT = 1000; + + public static final int DEFAULT_CONNECT_TIMEOUT = 3000; + + public static final int DEFAULT_RETRIES = 2; + + // default buffer size is 8k. + public static final int DEFAULT_BUFFER_SIZE = 8 * 1024; + + public static final int MAX_BUFFER_SIZE = 16 * 1024; + + public static final int MIN_BUFFER_SIZE = 1 * 1024; + + public static final String REMOVE_VALUE_PREFIX = "-"; + + public static final String HIDE_KEY_PREFIX = "."; + + public static final String DEFAULT_KEY_PREFIX = "default."; + + public static final String DEFAULT_KEY = "default"; + + public static final String LOADBALANCE_KEY = "loadbalance"; + + // key for router type, for e.g., "script"/"file", corresponding to ScriptRouterFactory.NAME, FileRouterFactory.NAME + public static final String ROUTER_KEY = "router"; + + public static final String CLUSTER_KEY = "cluster"; + + public static final String REGISTRY_KEY = "registry"; + + public static final String MONITOR_KEY = "monitor"; + + public static final String SIDE_KEY = "side"; + + public static final String PROVIDER_SIDE = "provider"; + + public static final String CONSUMER_SIDE = "consumer"; + + public static final String DEFAULT_REGISTRY = "dubbo"; + + public static final String BACKUP_KEY = "backup"; + + public static final String DIRECTORY_KEY = "directory"; + + public static final String DEPRECATED_KEY = "deprecated"; + + public static final String ANYHOST_KEY = "anyhost"; + + public static final String ANYHOST_VALUE = "0.0.0.0"; + + public static final String LOCALHOST_KEY = "localhost"; + + public static final String LOCALHOST_VALUE = "127.0.0.1"; + + public static final String APPLICATION_KEY = "application"; + + public static final String LOCAL_KEY = "local"; + + public static final String STUB_KEY = "stub"; + + public static final String MOCK_KEY = "mock"; + + public static final String PROTOCOL_KEY = "protocol"; + + public static final String PROXY_KEY = "proxy"; + + public static final String WEIGHT_KEY = "weight"; + + public static final String FORKS_KEY = "forks"; + + public static final String DEFAULT_THREADPOOL = "fixed"; + + public static final String DEFAULT_CLIENT_THREADPOOL = "cached"; + + public static final String THREADPOOL_KEY = "threadpool"; + + public static final String THREAD_NAME_KEY = "threadname"; + + public static final String IO_THREADS_KEY = "iothreads"; + + public static final String THREADS_KEY = "threads"; + + public static final String QUEUES_KEY = "queues"; + + public static final String THREAD_ALIVE_KEY = "threadalive"; + + public static final String EXECUTES_KEY = "executes"; + + public static final String BUFFER_KEY = "buffer"; + + public static final String PAYLOAD_KEY = "payload"; + + public static final String REFERENCE_FILTER_KEY = "reference.filter"; + + public static final String INVOKER_LISTENER_KEY = "invoker.listener"; + + public static final String SERVICE_FILTER_KEY = "service.filter"; + + public static final String EXPORTER_LISTENER_KEY = "exporter.listener"; + + public static final String ACCESS_LOG_KEY = "accesslog"; + + public static final String ACTIVES_KEY = "actives"; + + public static final String CONNECTIONS_KEY = "connections"; + + public static final String ACCEPTS_KEY = "accepts"; + + public static final String IDLE_TIMEOUT_KEY = "idle.timeout"; + + public static final String HEARTBEAT_KEY = "heartbeat"; + + public static final String HEARTBEAT_TIMEOUT_KEY = "heartbeat.timeout"; + + public static final String CONNECT_TIMEOUT_KEY = "connect.timeout"; + + public static final String TIMEOUT_KEY = "timeout"; + + public static final String RETRIES_KEY = "retries"; + + public static final String PROMPT_KEY = "prompt"; + + public static final String DEFAULT_PROMPT = "dubbo>"; + + public static final String CODEC_KEY = "codec"; + public static final String DOWNSTREAM_CODEC_KEY = "codec.downstream"; + + public static final String SERIALIZATION_KEY = "serialization"; + + public static final String EXCHANGER_KEY = "exchanger"; + + public static final String TRANSPORTER_KEY = "transporter"; + + public static final String SERVER_KEY = "server"; + + public static final String CLIENT_KEY = "client"; + + public static final String ASYNC_KEY = "async"; + + public static final String TOKEN_KEY = "token"; + + public static final String METHOD_KEY = "method"; + + public static final String METHODS_KEY = "methods"; + + public static final String CHARSET_KEY = "charset"; + + public static final String RECONNECT_KEY = "reconnect"; + + public static final String SEND_RECONNECT_KEY = "send.reconnect"; + + public static final int DEFAULT_RECONNECT_PERIOD = 2000; + + public static final String SHUTDOWN_TIMEOUT_KEY = "shutdown.timeout"; + + public static final int DEFAULT_SHUTDOWN_TIMEOUT = 1000 * 60 * 15; + + public static final String PID_KEY = "pid"; + + public static final String TIMESTAMP_KEY = "timestamp"; + + public static final String CHECK_KEY = "check"; + + public static final String REGISTER_KEY = "register"; + + public static final String SUBSCRIBE_KEY = "subscribe"; + + public static final String GROUP_KEY = "group"; + + public static final String PATH_KEY = "path"; + + public static final String INTERFACE_KEY = "interface"; + + public static final String GENERIC_KEY = "generic"; + + public static final String FILE_KEY = "file"; + + public static final String WAIT_KEY = "wait"; + + public static final String CLASSIFIER_KEY = "classifier"; + + public static final String VERSION_KEY = "version"; + + public static final String REVISION_KEY = "revision"; + + public static final String DUBBO_VERSION_KEY = "dubbo"; + + public static final String HESSIAN_VERSION_KEY = "hessian.version"; + + public static final String DISPATHER_KEY = "dispather"; + + public static final String CHANNEL_HANDLER_KEY = "channel.handler"; + + public static final String DEFAULT_CHANNEL_HANDLER = "default"; + + public static final String ANY_VALUE = "*"; + + public static final String COMMA_SEPARATOR = ","; + + public static final Pattern COMMA_SPLIT_PATTERN = Pattern + .compile("\\s*[,]+\\s*"); + + public final static String PATH_SEPARATOR = "/"; + + public static final String REGISTRY_SEPARATOR = "|"; + + public static final Pattern REGISTRY_SPLIT_PATTERN = Pattern + .compile("\\s*[|;]+\\s*"); + + public static final String SEMICOLON_SEPARATOR = ";"; + + public static final Pattern SEMICOLON_SPLIT_PATTERN = Pattern + .compile("\\s*[;]+\\s*"); + + public static final String CONNECT_QUEUE_CAPACITY = "connect.queue.capacity"; + + public static final String CONNECT_QUEUE_WARNING_SIZE = "connect.queue.warning.size"; + + public static final int DEFAULT_CONNECT_QUEUE_WARNING_SIZE = 1000; + + public static final String CHANNEL_ATTRIBUTE_READONLY_KEY = "channel.readonly"; + + public static final String CHANNEL_READONLYEVENT_SENT_KEY = "channel.readonly.sent"; + + public static final String CHANNEL_SEND_READONLYEVENT_KEY = "channel.readonly.send"; + + public static final String COUNT_PROTOCOL = "count"; + + public static final String TRACE_PROTOCOL = "trace"; + + public static final String EMPTY_PROTOCOL = "empty"; + + public static final String ADMIN_PROTOCOL = "admin"; + + public static final String PROVIDER_PROTOCOL = "provider"; + + public static final String CONSUMER_PROTOCOL = "consumer"; + + public static final String ROUTE_PROTOCOL = "route"; + + public static final String SCRIPT_PROTOCOL = "script"; + + public static final String CONDITION_PROTOCOL = "condition"; + + public static final String MOCK_PROTOCOL = "mock"; + + public static final String RETURN_PREFIX = "return "; + + public static final String THROW_PREFIX = "throw"; + + public static final String FAIL_PREFIX = "fail:"; + + public static final String FORCE_PREFIX = "force:"; + + public static final String FORCE_KEY = "force"; + + public static final String MERGER_KEY = "merger"; + + /** + * 集群时是否排除非available的invoker + */ + public static final String CLUSTER_AVAILABLE_CHECK_KEY = "cluster.availablecheck"; + + /** + */ + public static final boolean DEFAULT_CLUSTER_AVAILABLE_CHECK = true; + + /** + * 集群时是否启用sticky策略 + */ + public static final String CLUSTER_STICKY_KEY = "sticky"; + + /** + * sticky默认值. + */ + public static final boolean DEFAULT_CLUSTER_STICKY = false; + + /** + * 创建client时,是否先要建立连接。 + */ + public static final String LAZY_CONNECT_KEY = "lazy"; + + /** + * lazy连接的初始状态是连接状态还是非连接状态? + */ + public static final String LAZY_CONNECT_INITIAL_STATE_KEY = "connect.lazy.initial.state"; + + /** + * lazy连接的初始状态默认是连接状态. + */ + public static final boolean DEFAULT_LAZY_CONNECT_INITIAL_STATE = true; + + /** + * 注册中心是否同步存储文件,默认异步 + */ + public static final String REGISTRY_FILESAVE_SYNC_KEY = "save.file"; + + /** + * 注册中心失败事件重试事件 + */ + public static final String REGISTRY_RETRY_PERIOD_KEY = "retry.period"; + + /** + * 重试周期 + */ + public static final int DEFAULT_REGISTRY_RETRY_PERIOD = 5 * 1000; + + /** + * 注册中心自动重连时间 + */ + public static final String REGISTRY_RECONNECT_PERIOD_KEY = "reconnect.period"; + + public static final int DEFAULT_REGISTRY_RECONNECT_PERIOD = 3 * 1000; + + public static final String SESSION_TIMEOUT_KEY = "session"; + + public static final int DEFAULT_SESSION_TIMEOUT = 60 * 1000; + + /** + * 注册中心导出URL参数的KEY + */ + public static final String EXPORT_KEY = "export"; + + /** + * 注册中心引用URL参数的KEY + */ + public static final String REFER_KEY = "refer"; + + /** + * callback inst id + */ + public static final String CALLBACK_SERVICE_KEY = "callback.service.instid"; + + /** + * 每个客户端同一个接口 callback服务实例的限制 + */ + public static final String CALLBACK_INSTANCES_LIMIT_KEY = "callbacks"; + + /** + * 每个客户端同一个接口 callback服务实例的限制 + */ + public static final int DEFAULT_CALLBACK_INSTANCES = 1; + + public static final String CALLBACK_SERVICE_PROXY_KEY = "callback.service.proxy"; + + public static final String IS_CALLBACK_SERVICE = "is_callback_service"; + + /** + * channel中callback的invokers + */ + public static final String CHANNEL_CALLBACK_KEY = "channel.callback.invokers.key"; + + @Deprecated + public static final String SHUTDOWN_WAIT_SECONDS_KEY = "dubbo.service.shutdown.wait.seconds"; + + public static final String SHUTDOWN_WAIT_KEY = "dubbo.service.shutdown.wait"; + + public static final String IS_SERVER_KEY = "isserver"; + + /** + * 默认值毫秒,避免重新计算. + */ + public static final int DEFAULT_SERVER_SHUTDOWN_TIMEOUT = 10000; + + public static final String ON_CONNECT_KEY = "onconnect"; + + public static final String ON_DISCONNECT_KEY = "ondisconnect"; + + public static final String RETURN_KEY = "return"; + + public static final String ON_INVOKE_METHOD_KEY = "oninvoke.method"; + + public static final String ON_RETURN_METHOD_KEY = "onreturn.method"; + + public static final String ON_THROW_METHOD_KEY = "onthrow.method"; + + public static final String ON_INVOKE_INSTANCE_KEY = "oninvoke.instance"; + + public static final String ON_RETURN_INSTANCE_KEY = "onreturn.instance"; + + public static final String ON_THROW_INSTANCE_KEY = "onthrow.instance"; + + public static final String OVERRIDE_PROTOCOL = "override"; + + public static final String PRIORITY_KEY = "priority"; + + public static final String RULE_KEY = "rule"; + + public static final String TYPE_KEY = "type"; + + public static final String RUNTIME_KEY = "runtime"; + + // when ROUTER_KEY's value is set to ROUTER_TYPE_CLEAR, RegistryDirectory will clean all current routers + public static final String ROUTER_TYPE_CLEAR = "clean"; + + public static final String DEFAULT_SCRIPT_TYPE_KEY = "javascript"; + + public static final String STUB_EVENT_KEY = "dubbo.stub.event"; + + public static final boolean DEFAULT_STUB_EVENT = false; + + public static final String STUB_EVENT_METHODS_KEY = "dubbo.stub.event.methods"; + + //invocation attachment属性中如果有此值,则选择mock invoker + public static final String INVOCATION_NEED_MOCK = "invocation.need.mock"; + + public static final String LOCAL_PROTOCOL = "injvm"; + + public static final String AUTO_ATTACH_INVOCATIONID_KEY = "invocationid.autoattach"; + + public static final String SCOPE_KEY = "scope"; + + public static final String SCOPE_LOCAL = "local"; + + public static final String SCOPE_REMOTE = "remote"; + + public static final String SCOPE_NONE = "none"; + + public static final String RELIABLE_PROTOCOL = "napoli"; + + public static final String TPS_LIMIT_RATE_KEY = "tps"; + + public static final String TPS_LIMIT_INTERVAL_KEY = "tps.interval"; + + public static final long DEFAULT_TPS_LIMIT_INTERVAL = 60 * 1000; + + public static final String DECODE_IN_IO_THREAD_KEY = "decode.in.io"; + + public static final boolean DEFAULT_DECODE_IN_IO_THREAD = true; + /* + * private Constants(){ } + */ + + public static class Attachments { + public static final String IS_ASYNC_KEY = "attachments.async"; + public static final String IS_ONEWAY_KEY = "attachments.oneway"; + public static final String INVOCATIONID_KEY = "attachments.invocation.id"; + } + +} diff --git a/dubbo-rpc/dubbo-rpc-default/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/RpcInvocationExt.java b/dubbo-rpc/dubbo-rpc-default/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/DecodeableRpcInvocation.java similarity index 92% rename from dubbo-rpc/dubbo-rpc-default/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/RpcInvocationExt.java rename to dubbo-rpc/dubbo-rpc-default/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/DecodeableRpcInvocation.java index 27e75dd77d5..3b6039bae6b 100644 --- a/dubbo-rpc/dubbo-rpc-default/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/RpcInvocationExt.java +++ b/dubbo-rpc/dubbo-rpc-default/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/DecodeableRpcInvocation.java @@ -39,7 +39,7 @@ /** * @author kimi */ -public class RpcInvocationExt extends RpcInvocation implements Codec, Decodeable { +public class DecodeableRpcInvocation extends RpcInvocation implements Codec, Decodeable { private Channel channel; @@ -49,7 +49,9 @@ public class RpcInvocationExt extends RpcInvocation implements Codec, Decodeable private Request request; - public RpcInvocationExt(Channel channel, Request request, InputStream is, byte id) { + private volatile boolean hasDecoded; + + public DecodeableRpcInvocation(Channel channel, Request request, InputStream is, byte id) { Assert.notNull(channel, "channel == null"); Assert.notNull(request, "request == null"); Assert.notNull(is, "inputStream == null"); @@ -60,12 +62,14 @@ public RpcInvocationExt(Channel channel, Request request, InputStream is, byte i } public void decode() throws Exception { - if (channel != null && inputStream != null) { + if (!hasDecoded && channel != null && inputStream != null) { try { decode(channel, inputStream); } catch (Throwable e) { request.setBroken(true); request.setData(e); + } finally { + hasDecoded = true; } } } diff --git a/dubbo-rpc/dubbo-rpc-default/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/RpcResultExt.java b/dubbo-rpc/dubbo-rpc-default/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/DecodeableRpcResult.java similarity index 91% rename from dubbo-rpc/dubbo-rpc-default/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/RpcResultExt.java rename to dubbo-rpc/dubbo-rpc-default/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/DecodeableRpcResult.java index 4d394c3c232..51af08ac4ea 100644 --- a/dubbo-rpc/dubbo-rpc-default/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/RpcResultExt.java +++ b/dubbo-rpc/dubbo-rpc-default/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/DecodeableRpcResult.java @@ -36,7 +36,7 @@ /** * @author kimi */ -public class RpcResultExt extends RpcResult implements Codec, Decodeable { +public class DecodeableRpcResult extends RpcResult implements Codec, Decodeable { private Channel channel; @@ -48,7 +48,9 @@ public class RpcResultExt extends RpcResult implements Codec, Decodeable { private Invocation invocation; - public RpcResultExt(Channel channel, Response response, InputStream is, Invocation invocation, byte id) { + private volatile boolean hasDecoded; + + public DecodeableRpcResult(Channel channel, Response response, InputStream is, Invocation invocation, byte id) { Assert.notNull(channel, "channel == null"); Assert.notNull(response, "response == null"); Assert.notNull(is, "inputStream == null"); @@ -98,12 +100,14 @@ public Object decode(Channel channel, InputStream input) throws IOException { } public void decode() throws Exception { - if (channel != null && inputStream != null) { + if (!hasDecoded && channel != null && inputStream != null) { try { decode(channel, inputStream); } catch (Throwable e) { response.setStatus(Response.CLIENT_ERROR); response.setErrorMessage(StringUtils.toString(e)); + } finally { + hasDecoded = true; } } } diff --git a/dubbo-rpc/dubbo-rpc-default/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/DubboCodec.java b/dubbo-rpc/dubbo-rpc-default/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/DubboCodec.java index 42e27e6b389..e7c3b289724 100644 --- a/dubbo-rpc/dubbo-rpc-default/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/DubboCodec.java +++ b/dubbo-rpc/dubbo-rpc-default/src/main/java/com/alibaba/dubbo/rpc/protocol/dubbo/DubboCodec.java @@ -84,8 +84,13 @@ protected Object decodeBody(Channel channel, InputStream is, byte[] header) thro } else if (res.isEvent()) { data = decodeEventData(channel, deserialize(s, channel.getUrl(), is)); } else { - data = new RpcResultExt(channel, res, + data = new DecodeableRpcResult(channel, res, new UnsafeByteArrayInputStream(readMessageData(is)), (Invocation) getRequestData(id), proto); + if (channel.getUrl().getParameter( + Constants.DECODE_IN_IO_THREAD_KEY, + Constants.DEFAULT_DECODE_IN_IO_THREAD)) { + ((DecodeableRpcResult) data).decode(); + } } res.setResult(data); } catch (Throwable t) { @@ -111,8 +116,13 @@ protected Object decodeBody(Channel channel, InputStream is, byte[] header) thro } else if (req.isEvent()) { data = decodeEventData(channel, deserialize(s, channel.getUrl(), is)); } else { - data = new RpcInvocationExt(channel, req, + data = new DecodeableRpcInvocation(channel, req, new UnsafeByteArrayInputStream(readMessageData(is)), proto); + if (channel.getUrl().getParameter( + Constants.DECODE_IN_IO_THREAD_KEY, + Constants.DEFAULT_DECODE_IN_IO_THREAD)) { + ((DecodeableRpcInvocation) data).decode(); + } } req.setData(data); } catch (Throwable t) {