Project: Dubbo (Orchestration & Management / Remote Procedure Call)
File: CHANGES.md

Please refer to https://github.com/apache/dubbo/releases for notes of future releases. Support Service Authentication https://github.com/apache/dubbo/issues/5461 Removing the internal JDK API from FileSystemDynamicConfiguration Refactor the APT test-cases implementation of dubbo-metadata-processor in Java 9+ Remove feature envy JsonRpcProtocol support Generalization Reduce object allocation for ProtocolUtils.serviceKey Reduce object allocation for ContextFilter.invoke Fixed bugs reported from 2.7.5 or lower versions, check for details. Filter refactor, the callback method `onResponse` annotated as @Deprecated has been removed, users of lower versions that have extended Filter implementations and enabled Filter callbacks should be careful of this change. RpcContext added some experimental APIs to support generic Object transmission. Support HTTP/2 through gRPC, offers all features supported by HTTP/2 and gRPC Stream communication: client stream, server stream and bi-stream. Reactive stream style RPC call. Back pressure based on HTTP/2 flow-control mechanism. TLS secure transport layer. Define service using IDL Protobuf support for native Dubbo Define service using IDL Protobuf serialization TLS for netty4 server New SPI for dynamically adding extra parameters into provider URL, especially env parameters. [BETA]* Brand new Service Discovery mechanism: Service Reflection - instance (application) level service discovery. [BETA]* Brand new API for bootstraping Dubbo projects Overall performance improved by nearly 30% compared to v2.7.3 (by QPS in certain circumstances) Improved consumer side thread model to avoid thread allocation and context switch, especially useful for services serving big traffic. Load balance strategy among multiple registries: Preferred Same zone first Weighted LB The first one available New callback SPI for receiving address change notifications Refactoring of config module check 2.7.5 milestone for details. Enhance ProtobufTypeBuilder support generate type definition which contains Bytes List or Bytes Map. #5083 Using the ID of Dubbo Config as the alias of Bean. #5094 tag router supports anyhost. #4431 optimize generic invoke. #4076 dubbo zookeeper registry too slow #4828 use consul with group and version. #4755 qos support host config. #4720 migrate http protocol #4781 Some unit test optimization. #5026 #4803 #4687 Apollo namespace optimization. #5105 Simplify dubbo-common transitive dependencies. #5107 Delete 'config.' prefix for url generated from ConfigCenterConfig. #5001 fix set generic method error. #5079 Add support for overriding Map properties in AbstractConfig.refresh. #4882 Fix travis javax.ex dependency issue. (unit test) Fix: ExtensionLoader load duplicate filterno log or exception. #4340 When the provider interrupts abnormally, the consumer cannot return quickly and still waits for the timeout to end. #4694 Fix register config not take effect because of url simplified #4397 Don't support metadata for generic service. #4641 Avoid resize in ClassUtils.java. #5009 default attribute in <dubbo:registry> doesn't work as expected. #4412 make RegistryDirectory can refresh the invokers when providers number become 0 when using nacos registry. #4793 Multiple @Reference annotations only have one effect #4674 Fix RpcContext.getContext().getRemoteApplicationName() returns null #4351 Security issue: upgrade fastjson version to 1.2.60. #5018 nacos-registry:serviceName split error #4974 AbstractConfig.java-getMetaData set default depend on getmethod sequence #4678 fix protocol register set false not work. #4776 Fix: In Rest protocol, the limitation of Dubbo-Attachments. #4898 The logic of org.apache.dubbo.config.MonitorConfig#isValid is incorrect #4892 protostuff return stackoverflow and other error msg #4861 fix method parameter bean generation. #3796 replace hardcode with regex pattern #4810 Fix warm up issue when provider's timestamp is bigger than local machine's timestamp. #4870 Fix use generic invocation via API , lost #4238 ion" value #4784 In consumer side the app cannot catch the exception from provider that is configured serialization="kryo". #4238 fix StringUtils#isBlank #4725 when the interfaceName of the Reference annotation has duplicated,the exception is

#4160 when anonymity bean is defined in spring contextdubbo throw npe # add Thread ContextClassLoader #4712 Fix judgment ipv4 address #4729 The compilation of static methods should be excluded when generating the proxy. #4647 check EOF of inputstream in IOUtils.write #4648 Asynchronous support Unified asynchronous and synchronous callback process, exception scenario triggers onError callback, #4401 Performance degradation caused by CompletableFuture.get() in JDK1.8 environment, #4279 Configuration Center ConfigCenter custom namespace does not take effect, #4411 Unify the models implemented by several configuration centers such as Zookeeper, Nacos, and Etcd. Please refer to the description for possible incompatibility issues, #4388 Adjust Override Coverage Rule Center Priority: Service Level > Application Level, #4175 2.6.x compatibility Support Zipkin tracing feature provided by Zipkin officially, #3728, #4471 DubboComponentScan supports simultaneous scanning of annotations under the `com.alibaba.` and `org.apache.*` packages, #4330 The Nacos Registration Center only subscribes to the address list and no longer subscribes to configuration information, #4454. Support to read the environment configuration from the specified location, which can be specified by -D or OS VARIABLE. Please refer to Fix consumer cannot downgrade to providers with no tags when there's no tagged providers can match, #4525 Some other bugfixes, #4346 #4338 #4349 #4377 onError #4401 CompletableFuture.get()JDK1.8 #4279 ConfigCenternamespace #4411 ZookeeperNacosEtcd#4388 Override > #4175 2.6.x zipkinDubbo-2.6 API #3728, #4471 DubboComponentScan `com.alibaba.` `org.apache.` #4330 Nacos #4454 -DOS VARIABLE #4525 bugfix#4346 #4338 #4349 #4377 nacos config center / metadata center support. Etcd support as config center and metadata center Support Redis cluster in Metadata Report. add new module for Dubbo Event. Support multiple registry that including some effective registry, such as zk, redis support nacos metadata Dubbo support Google Protobuf generic reference Merge serialization-native-hessian-for-apache-dubbo into incubator-dubbo Merge rpc-native-thrift-for-apache-dubbo into incubator-dubbo add socks5 proxy support Integrate with SOFARegistry Introduce CompletableFuture $invokeAsync for GenericService, now, for generic call, you can use: $invoke for sync method call with normal return type. $invokeAsync for async method call with CompletableFuture<T> signature. Performance tuning for TimeoutTask in DefaultFuture. Add a script to check dependencies license. Change DynamicConfiguration definition to better adapt to Apollo's namespace storage model. use equal explicit class to replace anonymous class Separate Constants.java into some SubConstants Class Need to enhance DecodeableRpcResult error message Provide more meaningful binary releases. remove useless module-dubbo-test-integration complete lookup method of consul registry and add integration test Metrics Service Update nacos-client to 1.0.0 Fluent style builder API support Update readme to remove the incubator prefix update erlang link optimize array code style optimize some code style remove useless module-dubbo-test-integration optimize constant naming style Use maven CI friendly versions: revision. remove-parse-error-log Complete xsd definition for ConfigCenterConfig. add remoteApplicationName field in RpcContext @Reference can't match the local @Service beans. remove some illegal licence: jcip-annotations, jsr173_api. Qos port can't be disabled by externalized property. Fix consumer will generate wrong stackTrace. nacos registry serviceName may conflict. The client loses the listener when the network is reconnected. fix registry urls increase forever when recreate reference proxy. In dubbo 2.7.1the watcher processor of zookeeper client throw Nullpointexception. ReferenceConfig initialized not changed to false once subscribe throws exception dubbo registry extension compatibility with dubbo 2.6.x. Annotation mode cannot set service parameters in 2.7.0. compatibility with Zipkin. do local export before register any listener. Cannot recognize 2.6.x compatible rules from dubbo-admin. In Dubbo 2.7.0, the provider can't be configured to async dubbox compatibility

providers repeat register consul registry: NullPointerException cannot publish local ip address when local ip and public ip exist at the same time roll back change made by 3520. dubbo-registry-nacos module is not bundled into Apache Dubbo 2.7.1 switch from CopyOnWriteArrayList to regular list in order to avoid potential UnsupportedOperationException Serialization ContentTypeId conflict between avro protocol and protocoluff protocol delay export function doesn't work. org.apache.dubbo.rpc.support.MockInvoker#getInterface should not return null dubbo TagRouter does not work with dubbo:parameter make protocols a mutable list (a concrete ArrayList) javadoc lint issue The etcd3 lease should be recycled correctly telnet can't work when parameter has no nullary constructor and some fields is primitive Sort added router list before set the 'routers' field of the RouterChain fix injvm and local call spelling error in org.apache.dubbo.common.extension.AdaptiveClassCodeGenerator#generateReturnAndInovation metadata report doesn't support redis with password The dubbo protostuff protocol serializes the bug of java.sql.Timestamp do not filter thread pool by port 'dubbo-serialization-gson' maven package error AbstractRegistry will be endless loop, when doSaveProperties method have no permission to save the file fix fastjson serialization with generic return type The dubbo-serialization -api modules should not dependency on third-party jar packages when using protostuff to serialize, there is not to check whether the data is null bugfix and enhancement for async 'zkclient' extension for 'org.apache.dubbo.remoting.zookeeper.ZookeeperTransporter' is removed from Dubbo 2.7.1, and 'curator' extension becomes the default extension. If you happen to config your application to use 'zkclient' explicitly, pls. switch to use 'curator' instead. service register support on nacos support consul as registry center, config center and metadata center service registry support/config center support on etcd metrics support in dubbo 2.7.1 @Argument @Method support Should make annotation easier to use in multiple items circumstance NoSuchMethodError are thrown when add custom Filter using dubbo2.6.5 and JDK1.6 and upgrade to dubbo2.7.0 introduce dubbo-dependencies-zookeeper Zookeeper ConfigCenter reuse the client abstraction and connection session Start to use IdleStateHandler in Netty4 Support multiple shared links Optimize heartbeat AccessLogFilter simple date format reduce instance creation Support wildcard ip for tag router rule. ScriptRouter should cache CompiledScript Optimize compareTo in Router to guarantee consistent behaviour. RMI protocol doesn't support generic invocation a more elegant way to enhance HashedWheelTimer obtain local address incorrectly sometimes in dubbo implement pull request #3412 on master branch enhancement for event of response (follow up for pull request #3043) bump up hessian-lite version #3423 cannot register REST service in 2.7 due to the changes in RestProtoco#getContextPath Conflict between curator client and dubbo is there a problem in NettyBackedChannelBuffer.setBytes(...)? fix heartbeat internal logic issue in RedisRegistry leads to services cannot be discovered. Multicast demo fails with message "Can't assign requested address" Fix thrift protocol, use path to locate exporter. cannot use override to modify provider's configuration when hessian protocol is used Condition is not properly used ? connectionMonitor in RestProtocol seems not work fail to parse config text with white space @Reference check=false doesn't take effect monitor's cluster config is set to failsafe and set to failsafe only A question for ReferenceConfigCache. referenceconfig#destroy never invoke unregister Fix when qos is disable,log will print every time service group is not supported in generic direct invocation setOnreturn doesn't take effect in async generic invocation Fix timeout filter not work in async way java.lang.NumberFormatException: For input string: "" NPE occurred when the configuration was deleted NPE when package of interface is empty NPE when exporting rest service using a given path. NullPointerException happened when using SpringContainer.getContext() Why does not tomcat throw an exception when `server.start` failed with a socket binding error. No such extension org.apache.dubbo.metadata.store.MetadataReportFactory by name redis dubbo

NoClassDefFoundError when use springboot NPE occurs when use @Reference in junit in spring boot application When refer the same service with more than one @References(with different configs) on consumer side, only one take effect consumer always catch java.lang.reflect.UndeclaredThrowableException for the exception thrown from provider dubbo2.7.0 com.alibaba.com.caucho.hessian.io.HessianProtocolException: 'com.alibaba.dubbo.common.URL' could not be instantiated Close Resources Properly SPI entires dup by 3 times. provider gets wrong interface name from attachment when use generic invocation in 2.6.3 HashedWheelTimer's queue gets full Modify MetadataReportRetry ThreadName Keep interface key in the URL in simplify mode when it's different from path. nc is not stable in dubbo's bootstrap script Requirements: Java 8+ required Please check for notes and possible compatibility issues for upgrading from 2.6.x or lower to 2.7.0. Enhancement of service governance rules. Enriched Routing Rules. Conditional Routing. Supports both application-level and service-level conditions. Tag Routing. Newly introduced to better support traffic isolation, such as grey deployment. Decoupling governance rules with the registry, making it easier to extend. Apollo and Zookeeper are available in this version. Nacos support is on the way... Application-level Dynamic Configuration support. Use YAML as the configuration language, which is more friendly to read and use. Externalized Configuration. Supports reading `dubbo.properties` hosted in remote centralized configuration center - centralized configuration. Simplified registry URL. With lower Registry memory use and less notification pressure from Service Directory, separates Configuration notification from Service Discovery. Metadata Center. A totally new concept since 2.7.0, used to store service metadata including static configuration, service definition, method signature, etc.. By default, Zookeeper and Redis are supported as the backend storage. Will work as the basis of service testing, mock and other service governance features going to be supported in . Asynchronous Programming Model (only works for Dubbo protocol now) Built-in support for the method with CompletableFuture<T> signature. Server-side asynchronous support, with an AsyncContext API works like Servlet 3.0. Asynchronous filter chain callback. Serialization Extension: Protobuf. Caching Policy Extension: Expiring Cache. Load Balancing strategy enhancement: ConsitentHash #2190, LeastActive #2171, Random #2597, RoundRobin #2650. Third-party dependency upgrading. Switch default remoting to Netty 4. Switch default Zookeeper client to Curator. Upgrade Jetty to 9.x. IPV6 support #2079. Performance tuning, check hanging requests on a closed channel, make them return directly #2185. Fixed the serialization problem of JDK primitive types in Kryo #2178. Fixed the problem of failing to notify Consumer as early as possible after the Provider side deserialization failed #1903. We have always keep compatibility in mind during the whole process of 2.7.0. We even want old users to upgrade with only on pom version upgrade, but it's hard to achieve that, especially when considering that we have the package renamed in this version, so we had some tradeoffs. If you only used the Dubbo's most basic features, you may have little problems of upgrading, but if you have used some advanced features or have some SPI extensions inside, you'd better read the upgrade notifications carefully. The compatibility issues can be classified into the following 5 categories, for each part, there will have detailed dos and don'ts published later in the official website. Interoperability between 2.7.0 and lower versions Package renaming com.alibaba.dubbo -> org.apache.dubbo Simplification of registered URLs Service Governance Rules Configuration Enhancement / New feature tag route. #3065 Use Netty4 as default Netty version. #3029 upporting Java 8 Date/Time type when serializing with Kryo #3519 support config telnet #3511 add annotation driven in MethodConfig and

#2603 add nacos-registry module #3296 add `protocol` attribute in `@Rerefence` #3555 *support the hierarchical interface in @Service #3251 change the default behavior in `@EnableDubboConfig.multiple()` #3193 inline source code of `spring-context-support` #3192 Simplify externalized configuration of Dubbo Protocol name #3189 BugFix update hessian-lite to 2.3.5, fix unnecessary class load #3538 Fix unregister when client destroyedreferenceconfig#destroy) #3502 SPI entires dup by 3 times #3315 fix Consumer throws RpcException after RegistryDirectory notify in high QPS #2016 fix NPE in @Reference when using Junit to test dubbo service #3429 fix consumer always catch java.lang.reflect.UndeclaredThrowableException for any exception throws in provider #3386 fix the priority of `DubboConfigConfigurationSelector ` #2897 fix `@Rerefence#parameters()` not work #2301 Enhancements / Features Reactor the generation rule for @Service Bean name Introduce a new Spring ApplicationEvent for ServiceBean exporting add javadoc to dubbo-all module good first issue. Optimize LeastActiveLoadBalance and add weight test case. Smooth Round Robin selection. Add ability to turn off SPI auto injection, special support for generic Object type injection. Bugfixes @Service(register=false) is not work. Our customized serialization id exceeds the maximum limit, now it cannot work on 2.6.2 anymore. Consumer throws RpcException after RegistryDirectory notify in high QPS. Annotation @Reference can't support to export a service with a sync one and an async one . `org.apache.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor#generateReferenceBeanCacheKey` has a bug. 2.6.x Spring Event & Bugfix. Fix incorrect descriptions for dubbo-serialization module. A empty directory dubbo-config/dubbo-config-spring/src/test/resources/work after package source tgz. Fixed 2.6.x branch a minor issue with doConnect not using getConnectTimeout() in NettyClient. (No issue). Bean name of @service annotated class does not resolve placeholder. Issues and Pull Requests, check . Enhancements / Features Support access Redis with password, Support char array for GenericService, Direct return when the server goes down abnormally, Add log for trouble-shooting when qos start failed, PojoUtil support subclasses of java.util.Date, Add ip and application name for MonitorService, New ASCII logo, Bugfixes Change consumer retries default value from 0 to 2, Fix the problem that attachment is lost when retry, Fix NPE when telnet get a null parameter, UT stability Improve the stability by changing different port, setting timeout to 3000ms, Issues and Pull Requests, check . Enhancements / Features Support implicit delivery of attachments from provider to consumer, #889 Support inject Spring bean to SPI by bean type, #1837 Add generic invoke and attachments support for http&hessian protocol, #1827 Get the real methodname to support consistenthash for generic invoke, #1872 Remove validation key from provider url on Consumer side, config depedently, #1386 Introducing the Bootstrap module as a unified entry for Dubbo startup and resource destruction, #1820 Open TCP_NODELAY on Netty 3, #1746 Support specify proxy type on provider side, #1873 Support dbindex in redis, #1831 Upgrade tomcat to 8.5.31, #1781 Bugfixes ExecutionDispatcher meet with user docs, #1089 Remove side effects of Dubbo custom loggers on Netty logger, #1717 Fix isShutdown() judge of Dubbo biz threadpool always return true, #1426 Selection of invoker node under the critical condition of only two nodes, #1759 Listener cann't be removed during unsubscribe when use ZK as registry, #1792 URL parsing problem when user filed contains '@', #1808 Check null in CacheFilter to avoid NPE, #1828 Fix potential deadlock in DubboProtocol, #1836 Restore the bug that attachment has not been updated in the RpcContext when the Dubbo built-in retry mechanism is triggered, #1453 Some other small bugfixes Performance Tuning ChannelState branch prediction optimization. #1643 Optimize AtomicPositiveInteger, less memory and compute cost, #348 Introduce embedded Threadlocal to replace the JDK implementation, #1745 Hessian-lite