blob: 657c9b2b5a1e6dff0de2b020e6b03cf5ac001bbf [file] [log] [blame]
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Apache Dubbo – Documentation</title><link>https://dubbo.apache.org/en/docs/</link><description>Recent content in Documentation on Apache Dubbo</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="https://dubbo.apache.org/en/docs/index.xml" rel="self" type="application/rss+xml"/><item><title>Docs3-V2: 0-1 - thread pool resource exhausted</title><link>https://dubbo.apache.org/en/docs3-v2/java-sdk/faq/0/1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/docs3-v2/java-sdk/faq/0/1/</guid><description>
&lt;p>The server&amp;rsquo;s thread resources are exhausted.
By default, the number of business threads on the Dubbo server is 200. If the number of concurrent requests exceeds 200, new requests will be rejected and this error will be thrown.&lt;/p>
&lt;h3 id="possible-reason">Possible Reason&lt;/h3>
&lt;ol>
&lt;li>The amount of concurrent requests from the Consumer is too large, causing the number of threads created on the Provider to exceed the limit.&lt;/li>
&lt;li>It is possible that when the Provider side executes the business, the thread is blocked because the business calls the external application interface, which makes the thread pool unable to recycle the thread.&lt;/li>
&lt;/ol>
&lt;h3 id="troubleshooting-and-resolution-steps">Troubleshooting and resolution steps&lt;/h3>
&lt;ul>
&lt;li>Enable Dubbo&amp;rsquo;s access log function to check whether there are a large number of calls to RPC services in a short period of time.&lt;/li>
&lt;li>Check the status of each thread in the thread pool through the &lt;code>jps&lt;/code> and &lt;code>jstack&lt;/code> instructions to see if there is any business calling the external application interface to cause blocking.&lt;/li>
&lt;li>If the amount of concurrent requests from the Consumer is too large, then adjust the &lt;code>dubbo.provider.threads&lt;/code> parameter on the Provider side to increase the number of Dubbo thread pools.&lt;/li>
&lt;li>If the QPS of the Provider business is too large to be handled by the current number of servers, then increase the number of Provider-side servers so that more servers can share the pressure.&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>The FAQ page of this error code refers to &lt;a href="https://github.com/StabilityMan/StabilityGuide/blob/master/docs/diagnosis/plugin/rpc/%E7%B3%BB%E7%BB%9F%E7%A8%B3%E5%AE%9A%E6%80%A7%E2%80%94%E2%80%94Dubbo%E5%B8%B8%E8%A7%81%E9%94%99%E8%AF%AF%E5%8F%8A%E8%A7%A3%E5%86%B3%E6%96%B9%E6%B3%95.md">&amp;ldquo;Dubbo Common Errors and Solutions&amp;rdquo;&lt;/a>.
Articles cited are compiled under license &lt;a href="http://creativecommons.org/licenses/by/4.0/">CC-BY-4.0&lt;/a>. Thanks to the original author here.&lt;/p>
&lt;/blockquote></description></item><item><title>Docs3-V2: 1-1 - Address Illegal</title><link>https://dubbo.apache.org/en/docs3-v2/java-sdk/faq/1/1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/docs3-v2/java-sdk/faq/1/1/</guid><description>
&lt;p>This log can be ignored, service version or grouping mismatch. Appears only in the zookeeper registry, this check has been removed in version 3.1.7.&lt;/p>
&lt;h3 id="possible-reason">possible reason&lt;/h3>
&lt;ol>
&lt;li>The &lt;code>service.group&lt;/code> configured on the Provider side does not match the &lt;code>reference.group&lt;/code> configured on the Consumer side (that is, the configuration of the service group).&lt;/li>
&lt;li>The &lt;code>service.version&lt;/code> configured on the Provider side does not match the &lt;code>reference.version&lt;/code> configured on the Consumer side (that is, the configuration of the service version).&lt;/li>
&lt;/ol>
&lt;h3 id="troubleshooting-and-resolution-steps">Troubleshooting and resolution steps&lt;/h3>
&lt;p>Can be ignored, this check has been removed in version 3.1.7.&lt;/p></description></item><item><title>Docs3-V2: 2-1 - Routing execution failed</title><link>https://dubbo.apache.org/en/docs3-v2/java-sdk/faq/2/1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/docs3-v2/java-sdk/faq/2/1/</guid><description>
&lt;h2 id="routing-address-execution-failed">Routing address execution failed&lt;/h2></description></item><item><title>Docs3-V2: 2.x to 3.x Operation Guide</title><link>https://dubbo.apache.org/en/docs3-v2/java-sdk/upgrades-and-compatibility/2.x-to-3.x-compatibility-guide/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/docs3-v2/java-sdk/upgrades-and-compatibility/2.x-to-3.x-compatibility-guide/</guid><description>
&lt;h2 id="benefits-of-upgrading-to-dubbo-3x">Benefits of upgrading to Dubbo 3.X&lt;/h2>
&lt;p>Dubbo3 still maintains the classic architecture of 2.x. Its main responsibility is to solve the communication between microservice processes, and to better manage and control microservice clusters through rich service governance (such as address discovery, traffic management, etc.); The upgrade of the framework is comprehensive, reflected in almost every aspect of the core Dubbo features, through the upgrade to achieve a comprehensive improvement in stability, performance, scalability, and ease of use.&lt;/p>
&lt;p>&lt;img src="https://dubbo.apache.org/imgs/v3/concepts/architecture-1.png" alt="architecture-1">&lt;/p>
&lt;ul>
&lt;li>**Universal communication protocol. ** The new RPC protocol should abandon the private protocol stack, use the more general HTTP/2 protocol as the transport layer carrier, and use the standardized features of the HTTP protocol to solve the problems of traffic versatility and penetration, so that the protocol can better respond Scenarios such as front-end and back-end docking, gateway proxy, etc.; supports the Stream communication mode, which meets the demands of different business communication models and brings greater throughput to the cluster.&lt;/li>
&lt;li>**For millions of cluster instances, the cluster is highly scalable. ** With the promotion of micro-service practices, the scale of micro-service cluster instances is also constantly expanding, which benefits from the characteristics of light-weight micro-services and easy horizontal expansion, but also brings a burden to the entire cluster capacity, especially It is some centralized service governance components; Dubbo3 needs to solve various resource bottlenecks caused by the expansion of instance scale, and realize truly unlimited horizontal expansion.&lt;/li>
&lt;li>**Comprehensively embrace cloud native. **&lt;/li>
&lt;/ul>
&lt;h2 id="dubbo-30-new-features">Dubbo 3.0 new features&lt;/h2>
&lt;p>The new features provided by Dubbo 3.0 include:&lt;/p>
&lt;ul>
&lt;li>** New address discovery model (application-level service discovery). **
&lt;ul>
&lt;li>See &lt;a href="https://dubbo.apache.org/en/docs3-v2/java-sdk/upgrades-and-compatibility/service-discovery/service-discovery-samples/">Application-Level Service Discovery Migration Samples&lt;/a>.&lt;/li>
&lt;li>See &lt;a href="https://dubbo.apache.org/en/docs3-v2/java-sdk/upgrades-and-compatibility/service-discovery/migration-service-discovery/">Migration steps for application-level service discovery&lt;/a>&lt;/li>
&lt;li>See &lt;a href="https://dubbo.apache.org/en/docs3-v2/java-sdk/upgrades-and-compatibility/service-discovery/service-discovery-rule/">Description of application-level service discovery address migration rules&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>**The next generation of the HTTP/2-based Triple protocol. **
&lt;ul>
&lt;li>See &lt;a href="https://dubbo.apache.org/en/docs3-v2/java-sdk/upgrades-and-compatibility/migration-triple/">Triple Protocol Migration Steps&lt;/a>&lt;/li>
&lt;li>See &lt;a href="https://dubbo.apache.org/en/docs3-v2/java-sdk/reference-manual/protocol/triple/guide/">Triple protocol usage&lt;/a>&lt;/li>
&lt;li>See &lt;a href="https://dubbo.apache.org/en/docs3-v2/java-sdk/reference-manual/protocol/triple/overview/">Triple Protocol Design and Implementation&lt;/a>.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>**Unified routing rules. **
&lt;ul>
&lt;li>See &lt;a href="https://dubbo.apache.org/en/docs3-v2/java-sdk/advanced-features-and-usage/traffic/mesh-style/">Design and Implementation of Unified Routing Rules&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h2 id="compatibility-check-before-upgrade">Compatibility check before upgrade&lt;/h2>
&lt;p>In the process of cross-version upgrade, the existing risks are from big to small: directly modify Dubbo source code -&amp;gt; expand based on Dubbo SPI extension points -&amp;gt; use methods based on API or Spring.&lt;/p>
&lt;h3 id="1-directly-modify-dubbo-source-code">1. Directly modify Dubbo source code&lt;/h3>
&lt;p>For those who need to directly modify this part of Dubbo source code, the modifying party must judge whether it works normally in the higher version. For this non-standard behavior, Dubbo cannot guarantee its previous compatibility. In addition, the modification of Dubbo at runtime through javagent or asm is also within this scope. Most of these modifications can be detected by the scanning tools provided below.&lt;/p>
&lt;h3 id="2-spi-extension">2. SPI extension&lt;/h3>
&lt;h4 id="incompatibilities">Incompatibilities&lt;/h4>
&lt;p>For SPI extensions, except that the two mechanisms of application-level service direction and EventDispatcher have been destructively modified in 3.x, most of the extensions provided in 2.7.x are also provided in 3.x. There are two areas to focus on in this section:&lt;/p>
&lt;ul>
&lt;li>Event bus: Due to the complexity of event management, the support of EventDispatcher and EventListener in Dubbo 3.x has been removed. If there is a use of the corresponding extension mechanism, please consider refactoring to an extension corresponding to the Dubbo function.&lt;/li>
&lt;li>Application-level service discovery: The overall mechanism of application-level service discovery in Dubbo 2.7 has been completely refactored in Dubbo 3.x, and the performance and stability of functions have been greatly improved. Therefore, we recommend that you do not use the application-level service discovery mechanism in Dubbo 2.7. If there is a corresponding extension, you can re-verify the implementation based on the new code after upgrading to Dubbo 3.x (most APIs for application-level service discovery are forward Compatible).&lt;/li>
&lt;/ul>
&lt;h4 id="optimization-items-optional">Optimization items (optional)&lt;/h4>
&lt;p>In addition, Dubbo 3.x has optimized the working mechanism of some extension points, which can greatly improve the performance of the application.&lt;/p>
&lt;ul>
&lt;li>
&lt;ol>
&lt;li>Interceptor mechanism&lt;/li>
&lt;/ol>
&lt;/li>
&lt;/ul>
&lt;p>Dubbo can intercept requests based on Filter interceptors. In Dubbo 2.7, it is supported to intercept the request after the routing address is selected. In Dubbo 3.x, a new ClusterFilter mechanism is abstracted, which can greatly reduce the memory usage, and has great benefits for ultra-large-scale clusters.
If you have some interceptors on the consumer side that are implemented based on the Filter mechanism, and if there is no logic that is strongly bound to the remote IP address, we recommend that you add the corresponding &lt;code>org.apache.dubbo.rpc.Filter&lt;/code> SPI extension point Migrated to the new SPI extension point &lt;code>org.apache.dubbo.rpc.cluster.filter.ClusterFilter&lt;/code>. The method definitions of the two interfaces are exactly the same.&lt;/p>
&lt;ul>
&lt;li>
&lt;ol start="2">
&lt;li>Router -&amp;gt; StateRouter&lt;/li>
&lt;/ol>
&lt;/li>
&lt;/ul>
&lt;p>Dubbo provides Router, the ability to dynamically select and route, and most of the service governance capabilities are also implemented based on this Router extension point. In Dubbo 3.x, Dubbo abstracts a new StateRouter mechanism based on Router, which can greatly optimize address selection performance and memory usage. We will publish more about StateRouter in subsequent documents.&lt;/p>
&lt;h3 id="3-api--spring-usage">3. API / Spring usage&lt;/h3>
&lt;p>For the use based on API or Spring, Dubbo 3.x and 2.7.x are used in the same way. In Dubbo 3.x, some invalid configurations are strongly checked, and this part of the exception will directly report an error during the startup process. , please follow the prompts to modify.&lt;/p>
&lt;h2 id="upgrade-process">Upgrade process&lt;/h2>
&lt;h3 id="1-dependency-upgrade">1. Dependency upgrade&lt;/h3>
&lt;p>If you use Nacos as the registration center, due to the support of Nacos features, you need to upgrade Nacos Server to 2.x before upgrading to Dubbo 3.x (refer to the document &lt;a href="https://nacos.io/zh-cn/docs/v2/upgrading/2.0.0-upgrading.html">https://nacos.io/zh-cn/docs/v2 /upgrading/2.0.0-upgrading.html&lt;/a>), and then upgrade the Nacos Client of the application . No processing is required if using a Zookeeper registry.
If you are using Spring Cloud Alibaba Dubbo for access, please upgrade to xxx due to changes in some internal APIs of Dubbo.&lt;/p>
&lt;p>Please upgrade to the latest version 3.1.3 for Dubbo dependencies. Dubbo and the corresponding springboot starter GAV are as follows.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-xml" data-lang="xml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">&amp;lt;dependency&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;groupId&amp;gt;&lt;/span>org.apache.dubbo&lt;span style="color:#268bd2">&amp;lt;/groupId&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;artifactId&amp;gt;&lt;/span>dubbo&lt;span style="color:#268bd2">&amp;lt;/artifactId&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;version&amp;gt;&lt;/span>3.1.3&lt;span style="color:#268bd2">&amp;lt;/version&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">&amp;lt;/dependency&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">&amp;lt;dependency&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;groupId&amp;gt;&lt;/span>org.apache.dubbo&lt;span style="color:#268bd2">&amp;lt;/groupId&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;artifactId&amp;gt;&lt;/span>dubbo-spring-boot-starter&lt;span style="color:#268bd2">&amp;lt;/artifactId&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;version&amp;gt;&lt;/span>3.1.3&lt;span style="color:#268bd2">&amp;lt;/version&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">&amp;lt;/dependency&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="2-gray-scale-upgrade">2. Gray scale upgrade&lt;/h3>
&lt;p>The Dubbo 3 upgrade has no special restrictions on the release process, and it can be released according to normal business.
Since Dubbo is undergoing changes and upgrades across major versions, please release as many batches as possible during the release, and at the same time increase the time interval between the first batch and the second batch of releases, and make sufficient observations.
During the publishing process, we recommend that you first upgrade the downstream of the application (that is, the service provider), and then proceed with subsequent publishing after verifying that the service is processed normally.&lt;/p>
&lt;h3 id="3-upgrade-observation-indicators">3. Upgrade observation indicators&lt;/h3>
&lt;p>During the release process, there are the following latitude indicators to judge whether there is a problem with the upgrade.&lt;/p>
&lt;ul>
&lt;li>CPU, memory usage of the machine&lt;/li>
&lt;li>Interface request success rate&lt;/li>
&lt;li>Interface Request RT&lt;/li>
&lt;li>Log error message&lt;/li>
&lt;li>Does the custom extension behave as expected&lt;/li>
&lt;/ul>
&lt;h2 id="precautions">Precautions&lt;/h2>
&lt;h3 id="1-application-level-service-discovery">1. Application-level service discovery&lt;/h3>
&lt;p>Due to design problems in the application-level service discovery model of Dubbo 2.7, a large number of format changes have been made in Dubbo 3.x, so the application-level service discovery of 2.7.x and 3.x may not be able to subscribe to each other. sex. Although Dubbo will eliminate unrecognized instances, from the perspective of stability, if you enable the application-level service discovery feature in 2.7.x (not registered by default in 2.7.x), we recommend first Turn it off, and turn it on again after upgrading to 3.x.&lt;/p></description></item><item><title>Docs3-V2: 3-1 - Failed to convert address to Invoker</title><link>https://dubbo.apache.org/en/docs3-v2/java-sdk/faq/3/1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/docs3-v2/java-sdk/faq/3/1/</guid><description>
&lt;h2 id="possible-reason">Possible Reason&lt;/h2>
&lt;ol>
&lt;li>
&lt;p>The protocol configured on the client side does not match the protocol configured on the server side. (For example, the protocol configured by the client is the Dubbo protocol, but the server can only provide services of the Rest protocol.)&lt;/p>
&lt;/li>
&lt;li>
&lt;p>The registration center (or configuration center) is unreliable and pushes illegal data.&lt;/p>
&lt;/li>
&lt;/ol>
&lt;h2 id="troubleshooting-and-resolution-steps">Troubleshooting and resolution steps&lt;/h2>
&lt;ol>
&lt;li>Check the protocol configuration of both the provider and the consumer.&lt;/li>
&lt;li>Update the version of the registry.&lt;/li>
&lt;/ol>
&lt;p style="margin-top: 3rem;"> &lt;/p></description></item><item><title>Docs3-V2: 4-1 - Unsupported protocol</title><link>https://dubbo.apache.org/en/docs3-v2/java-sdk/faq/4/1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/docs3-v2/java-sdk/faq/4/1/</guid><description>
&lt;h2 id="possible-reason">Possible Reason&lt;/h2>
&lt;p>This situation may occur in the scenario of custom Protocol. Dubbo&amp;rsquo;s SPI mechanism cannot find the Protocol specified in the URL.&lt;/p>
&lt;h2 id="troubleshooting-and-resolution-steps">Troubleshooting and resolution steps&lt;/h2>
&lt;ol>
&lt;li>Make sure that the Consumer has dependencies on the Protocol used by the server.&lt;/li>
&lt;li>Make sure that the name of the SPI configuration file of the Protocol&amp;rsquo;s dependent package is correct.&lt;/li>
&lt;/ol>
&lt;h2 id="see-also">see also&lt;/h2>
&lt;p>&lt;a href="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/spi/overview/">Dubbo SPI Overview&lt;/a>&lt;/p>
&lt;p>&lt;a href="https://dubbo.apache.org/zh-cn/overview/mannual/java-sdk/reference-manual/spi/description/protocol/">Protocol Extension Description&lt;/a>&lt;/p>
&lt;p style="margin-top: 3rem;"> &lt;/p></description></item><item><title>Docs3-V2: 5-1 - Failed to connect to configuration center</title><link>https://dubbo.apache.org/en/docs3-v2/java-sdk/faq/5/1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/docs3-v2/java-sdk/faq/5/1/</guid><description>
&lt;h2 id="possible-reason">Possible Reason&lt;/h2>
&lt;ol>
&lt;li>The server where the configuration center is located is shut down or down.&lt;/li>
&lt;li>Wrong IP or port number.&lt;/li>
&lt;li>The firewall blocked the port of the configuration center by mistake.&lt;/li>
&lt;/ol>
&lt;h2 id="troubleshooting-and-resolution-steps">Troubleshooting and resolution steps&lt;/h2>
&lt;ol>
&lt;li>Check configuration center IP and port configuration.&lt;/li>
&lt;li>Check whether the server is turned on and works normally.&lt;/li>
&lt;li>Check whether the port used by the configuration center is allowed by the firewall or not.&lt;/li>
&lt;/ol>
&lt;p style="margin-top: 3rem;"> &lt;/p></description></item><item><title>Docs3-V2: 6-1 - Server Connection Failed</title><link>https://dubbo.apache.org/en/docs3-v2/java-sdk/faq/6/1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/docs3-v2/java-sdk/faq/6/1/</guid><description>
&lt;p>Network communication layer, failed to connect to the service provider service&lt;/p>
&lt;h2 id="possible-reason">Possible Reason&lt;/h2>
&lt;p>The service provider&amp;rsquo;s network is abnormally disconnected or blocked by firewalls and third-party tools, and cannot provide external services.&lt;/p>
&lt;h2 id="troubleshooting-and-resolution-steps">Troubleshooting and resolution steps&lt;/h2>
&lt;ol>
&lt;li>If it is a rest connection, check whether the requested server configuration is correct.&lt;/li>
&lt;li>Check whether the network communication is normal, you can use some simple cmd commands to detect, such as &lt;code>ping&lt;/code> and so on.&lt;/li>
&lt;/ol>
&lt;p style="margin-top: 3rem;"> &lt;/p></description></item><item><title>Docs3-V2: 7-1 - QOS OFF</title><link>https://dubbo.apache.org/en/docs3-v2/java-sdk/faq/7/1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/docs3-v2/java-sdk/faq/7/1/</guid><description>
&lt;h2 id="possible-reason">Possible Reason&lt;/h2>
&lt;p>QOS is off&lt;/p>
&lt;h2 id="troubleshooting-and-resolution-steps">Troubleshooting and resolution steps&lt;/h2>
&lt;p>Please refer to &lt;a href="https://dubbo.apache.org/en/docs3-v2/java-sdk/reference-manual/qos/">QOS Operation Manual&lt;/a>.&lt;/p>
&lt;p style="margin-top: 3rem;"> &lt;/p></description></item><item><title>Docs3-V2: 99-1 - Program Interrupted</title><link>https://dubbo.apache.org/en/docs3-v2/java-sdk/faq/99/1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/docs3-v2/java-sdk/faq/99/1/</guid><description>
&lt;p>Unknown error inside Dubbo.&lt;/p>
&lt;h3 id="possible-reason">Possible Reason&lt;/h3>
&lt;p>The program receives an interrupt notification from the JVM level and is forced to stop blocking and waiting&lt;/p>
&lt;h3 id="troubleshooting-and-resolution-steps">Troubleshooting and resolution steps&lt;/h3>
&lt;p>This exception usually occurs when the thread pool is closed or the application is closed.
Please check whether the normal use of the business is affected. If there is no impact, it can be ignored. If there is an impact, please refer to the corresponding troubleshooting manual.
For more troubleshooting ideas, please refer to &lt;a href="../0/">99-0&lt;/a>.&lt;/p></description></item><item><title>Docs3-V2: Access Ingress Traffic</title><link>https://dubbo.apache.org/en/docs3-v2/golang-sdk/tutorial/governance/service-mesh/pixiu/http_triple/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/docs3-v2/golang-sdk/tutorial/governance/service-mesh/pixiu/http_triple/</guid><description>
&lt;h2 id="1-preparations">1. Preparations&lt;/h2>
&lt;p>-kubectl&lt;/p>
&lt;ul>
&lt;li>A k8s cluster with kubeconfig configured&lt;/li>
&lt;/ul>
&lt;h2 id="2-use-the-http-protocol-to-call-the-triple-application-through-the-gateway">2. Use the HTTP protocol to call the Triple application through the gateway&lt;/h2>
&lt;p>The Dubbo-go-pixiu gateway supports calling GO/Java Dubbo clusters. In the Dubbo-go 3.0 scenario, we can use the Pixiu gateway to request the Pixiu gateway with the HTTP protocol outside the cluster, perform protocol conversion at the gateway layer, and further call the Dubbo-go service in the cluster.&lt;/p>
&lt;p>&lt;img src="https://dubbo.apache.org/imgs/docs3-v2/golang-sdk/tasks/pixiu/http_triple/triple-pixiu.png" alt="image.png">&lt;/p>
&lt;p>The path for users to call Dubbo-go service is http://$(app_name)/$(service_name)/$(method).&lt;/p>
&lt;p>For example, a proto file has the following definition:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-protobuf" data-lang="protobuf">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#719e07">package&lt;/span> org&lt;span style="color:#719e07">.&lt;/span>apache.dubbo.quickstart.samples;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">service&lt;/span> UserProvider {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">rpc&lt;/span> SayHello (HelloRequest) &lt;span style="color:#719e07">returns&lt;/span> (User) {}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">message&lt;/span> &lt;span style="color:#268bd2">HelloRequest&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#dc322f">string&lt;/span> name &lt;span style="color:#719e07">=&lt;/span> &lt;span style="color:#2aa198">1&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>And configure the application name in dubbogo.yml when the dubbo-go service is started: my-dubbogo-app:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">dubbo&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">application&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">name&lt;/span>: my-dubbogo-app
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The pixiu gateway can resolve the route whose path is my-dubbogo-app/org.apache.dubbo.quickstart.samples.UserProvider/SayHello and forward it to the corresponding service. The body from the external HTTP request is a json serialized request parameter, such as {&amp;ldquo;name&amp;rdquo;:&amp;ldquo;test&amp;rdquo;}.&lt;/p>
&lt;p>We currently recommend using Nacos as the registry.&lt;/p>
&lt;p>Users can deploy our demo in their own clusters. It is better for the cluster to have the ability to expose lb type services, so that the services in the cluster can be accessed from the public network, and you can also make requests directly in the cluster.&lt;/p>
&lt;p>For your cluster, execute:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>$ kubectl apply -f https://raw.githubusercontent.com/dubbogo/triple-pixiu-demo/master/deploy/pixiu-triple-demo.yml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The following resources will be created under the dubbogo-triple-nacos namespace, including three triple-servers, one pixiu gateway, and one nacos server. And expose the service to the public network through Servcie.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>namespace/dubbogo-triple-nacos created
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>service/dubbo-go-nacos created
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>deployment.apps/dubbogo-nacos-deployment created
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>deployment.apps/pixiu created
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>deployment.apps/server created
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>service/pixiu created
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Obtain pixiu public network ip and call it&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>$ kubectl get svc -n dubbogo-triple-nacos
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>dubbo-go-nacos ClusterIP 192.168.123.204 &amp;lt;none&amp;gt; 8848/TCP 32s
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>pixiu LoadBalancer 192.168.156.175 30.XXX.XXX.XX 8881:30173/TCP 32s
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Call the demo service through curl and get the response result.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>$ curl -X POST -d &lt;span style="color:#2aa198">&amp;#39;{&amp;#34;name&amp;#34;:&amp;#34;laurence&amp;#34;}&amp;#39;&lt;/span> http://30.XXX.XXX.XX:8881/dubbogoDemoServer/org.apache.dubbo.laurence.samples.UserProvider/SayHello
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#719e07">{&lt;/span>&lt;span style="color:#2aa198">&amp;#34;name&amp;#34;&lt;/span>:&lt;span style="color:#2aa198">&amp;#34;Hello Laurence&amp;#34;&lt;/span>,&lt;span style="color:#2aa198">&amp;#34;id&amp;#34;&lt;/span>:&lt;span style="color:#2aa198">&amp;#34;12345&amp;#34;&lt;/span>,&lt;span style="color:#2aa198">&amp;#34;age&amp;#34;&lt;/span>:21&lt;span style="color:#719e07">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Docs: Install Admin Console</title><link>https://dubbo.apache.org/en/docs/v2.7/admin/install/admin-console/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/docs/v2.7/admin/install/admin-console/</guid><description>
&lt;p>The current version of dubbo admin is under development, including: route rule, dynamic configuration, access control, weight adjustment, load balance, etc.&lt;/p>
&lt;p>Install:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>git clone https://github.com/apache/dubbo-admin.git /var/tmp/dubbo-admin
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#b58900">cd&lt;/span> /var/tmp/dubbo-admin
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>mvn clean package
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Configuration &lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>configuration file:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>dubbo-admin-server/src/main/resources/application.properties
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>configurations:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>admin.registry.address&lt;span style="color:#719e07">=&lt;/span>zookeeper://127.0.0.1:2181
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>admin.config-center&lt;span style="color:#719e07">=&lt;/span>zookeeper://127.0.0.1:2181
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>admin.metadata-report.address&lt;span style="color:#719e07">=&lt;/span>zookeeper://127.0.0.1:2181
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Start:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>mvn --projects dubbo-admin-backend spring-boot:run
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>For more information, please visit:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>https://github.com/apache/dubbo-admin
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Visit [^2]:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>http://127.0.0.1:8080
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="footnotes" role="doc-endnotes">
&lt;hr>
&lt;ol>
&lt;li id="fn:1">
&lt;p>There&amp;rsquo;s no login for current version, will be added later&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;/ol>
&lt;/div></description></item><item><title>Latest: Advantage</title><link>https://dubbo.apache.org/en/latest/facade-docs/why/advantage/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/latest/facade-docs/why/advantage/</guid><description/></item><item><title>Docs3-V2: Application-Level Service Discovery Benchmark</title><link>https://dubbo.apache.org/en/docs3-v2/java-sdk/reference-manual/performance/benchmarking/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/docs3-v2/java-sdk/reference-manual/performance/benchmarking/</guid><description>
&lt;h2 id="1-benchmark-conclusion">1 Benchmark Conclusion&lt;/h2>
&lt;p>Compared with 2.x version, Dubbo3 version&lt;/p>
&lt;ul>
&lt;li>Significantly improved service discovery resource utilization.
&lt;ul>
&lt;li>Compared with interface-level services, it is found that the resident memory of a single machine is reduced by 50%, and the GC consumption during the address change period is reduced by an order of magnitude (hundred times -&amp;gt; ten times)&lt;/li>
&lt;li>Comparing application-level services, it is found that the resident memory of a single machine is reduced by 75%, and the number of GCs tends to zero&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>The following is the detailed pressure measurement process and data&lt;/p>
&lt;h2 id="2-application-level-service-discovery-address-push-link">2 Application-level service discovery (address push link)&lt;/h2>
&lt;p>This part of the stress test data is given by the ICBC Dubbo team based on internal production data. The stress test process simulates the service discovery architecture of &amp;ldquo;production environment address + zookeeper&amp;rdquo;.&lt;/p>
&lt;h3 id="21-environment">2.1 Environment&lt;/h3>
&lt;p>| | Description |
| &amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash; | &amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash; &amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash; |
| &lt;strong>Pressure test data&lt;/strong> | Provider&lt;br/>500 running instances✖️8interface✖️5protocol, that is, each provider registers 40 URLs with the registration center, a total of 20,000 URLs, and the length of each URL is about 1k characters. &lt;br/>&lt;br/>Registration center&lt;br/>2 independent zookeeper registration centers, service providers and consumers adopt parallel configuration. &lt;br/>&lt;br/>Consumer&lt;br/>Configure 1c2g, xmx=768, enable GC, subscribe from 2 registries, and call the service every 5 seconds. Run for 20 hours. |
| &lt;strong>Pressure test environment&lt;/strong> | Java version &amp;ldquo;1.8.0&amp;rdquo;&lt;br/>Java(TM) SE Runtime Environment (build pxa6480sr3fp12-20160919_01(SR3 FP12))&lt;br/>IBM J9 VM (Build 2.8, JRE 1.8 .0 Linux amd64-64 Compressed References 20160915_318796, JIT enabled, AOT enabled) |&lt;/p>
&lt;h3 id="22-data-analysis">2.2 Data Analysis&lt;/h3>
&lt;p>&lt;img src="https://dubbo.apache.org/imgs/v3/performance/registry-mem.svg" alt="//imgs/v3/performance/registry-mem.svg">&lt;/p>
&lt;p>&lt;br />Figure 1 Changes in memory usage of the service discovery model&lt;br />&lt;br />&lt;/p>
&lt;ul>
&lt;li>Dubbo3 interface-level service discovery model, the resident memory is reduced by about 50% compared with version 2.x&lt;/li>
&lt;li>Dubbo3 application-level service discovery model, the resident memory is reduced by about 75% compared with version 2.x&lt;/li>
&lt;/ul>
&lt;p>&lt;img src="https://dubbo.apache.org/imgs/v3/performance/registry-gc.svg" alt="//imgs/v3/performance/registry-gc.svg">&lt;/p>
&lt;p>&lt;br />Figure 2 Service Discovery Model GC Changes&lt;br />&lt;br />&lt;/p>
&lt;ul>
&lt;li>Dubbo3 interface-level service discovery model, the number of YGC times in version 2.x has dropped significantly, from hundreds of times to more than a dozen times&lt;/li>
&lt;li>Dubbo3 application-level service discovery model, the number of FGC times in version 2.x has dropped significantly, from hundreds of times to zero&lt;/li>
&lt;/ul></description></item><item><title>Docs3-V2: Apply Template</title><link>https://dubbo.apache.org/en/docs3-v2/golang-sdk/tutorial/develop/template/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/docs3-v2/golang-sdk/tutorial/develop/template/</guid><description>
&lt;h2 id="1-preparations">1. Preparations&lt;/h2>
&lt;ul>
&lt;li>dubbo-go cli tools and dependent tools have been installed&lt;/li>
&lt;/ul>
&lt;h2 id="2-use-dubbogo-cli-to-create-a-project-template">2. Use dubbogo-cli to create a project template&lt;/h2>
&lt;p>Run &lt;code>dubbogo-cli newApp .&lt;/code>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-plain" data-lang="plain">&lt;span style="display:flex;">&lt;span>$ mkdir cli-create-server
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$ cd cli-create-server
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$ dubbogo-cli newApp .
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$ tree .
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>├── Makefile
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>├── api
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ └── api.proto
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>├──build
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ └── Dockerfile
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>├── chart
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ ├── app
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ │ ├── Chart.yaml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ │ ├── templates
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ │ │ ├── _helpers.tpl
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ │ │ ├── deployment.yaml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ │ │ ├── service.yaml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ │ │ └── serviceaccount.yaml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ │ └── values.yaml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ └── nacos_env
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ ├── Chart.yaml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ ├── templates
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ │ ├── _helpers.tpl
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ │ ├── deployment.yaml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ │ └── service.yaml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ └── values.yaml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>├── cmd
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ └── app.go
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>├── conf
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>│ └── dubbogo.yaml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>├── go.mod
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>├── go.sum
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>└── pkg
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> └── service
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> └── service.go
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The generated project includes several directories:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>api: place interface files: proto file and generated pb.go file&lt;/p>
&lt;/li>
&lt;li>
&lt;p>build: place build related files&lt;/p>
&lt;/li>
&lt;li>
&lt;p>chart: place the chart package for publishing, the chart package of the basic environment: nacos, mesh (under development)&lt;/p>
&lt;/li>
&lt;li>
&lt;p>cmd: program entry&lt;/p>
&lt;/li>
&lt;li>
&lt;p>conf: framework configuration&lt;/p>
&lt;/li>
&lt;li>
&lt;p>pkg/service: RPC service implementation&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Makefile:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>Image, application name:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>IMAGE = $(your_repo)/$(namespace)/$(image_name)
TAG = 1.0.0&lt;/p>
&lt;/li>
&lt;li>
&lt;p>APPNAME = dubbo-go-app # For helm publishing, corresponding to chart name, application name and service name (service name)&lt;/p>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>Provide scripts such as:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>make build # Package the image and push it&lt;/p>
&lt;/li>
&lt;li>
&lt;p>make buildx-publish # The arm architecture locally packs the amd64 image and pushes it, relying on docker buildx&lt;/p>
&lt;/li>
&lt;li>
&lt;p>make deploy # Publish the application through helm&lt;/p>
&lt;/li>
&lt;li>
&lt;p>make remove # Delete the published helm application&lt;/p>
&lt;/li>
&lt;li>
&lt;p>make proto-gen # generate pb.go file under api/&lt;/p>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul></description></item><item><title>Docs: Background</title><link>https://dubbo.apache.org/en/docs/v2.7/user/preface/background/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/docs/v2.7/user/preface/background/</guid><description>
&lt;h1 id="background">Background&lt;/h1>
&lt;p>With the fast development of Internet, the scale of web applications expands unceasingly, and finally we find that the traditional vertical architecture(monolithic) can not handle this any more. Distributed service architecture and the flow computing architecture are imperative, and a governance system is urgently needed to ensure an orderly evolution of the architecture.&lt;/p>
&lt;p>&lt;img src="https://dubbo.apache.org/imgs/user/dubbo-architecture-roadmap.jpg" alt="image">&lt;/p>
&lt;h4 id="monolithic-architecture">Monolithic architecture&lt;/h4>
&lt;p>When the traffic is very low, there is only one application, all the features are deployed together to reduce the deployment node and cost. At this point, the data access framework (ORM) is the key to simplifying the workload of the CRUD.&lt;/p>
&lt;h4 id="vertical-architecture">Vertical architecture&lt;/h4>
&lt;p>When the traffic gets heavier, add monolithic application instances can not accelerate the access very well, one way to improve efficiency is to split the monolithic into discrete applications. At this point, the Web framework (MVC) used to accelerate front-end page development is the key.&lt;/p>
&lt;h4 id="distributed-service-architecture">Distributed service architecture&lt;/h4>
&lt;p>When there are more and more vertical applications, the interaction between applications is inevitable, some core businesses are extracted and served as independent services, which gradually forms a stable service center,this way the front-end application can respond to the changeable market demand more quickly. At this point, the distributed service framework (RPC) for business reuse and integration is the key.&lt;/p>
&lt;h4 id="flow-computing-architecture">Flow computing architecture&lt;/h4>
&lt;p>When there are more and more services, capacity evaluation becomes difficult, and also services with small scales often causes waste of resources. To solve these problems, a scheduling center should be added to manage the cluster capacity based on traffics and to improve the utilization of the cluster. At this time, the resource scheduling and governance centers (SOA), which are used to improve machine utilization, are the keys.&lt;/p></description></item><item><title>Docs: Source Code Build</title><link>https://dubbo.apache.org/en/docs/v2.7/dev/build/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/docs/v2.7/dev/build/</guid><description>
&lt;h2 id="checkout">Checkout&lt;/h2>
&lt;p>checkout the lastest project source code with commands blow:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>git clone https://github.com/apache/dubbo.git dubbo
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="branches">Branches&lt;/h2>
&lt;p>We use &lt;code>master&lt;/code> as the major branch for new feature development, and use other branches for maintenance. Tags for all versions can be checked via &lt;a href="https://github.com/apache/dubbo/tags">https://github.com/apache/dubbo/tags&lt;/a>.&lt;/p>
&lt;h2 id="building">Building&lt;/h2>
&lt;p>Dubbo relies on &lt;a href="http://maven.apache.org">maven&lt;/a> as the building tool.&lt;/p>
&lt;p>Requirements:&lt;/p>
&lt;ul>
&lt;li>Java above 1.8 version&lt;/li>
&lt;li>Maven version 2.2.1 or above&lt;/li>
&lt;/ul>
&lt;p>The following &lt;code>MAVEN_OPTS&lt;/code>should be configured before building:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#b58900">export&lt;/span> &lt;span style="color:#268bd2">MAVEN_OPTS&lt;/span>&lt;span style="color:#719e07">=&lt;/span>-Xmx1024m -XX:MaxPermSize&lt;span style="color:#719e07">=&lt;/span>512m
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>build with below command:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>mvn clean install
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>skip testing using below building command:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>mvn install -Dmaven.test.skip
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="building-jar-package-of-source-code">Building jar package of source code&lt;/h2>
&lt;p>build Dubbo source code jar package with below command.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>mvn clean source:jar install -Dmaven.test.skip
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>and modify the dubbo dependency in your sample project to the SANPSHOT version of the local repository, and then use remote debugger to debug dubbo.&lt;/p>
&lt;h2 id="ide-support">IDE support&lt;/h2>
&lt;p>use below command to generate IDE.&lt;/p>
&lt;h3 id="intellij-idea">Intellij Idea&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>mvn idea:idea
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="eclipse">Eclipse&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>mvn eclipse:eclipse
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Importing into eclipse&lt;/p>
&lt;p>Firstly, a maven repository needs to be configured in eclipse. Define &lt;code>M2_REPO&lt;/code> and point it to the local maven repository by clicking &lt;code>Preferences -&amp;gt; Java -&amp;gt; Build Path -&amp;gt; Classpath&lt;/code>.&lt;/p>
&lt;p>Use the following maven command as well:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>mvn eclipse:configure-workspace -Declipse.workspace&lt;span style="color:#719e07">=&lt;/span>/path/to/the/workspace/
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol>
&lt;li>view the source code through &lt;a href="https://github.com/apache/dubbo">https://github.com/apache/dubbo&lt;/a>&lt;/li>
&lt;li>path under UNIX is ${HOME}/.m2/repository, path under Windows is C:\Documents and Settings&amp;lt;user&amp;gt;.m2\repository&lt;/li>
&lt;/ol></description></item><item><title>Docs3-V2: Check at startup</title><link>https://dubbo.apache.org/en/docs3-v2/java-sdk/advanced-features-and-usage/service/preflight-check/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/docs3-v2/java-sdk/advanced-features-and-usage/service/preflight-check/</guid><description>
&lt;h2 id="feature-description">Feature description&lt;/h2>
&lt;p>By default, Dubbo will check whether the dependent service is available at startup, and will throw an exception when it is unavailable, preventing Spring initialization from completing, so that problems can be detected early when going online. The default &lt;code>check=&amp;quot;true&amp;quot;&lt;/code>.&lt;/p>
&lt;p>Checking can be turned off by &lt;code>check=&amp;quot;false&amp;quot;&lt;/code>. For example, when testing, some services do not care, or there is a circular dependency, and one of them must be started first.&lt;/p>
&lt;p>In addition, if your Spring container is lazy-loaded, or if you delay the reference service through API programming, please turn off check, otherwise when the service is temporarily unavailable, an exception will be thrown and a null reference will be obtained. If &lt;code>check=&amp;quot;false&amp;quot;&lt;/code>, always Yes, it will return the reference, and when the service is restored, it can be connected automatically.&lt;/p>
&lt;h2 id="scenes-to-be-used">scenes to be used&lt;/h2>
&lt;ul>
&lt;li>One-way dependency: with dependency (recommended default setting) and without dependency (check=false can be set)&lt;/li>
&lt;li>Interdependence: that is, circular dependency, (it is not recommended to set check=false)&lt;/li>
&lt;li>Lazy loading handling&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>check is only used to check at startup, if there is no corresponding dependency at runtime, an error will still be reported.&lt;/p>
&lt;/blockquote>
&lt;h2 id="how-to-use">How to use&lt;/h2>
&lt;h3 id="via-spring-configuration-file">via spring configuration file&lt;/h3>
&lt;p>Turn off startup checks for a service&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-xml" data-lang="xml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">&amp;lt;dubbo:reference&lt;/span> interface=&lt;span style="color:#2aa198">&amp;#34;com.foo.BarService&amp;#34;&lt;/span> check=&lt;span style="color:#2aa198">&amp;#34;false&amp;#34;&lt;/span> &lt;span style="color:#268bd2">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Turn off startup checks for all services&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-xml" data-lang="xml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">&amp;lt;dubbo:consumer&lt;/span> check=&lt;span style="color:#2aa198">&amp;#34;false&amp;#34;&lt;/span> &lt;span style="color:#268bd2">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Turn off registry checks at startup&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-xml" data-lang="xml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">&amp;lt;dubbo:registry&lt;/span> check=&lt;span style="color:#2aa198">&amp;#34;false&amp;#34;&lt;/span> &lt;span style="color:#268bd2">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="via-dubboproperties">via dubbo.properties&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-properties" data-lang="properties">&lt;span style="display:flex;">&lt;span>dubbo.reference.com.foo.BarService.check&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">false&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>dubbo.consumer.check&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">false&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>dubbo.registry.check&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">false&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="via-the--d-parameter">via the -D parameter&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>java -Ddubbo.reference.com.foo.BarService.check&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#b58900">false&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>java -Ddubbo.consumer.check&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#b58900">false&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>java -Ddubbo.registry.check&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#b58900">false&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="meaning-of-configuration">Meaning of configuration&lt;/h2>
&lt;p>&lt;code>dubbo.reference.com.foo.BarService.check&lt;/code>, overrides the check value of the reference of &lt;code>com.foo.BarService&lt;/code>, even if there is a statement in the configuration, it will be overwritten.&lt;/p>
&lt;p>&lt;code>dubbo.consumer.check=false&lt;/code> is the default value of &lt;code>check&lt;/code> for setting reference. If there is an explicit statement in the configuration, such as: &lt;code>&amp;lt;dubbo:reference check=&amp;quot;true&amp;quot;/&amp;gt;&lt;/code>, it will not be affected influences.&lt;/p>
&lt;p>&lt;code>dubbo.registry.check=false&lt;/code>, the first two means that the subscription is successful, but whether the provider list is empty or whether an error is reported, if the registration subscription fails, it is also allowed to start, you need to use this option, and will retry periodically in the background .&lt;/p></description></item><item><title>Docs: Apache Committer Guide</title><link>https://dubbo.apache.org/en/docs/contribution-guidelines/committer/new-committer-guide_dev/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/docs/contribution-guidelines/committer/new-committer-guide_dev/</guid><description>
&lt;h2 id="first-how-to-become-a-committer">First: How to become a committer&lt;/h2>
&lt;h3 id="initial-committers-at-the-project-incubator-stage">Initial committers at the project incubator stage&lt;/h3>
&lt;p>At the project incubator stage, there will be an initial committers list in the proposal of the incubator project. Confirm that you are one of the initial committers. After the vote is passed in the Apache incubator community, these committers can start preparing their account. See &lt;a href="https://wiki.apache.org/incubator/">incubator wiki&lt;/a> for details.&lt;/p>
&lt;h3 id="the-active-contributor-is-elected-as-a-committer">The active contributor is elected as a committer&lt;/h3>
&lt;p>At the late development stage, an active contributor can be elected as a committer. See &lt;a href="https://www.apache.org/dev/new-committers-guide.html#becoming-a-committer">how to become a committer&lt;/a>&lt;/p>
&lt;h2 id="second-the-individual-contributor-signs-icla">Second: The individual contributor signs ICLA&lt;/h2>
&lt;h3 id="1-apache-id">1, Apache ID&lt;/h3>
&lt;p>Choose a Apache ID not in the &lt;a href="http://people.apache.org/committer-index.html">apache committers list page&lt;/a>.&lt;/p>
&lt;h3 id="2-individual-contributor-license-agreement--icla">2, Individual Contributor License Agreement (ICLA):&lt;/h3>
&lt;p>Download the &lt;a href="https://www.apache.org/licenses/icla.pdf">ICLA template&lt;/a>. After filling the icla.pdf with personal information correctly, print, sign, scan, and send it in mail as an attachment to the secretary &lt;a href="mailto:secretary@apache.org">secretary@apache.org&lt;/a>, the secretary will help to create the Apache user ID. At the same time, a &lt;a href="mailto:your-id@apache.org">your-id@apache.org&lt;/a> mailbox will be created. You can see if the user has been created on the [apache committers list page (http://people.apache.org/committer-index.html).&lt;/p>
&lt;h2 id="third-join-the-apache-developer-group">Third: Join The Apache Developer Group&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>1, login via the &lt;a href="https://id.apache.org/">Apache account tool&lt;/a>, when you login at the first time, you can select the &amp;ldquo;Change password?&amp;rdquo; checkbox to get the initial password. Then the initial password will be sent to the forward mailbox (the developer mail recorded in the project incubator proposal)&lt;/p>
&lt;/li>
&lt;li>
&lt;p>2, about Apache mailbox: does not have its own mail content storage server. It needs to borrow the mail content storage and mail sending functions of other mail providers. In many voting sessions, Apache mailbox is recommended.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>There is a question about how to configure the apache.org mailbox forwarding function using other mailboxes.&lt;/p>
&lt;ol>
&lt;li>
&lt;p>inbox: to receive mails that sent to &lt;a href="mailto:youer-id@apache.org">youer-id@apache.org&lt;/a> mailbox. The forward mailbox configured in the Apache account tool in the first step can use the forward mailbox to pick up incoming mail.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>the Outbox: emails sent out will show the sender as &lt;a href="mailto:your-id@apache.org">your-id@apache.org&lt;/a> account. Please refer to: &lt;a href="https://reference.apache.org/committer/email">set up Apache mailbox guide&lt;/a> and &lt;a href="http://gmailblog.blogspot.com/2009/07/send-mail-from-another-address-without.html">Gmail mailbox setting&lt;/a>. In other mailbox service settings, this forwarding mode is not easy to find. Gmail is the most convenient, which is recommended (no advertising).&lt;/p>
&lt;/li>
&lt;/ol>
&lt;ul>
&lt;li>
&lt;p>3, Modify the homepage URL option in the edit page, homepage link of your account can be added in &lt;a href="http://people.apache.org/committer-index.html">apache committer index page&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>4, Modify the GitHub account in the edit page, and an email will be sent to invite you to join the github.com/apache-commiiters group. Now, please learn from the way &lt;a href="http://www.apache.org/foundation/how-it-works.html#developers">ASF works&lt;/a> to do some basic preparation of ASF development.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="fourth-to-obtain-write-permission-of-the-project">Fourth: To obtain write permission of the project&lt;/h2>
&lt;p>Operation of the &lt;a href="https://gitbox.apache.org/setup/">GitBox account link tool&lt;/a>&lt;/p>
&lt;h3 id="1-apache-account-authorization">1, Apache account authorization&lt;/h3>
&lt;p>According to the prompt, the OAuth protocol of Apache account is authorized to login.&lt;/p>
&lt;h3 id="2-github-account-authorization">2, Github account authorization&lt;/h3>
&lt;p>According to the prompt, the OAuth protocol of Github account is authorized to login.&lt;/p>
&lt;h3 id="3-set-up-github-account-in-githubcom-two-factors-authorization-2fa">3, Set up GitHub account in github.com, two-factors authorization (2FA)&lt;/h3>
&lt;ul>
&lt;li>
&lt;ol>
&lt;li>install &amp;ldquo;Google Authenticator&amp;rdquo; app on your cell phone&lt;/li>
&lt;/ol>
&lt;/li>
&lt;li>2), Following the &lt;a href="https://docs.github.com/en/authentication/securing-your-account-with-two-factor-authentication-2fa/configuring-two-factor-authentication">authorized GitHub 2FA wiki&lt;/a>, you can operation step by step .&lt;/li>
&lt;/ul>
&lt;p>In the &lt;a href="https://github.com/settings/security">two-factors authorization authentication (2. Scan this barcode with your app.)&lt;/a> page, it is not recommended to select a two-dimensional code with a cell phone, because some of the cell phones will not be able to scan.&lt;/p>
&lt;p>Please open the cell phone &amp;ldquo;Google Authenticator&amp;rdquo; app, click &amp;ldquo;+&amp;rdquo; to select &amp;ldquo;input the secret key&amp;rdquo;: write the GitHub account in the account name input box. In your &amp;ldquo;secret key&amp;rdquo; input box, write the text of the &amp;ldquo;enter this text code&amp;rdquo; link in the open web page. After clicking &amp;ldquo;add&amp;rdquo; in app, 6 digit dynamic will be generated for this account. Write the 6 digit number to the text box in the web page, and then click &amp;ldquo;Enable&amp;rdquo;. In this way, the 2fa is set successfully.&lt;/p>
&lt;ul>
&lt;li>
&lt;p>3), logout and login to Github again, and one more step will appear after entering user name and password. Fill in the 6 digit number dynamic password generated by the app&lt;/p>
&lt;/li>
&lt;li>
&lt;p>4),It will take about half an hour, and you will be notified by mail that you have joined the XX project-committers developer group. You can also check it in the [apache teams] (&lt;a href="https://github.com/orgs/apache/teams">https://github.com/orgs/apache/teams&lt;/a>) page yourself.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>5), After the 2fa has been submitted, you will have the permission check problem for the cloned projects. The solution is one of below two:&lt;/p>
&lt;/li>
&lt;li>
&lt;p>A. Apply for Access Token&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>When access token is generated on GitHub, the token where the instruction line needs a password is pasted.&lt;/p>
&lt;p>Refer to website &lt;a href="https://docs.github.com/en/repositories/creating-and-managing-repositories/troubleshooting-cloning-errors">referenced link one&lt;/a> and &lt;a href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token">referenced link two&lt;/a>&lt;/p>
&lt;ul>
&lt;li>B. switch to SSH&lt;/li>
&lt;/ul>
&lt;p>ssh-keygen then paste the content in the pub file into GitHub.&lt;/p>
&lt;p>&lt;strong>Note&lt;/strong>: ensure that GitHub&amp;rsquo;s 2fa is &amp;ldquo;enabled&amp;rdquo;. When you set 2fa to &amp;ldquo;off&amp;rdquo;, it will be delisted by the corresponding Apache committer write permission group until you set it up again.&lt;/p>
&lt;h2 id="fifth-other">Fifth: other&lt;/h2>
&lt;h3 id="the-apache-way">The Apache way&lt;/h3>
&lt;p>See &lt;a href="http://apache.org/foundation/governance/">wiki&lt;/a>.&lt;/p>
&lt;p>The community is more important than the code
If not discussed in the community (mailing list), just as it did not happen.&lt;/p>
&lt;h3 id="add-your-name">Add your name&lt;/h3>
&lt;p>Please update Dubbo incubator status &lt;a href="https://incubator.apache.org/projects/dubbo.html">page&lt;/a> to add your name. See this &lt;a href="https://dubbo.apache.org/en/latest/contribution-guidelines/contributor/">guide&lt;/a> for instructions.&lt;/p>
&lt;p>Please update Dubbo official &lt;a href="https://dubbo.apache.org/en/latest/contribution-guidelines/committer">website&lt;/a> to update your name.&lt;/p>
&lt;h3 id="a-small-benefit">A small benefit&lt;/h3>
&lt;p>Jetbrains company gives Apache committers a small benefit, which is free to use IDEA&amp;rsquo;s full series products. The specific address is: &lt;a href="https://www.jetbrains.com/shop/eform/apache?Product=ALL">https://www.jetbrains.com/shop/eform/apache?Product=ALL&lt;/a>&lt;/p>
&lt;h3 id="reference-wiki">Reference wiki&lt;/h3>
&lt;p>&lt;a href="https://www.apache.org/dev/new-committers-guide.html">https://www.apache.org/dev/new-committers-guide.html&lt;/a>&lt;/p></description></item><item><title>Docs3-V2: configuration item reference</title><link>https://dubbo.apache.org/en/docs3-v2/golang-sdk/refer/config/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/docs3-v2/golang-sdk/refer/config/</guid><description>
&lt;h2 id="root-configuration">root configuration&lt;/h2>
&lt;h2 id="client-configuration">Client configuration&lt;/h2>
&lt;h2 id="server-configuration">Server configuration&lt;/h2>
&lt;h2 id="registry-configuration">Registry configuration&lt;/h2>
&lt;h3 id="using-the-configuration-api">Using the Configuration API&lt;/h3>
&lt;ul>
&lt;li>The client sets up the registry using the configuration API&lt;/li>
&lt;/ul>
&lt;p>You can quickly set the registry for debugging by calling the config.NewRegistryConfigWithProtocolDefaultPort method, and support zookeeper(127.0.0.1:2181) and nacos(127.0.0.1:8848)&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-go" data-lang="go">&lt;span style="display:flex;">&lt;span>rc &lt;span style="color:#719e07">:=&lt;/span> config. &lt;span style="color:#268bd2">NewRootConfigBuilder&lt;/span>().
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetConsumer&lt;/span>(config. &lt;span style="color:#268bd2">NewConsumerConfigBuilder&lt;/span>().
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetRegistryIDs&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;zookeeperID&amp;#34;&lt;/span>). &lt;span style="color:#586e75">// use defined registryID
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75">&lt;/span> &lt;span style="color:#268bd2">Build&lt;/span>()).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">AddRegistry&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;zookeeperID&amp;#34;&lt;/span>, config. &lt;span style="color:#268bd2">NewRegistryConfigWithProtocolDefaultPort&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;zookeeper&amp;#34;&lt;/span>)).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">build&lt;/span>()
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>All interfaces: can be configured by calling the rich interfaces provided by RegistryConfigBuilder.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-go" data-lang="go">&lt;span style="display:flex;">&lt;span>rc &lt;span style="color:#719e07">:=&lt;/span> config. &lt;span style="color:#268bd2">NewRootConfigBuilder&lt;/span>().
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetConsumer&lt;/span>(config. &lt;span style="color:#268bd2">NewConsumerConfigBuilder&lt;/span>().
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetRegistryIDs&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;nacosRegistryID&amp;#34;&lt;/span>). &lt;span style="color:#586e75">// use defined registryID
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75">&lt;/span> &lt;span style="color:#268bd2">AddReference&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;GreeterClientImpl&amp;#34;&lt;/span>, &lt;span style="color:#586e75">/*...*/&lt;/span>).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">build&lt;/span>()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">AddRegistry&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;nacosRegistryID&amp;#34;&lt;/span>, config. &lt;span style="color:#268bd2">NewRegistryConfigBuilder&lt;/span>().
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetProtocol&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;nacos&amp;#34;&lt;/span>).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetAddress&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;127.0.0.1:8848&amp;#34;&lt;/span>).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetGroup&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;dubbo-go&amp;#34;&lt;/span>).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetNamespace&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;dubbo&amp;#34;&lt;/span>).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetUsername&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;admin&amp;#34;&lt;/span>).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetPassword&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;admin&amp;#34;&lt;/span>).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetTimeout&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;3s&amp;#34;&lt;/span>).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">Build&lt;/span>()).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">build&lt;/span>()
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>The server uses the configuration API to set the configuration center&lt;/li>
&lt;/ul>
&lt;p>Simple interface config.NewRegistryConfigWithProtocolDefaultPort&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-go" data-lang="go">&lt;span style="display:flex;">&lt;span>rc &lt;span style="color:#719e07">:=&lt;/span> config. &lt;span style="color:#268bd2">NewRootConfigBuilder&lt;/span>().
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetProvider&lt;/span>(config. &lt;span style="color:#268bd2">NewProviderConfigBuilder&lt;/span>().
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">AddService&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;GreeterProvider&amp;#34;&lt;/span>, &lt;span style="color:#586e75">/*...*/&lt;/span>).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetRegistryIDs&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;registryKey&amp;#34;&lt;/span>). &lt;span style="color:#586e75">// use defined registryIDs
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75">&lt;/span> &lt;span style="color:#268bd2">Build&lt;/span>()).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">AddRegistry&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;registryKey&amp;#34;&lt;/span>, config. &lt;span style="color:#268bd2">NewRegistryConfigWithProtocolDefaultPort&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;zookeeper&amp;#34;&lt;/span>)).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">build&lt;/span>()
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>All interfaces: can be configured by calling the rich interfaces provided by RegistryConfigBuilder.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-go" data-lang="go">&lt;span style="display:flex;">&lt;span>rc &lt;span style="color:#719e07">:=&lt;/span> config. &lt;span style="color:#268bd2">NewRootConfigBuilder&lt;/span>().
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetProvider&lt;/span>(config. &lt;span style="color:#268bd2">NewProviderConfigBuilder&lt;/span>().
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">AddService&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;GreeterProvider&amp;#34;&lt;/span>, &lt;span style="color:#586e75">/*...*/&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetRegistryIDs&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;registryKey&amp;#34;&lt;/span>). &lt;span style="color:#586e75">// use defined registryIDs
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75">&lt;/span> &lt;span style="color:#268bd2">Build&lt;/span>()).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">AddRegistry&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;registryKey&amp;#34;&lt;/span>, config. &lt;span style="color:#268bd2">NewRegistryConfigBuilder&lt;/span>().
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetProtocol&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;nacos&amp;#34;&lt;/span>).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetAddress&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;127.0.0.1:8848&amp;#34;&lt;/span>).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetGroup&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;dubbo-go&amp;#34;&lt;/span>).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetNamespace&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;dubbo&amp;#34;&lt;/span>).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetUsername&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;admin&amp;#34;&lt;/span>).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetPassword&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;admin&amp;#34;&lt;/span>).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetTimeout&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;3s&amp;#34;&lt;/span>).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">Build&lt;/span>()).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">build&lt;/span>()
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="heading">&lt;/h3>
&lt;h2 id="network-protocol">Network protocol&lt;/h2>
&lt;h3 id="configuration-file">configuration file&lt;/h3>
&lt;h3 id="using-the-configuration-api-1">Using the Configuration API&lt;/h3>
&lt;ul>
&lt;li>The client sets the network protocol using the configuration API&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-go" data-lang="go">&lt;span style="display:flex;">&lt;span>rc &lt;span style="color:#719e07">:=&lt;/span> config. &lt;span style="color:#268bd2">NewRootConfigBuilder&lt;/span>().
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetConsumer&lt;/span>(config. &lt;span style="color:#268bd2">NewConsumerConfigBuilder&lt;/span>().
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">AddReference&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;GreeterClientImpl&amp;#34;&lt;/span>, config. &lt;span style="color:#268bd2">NewReferenceConfigBuilder&lt;/span>().
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetInterface&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;org. apache. dubbo. UserProvider&amp;#34;&lt;/span>).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetProtocol&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;tri&amp;#34;&lt;/span>). &lt;span style="color:#586e75">// set reference protocol to triple
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75">&lt;/span> &lt;span style="color:#268bd2">Build&lt;/span>()).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">Build&lt;/span>()).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">build&lt;/span>()
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>The server uses the configuration API to set the network protocol&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-go" data-lang="go">&lt;span style="display:flex;">&lt;span>rc &lt;span style="color:#719e07">:=&lt;/span> config. &lt;span style="color:#268bd2">NewRootConfigBuilder&lt;/span>().
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetProvider&lt;/span>(config. &lt;span style="color:#268bd2">NewProviderConfigBuilder&lt;/span>().
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">AddService&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;GreeterProvider&amp;#34;&lt;/span>, config. &lt;span style="color:#268bd2">NewServiceConfigBuilder&lt;/span>().
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetInterface&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;org. apache. dubbo. UserProvider&amp;#34;&lt;/span>).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">SetProtocolIDs&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;tripleProtocolKey&amp;#34;&lt;/span>). &lt;span style="color:#586e75">// use protocolID &amp;#39;tripleProtocolKey&amp;#39;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75">&lt;/span> &lt;span style="color:#268bd2">Build&lt;/span>()).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">Build&lt;/span>()).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">AddProtocol&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;tripleProtocolKey&amp;#34;&lt;/span>, config. &lt;span style="color:#268bd2">NewProtocolConfigBuilder&lt;/span>(). &lt;span style="color:#586e75">// define protocol config with protocolID &amp;#39;tripleProtocolKey&amp;#39;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75">&lt;/span> &lt;span style="color:#268bd2">SetName&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;tri&amp;#34;&lt;/span>). &lt;span style="color:#586e75">// set service protocol to triple
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75">&lt;/span> &lt;span style="color:#268bd2">Build&lt;/span>()).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">build&lt;/span>()
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="heading-1">&lt;/h3></description></item><item><title>Docs3-V2: Configuration Overview</title><link>https://dubbo.apache.org/en/docs3-v2/java-sdk/reference-manual/config/overview/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/docs3-v2/java-sdk/reference-manual/config/overview/</guid><description>
&lt;p>Quickly jump to the content you care about through the following links:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="../../../quick-start/spring-boot/">Use Spring Boot to quickly develop Dubbo applications&lt;/a>&lt;/li>
&lt;li>&lt;a href="../properties">Configuration item reference manual to know what configuration items are available&lt;/a>&lt;/li>
&lt;li>&lt;a href="../principle">How configuration loading and overriding works&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="configuration-components">Configuration components&lt;/h2>
&lt;p>In order to better manage various configurations, Dubbo abstracts a set of structured configuration components. Each component is generally divided by purpose and controls the behavior of different scopes.&lt;/p>
&lt;p>&lt;img src="https://dubbo.apache.org/imgs/user/dubbo-config.jpg" alt="dubbo-config">&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Component Name&lt;/th>
&lt;th>Description&lt;/th>
&lt;th>Scope&lt;/th>
&lt;th>Required&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>application&lt;/td>
&lt;td>Specify the application-level information such as the application name&lt;/td>
&lt;td>Only one application is allowed in an application&lt;/td>
&lt;td>Required&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>service&lt;/td>
&lt;td>Declare a common interface or implementation class as a Dubbo service&lt;/td>
&lt;td>There can be 0 or more services in an application&lt;/td>
&lt;td>At least one service/reference&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>reference&lt;/td>
&lt;td>Declare a common interface as a Dubbo service&lt;/td>
&lt;td>There can be 0 or more references in an application&lt;/td>
&lt;td>At least one service/reference&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>protocol&lt;/td>
&lt;td>The RPC protocol to be exposed and related configurations such as port numbers, etc.&lt;/td>
&lt;td>One application can be configured with multiple, one protocol can be used for a set of service&amp;amp;reference&lt;/td>
&lt;td>optional, default dubbo&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>registry&lt;/td>
&lt;td>Registry type, address and related configuration&lt;/td>
&lt;td>Multiple configurations can be made in one application, and one registry can be applied to a group of service&amp;amp;references&lt;/td>
&lt;td>Mandatory&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>config-center&lt;/td>
&lt;td>configuration center type, address and related configurations&lt;/td>
&lt;td>multiple configurations in one application, shared by all services&lt;/td>
&lt;td>optional&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>metadata-report&lt;/td>
&lt;td>metadata center type, address and related configuration&lt;/td>
&lt;td>multiple configurations in one application, shared by all services&lt;/td>
&lt;td>optional&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Consumer&lt;/td>
&lt;td>The default configuration shared between references&lt;/td>
&lt;td>Multiple configurations can be configured in one application, and one consumer can act on a group of references&lt;/td>
&lt;td>Optional&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Provider&lt;/td>
&lt;td>The default configuration shared between services&lt;/td>
&lt;td>Multiple configurations can be configured in one application, and one provider can be used for a group of services&lt;/td>
&lt;td>Optional&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>monitor&lt;/td>
&lt;td>monitoring system type and address&lt;/td>
&lt;td>only one can be configured in an application&lt;/td>
&lt;td>optional&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>metrics&lt;/td>
&lt;td>related configuration of the data acquisition module&lt;/td>
&lt;td>only one configuration is allowed in an application&lt;/td>
&lt;td>optional&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>ssl&lt;/td>
&lt;td>ssl/tls security link-related certificate configuration&lt;/td>
&lt;td>Only one configuration is allowed in an application&lt;/td>
&lt;td>optional&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>method&lt;/td>
&lt;td>specifies method-level configuration&lt;/td>
&lt;td>subconfigurations for service and reference&lt;/td>
&lt;td>optional&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>argument&lt;/td>
&lt;td>parameter configuration of a method&lt;/td>
&lt;td>subconfiguration of method&lt;/td>
&lt;td>optional&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;blockquote>
&lt;ol>
&lt;li>From the perspective of implementation principle, all configuration items of Dubbo will be assembled into the URL in the end, and the URL will be used as the carrier to pass during subsequent startup and RPC calls, thereby controlling the behavior of the framework. For more information, please refer to the Dubbo source code analysis series of documents or [Blog](/zh-cn/blog/2019/10/17/dubbo-in-url-unified model/#rpc call).&lt;/li>
&lt;li>For the specific configuration items supported by each component and their meanings, please refer to &lt;a href="../properties">Configuration Item Manual&lt;/a>&lt;/li>
&lt;/ol>
&lt;/blockquote>
&lt;h3 id="service-and-reference">service and reference&lt;/h3>
&lt;p>&lt;code>service&lt;/code> and &lt;code>reference&lt;/code> are the two most basic configuration items of Dubbo, they are used to register a specified interface or implementation class as a Dubbo service, and control the behavior of the service through configuration items.&lt;/p>
&lt;ul>
&lt;li>&lt;code>service&lt;/code> is used on the service provider side, the interface and implementation class configured by &lt;code>service&lt;/code> will be defined as a standard Dubbo service, so as to provide external RPC request services.&lt;/li>
&lt;li>&lt;code>reference&lt;/code> is used for service consumers, the interface configured by &lt;code>reference&lt;/code> will be defined as a standard Dubbo service, and the generated proxy can initiate an RPC request to the remote end.&lt;/li>
&lt;/ul>
&lt;p>Any number of &lt;code>service&lt;/code> and &lt;code>reference&lt;/code> can be configured in an application.&lt;/p>
&lt;h3 id="consumer-and-provider">consumer and provider&lt;/h3>
&lt;ul>
&lt;li>When there are multiple &lt;code>reference&lt;/code> configurations in the application, &lt;code>consumer&lt;/code> specifies the default values shared by these &lt;code>reference&lt;/code>s, such as shared timeouts, etc. to simplify cumbersome configurations, such as setting configurations separately in a &lt;code>reference&lt;/code> Item value, the configuration in this &lt;code>reference&lt;/code> takes precedence.&lt;/li>
&lt;li>When there are multiple &lt;code>service&lt;/code> configurations in the application, &lt;code>provider&lt;/code> specifies the default value shared by these &lt;code>service&lt;/code>, if a configuration item value is set separately in a &lt;code>service&lt;/code>, the configuration priority in the &lt;code>service&lt;/code> higher.&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>The consumer component can also carry out virtual grouping of references, and references under different groups can have different consumer default value settings; for example, in XML format configuration, the &amp;lt;dubbo:reference /&amp;gt; tag can be nested in &amp;lt;dubbo:consumer / &amp;gt; Implement grouping within tags. The same effect can also be achieved between provider and service.&lt;/p>
&lt;/blockquote>
&lt;h2 id="configuration-method">configuration method&lt;/h2>
&lt;p>According to the driving mode, it can be divided into the following five modes:&lt;/p>
&lt;h3 id="api-configuration">API configuration&lt;/h3>
&lt;p>The configuration is organized in the form of Java coding, including Raw API and Bootstrap API. For details, please refer to &lt;a href="../api">API configuration&lt;/a>.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-java" data-lang="java">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">public&lt;/span> &lt;span style="color:#268bd2">static&lt;/span> &lt;span style="color:#dc322f">void&lt;/span> &lt;span style="color:#268bd2">main&lt;/span>(String&lt;span style="color:#719e07">[]&lt;/span> args) &lt;span style="color:#268bd2">throws&lt;/span> IOException {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ServiceConfig&lt;span style="color:#719e07">&amp;lt;&lt;/span>GreetingsService&lt;span style="color:#719e07">&amp;gt;&lt;/span> service &lt;span style="color:#719e07">=&lt;/span> &lt;span style="color:#719e07">new&lt;/span> ServiceConfig&lt;span style="color:#719e07">&amp;lt;&amp;gt;&lt;/span>();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> service.setApplication(&lt;span style="color:#719e07">new&lt;/span> ApplicationConfig(&lt;span style="color:#2aa198">&amp;#34;first-dubbo-provider&amp;#34;&lt;/span>));
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> service.setRegistry(&lt;span style="color:#719e07">new&lt;/span> RegistryConfig(&lt;span style="color:#2aa198">&amp;#34;multicast://224.5.6.7:1234&amp;#34;&lt;/span>));
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> service.setInterface(GreetingsService.class);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> service.setRef(&lt;span style="color:#719e07">new&lt;/span> GreetingsServiceImpl());
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> service. &lt;span style="color:#268bd2">export&lt;/span>();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> System.out.println(&lt;span style="color:#2aa198">&amp;#34;first-dubbo-provider is running.&amp;#34;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> System.in.read();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="xml-configuration">XML configuration&lt;/h3>
&lt;p>Configure various components in XML and support seamless integration with Spring. For details, please refer to &lt;a href="../xml">XML Configuration&lt;/a>.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-xml" data-lang="xml">&lt;span style="display:flex;">&lt;span> &lt;span style="color:#586e75">&amp;lt;!-- dubbo-provier.xml --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;dubbo:application&lt;/span> name=&lt;span style="color:#2aa198">&amp;#34;demo-provider&amp;#34;&lt;/span>&lt;span style="color:#268bd2">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;dubbo:config-center&lt;/span> address=&lt;span style="color:#2aa198">&amp;#34;zookeeper://127.0.0.1:2181&amp;#34;&lt;/span>&lt;span style="color:#268bd2">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;dubbo:registry&lt;/span> address=&lt;span style="color:#2aa198">&amp;#34;zookeeper://127.0.0.1:2181&amp;#34;&lt;/span> simplified=&lt;span style="color:#2aa198">&amp;#34;true&amp;#34;&lt;/span>&lt;span style="color:#268bd2">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;dubbo:metadata-report&lt;/span> address=&lt;span style="color:#2aa198">&amp;#34;redis://127.0.0.1:6379&amp;#34;&lt;/span>&lt;span style="color:#268bd2">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;dubbo:protocol&lt;/span> name=&lt;span style="color:#2aa198">&amp;#34;dubbo&amp;#34;&lt;/span> port=&lt;span style="color:#2aa198">&amp;#34;20880&amp;#34;&lt;/span>&lt;span style="color:#268bd2">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;bean&lt;/span> id=&lt;span style="color:#2aa198">&amp;#34;demoService&amp;#34;&lt;/span> class=&lt;span style="color:#2aa198">&amp;#34;org.apache.dubbo.samples.basic.impl.DemoServiceImpl&amp;#34;&lt;/span>&lt;span style="color:#268bd2">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;dubbo:service&lt;/span> interface=&lt;span style="color:#2aa198">&amp;#34;org.apache.dubbo.samples.basic.api.DemoService&amp;#34;&lt;/span> ref=&lt;span style="color:#2aa198">&amp;#34;demoService&amp;#34;&lt;/span>&lt;span style="color:#268bd2">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="annotation-configuration">Annotation configuration&lt;/h3>
&lt;p>Expose services and reference service interfaces in the form of annotations, and support seamless integration with Spring. For details, please refer to &lt;a href="../annotation">Annotation Configuration&lt;/a>.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-java" data-lang="java">&lt;span style="display:flex;">&lt;span> &lt;span style="color:#586e75">// AnnotationService service implementation&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">@DubboService&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">public&lt;/span> &lt;span style="color:#268bd2">class&lt;/span> &lt;span style="color:#268bd2">AnnotationServiceImpl&lt;/span> &lt;span style="color:#268bd2">implements&lt;/span> AnnotationService {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">@Override&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">public&lt;/span> String &lt;span style="color:#268bd2">sayHello&lt;/span>(String name) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> System.out.println(&lt;span style="color:#2aa198">&amp;#34;async provider received: &amp;#34;&lt;/span> &lt;span style="color:#719e07">+&lt;/span> name);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">return&lt;/span> &lt;span style="color:#2aa198">&amp;#34;annotation: hello, &amp;#34;&lt;/span> &lt;span style="color:#719e07">+&lt;/span> name;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-properties" data-lang="properties">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75">## dubbo.properties&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>dubbo.application.name&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">annotation-provider&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>dubbo.registry.address&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">zookeeper://127.0.0.1:2181&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>dubbo.protocol.name&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">dubbo&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>dubbo.protocol.port&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">20880&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="spring-boot">Spring Boot&lt;/h3>
&lt;p>Use Spring Boot to reduce unnecessary configuration, and combine Annotation and application.properties/application.yml to develop Dubbo applications. For details, please refer to &lt;a href="../annotation">Annotation Configuration&lt;/a>.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-properties" data-lang="properties">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75">## application.properties&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75"># Spring boot application&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>spring.application.name&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">dubbo-externalized-configuration-provider-sample&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75"># Base packages to scan Dubbo Component: @com.alibaba.dubbo.config.annotation.Service&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>dubbo.scan.base-packages&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">com.alibaba.boot.dubbo.demo.provider.service&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75"># Dubbo Application&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75">## The default value of dubbo.application.name is ${spring.application.name}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75">## dubbo.application.name=${spring.application.name}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75">#Dubbo Protocol&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>dubbo.protocol.name&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">dubbo&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>dubbo.protocol.port&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">12345&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75">## Dubbo Registry&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>dubbo.registry.address&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">N/A&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75">## DemoService version&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>demo.service.version&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">1.0.0&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="property-configuration">Property configuration&lt;/h3>
&lt;p>Generate configuration components according to the attribute Key-value, similar to SpringBoot&amp;rsquo;s ConfigurationProperties, please refer to &lt;a href="../properties">property configuration&lt;/a> for details.&lt;/p>
&lt;p>Another important feature of property configuration is [property override](../principle/#32-property override), which overrides the created configuration component property with the value of an external property.&lt;/p>
&lt;p>If you want to put the attribute configuration in an external configuration center, please refer to [Externalized Configuration](../principle/#33-Externalized Configuration).&lt;/p>
&lt;p>In addition to the differences in peripheral drive methods, Dubbo&amp;rsquo;s configuration reading generally follows the following principles:&lt;/p>
&lt;ol>
&lt;li>Dubbo supports multi-level configuration, and automatically realizes the coverage between configurations according to the predetermined priority. Finally, all configurations are summarized into the data bus URL to drive subsequent service exposure, reference and other processes.&lt;/li>
&lt;li>The configuration format is mainly Properties, and the configuration content follows the agreed &lt;code>path-based&lt;/code>[naming convention](../principle/#1-configuration format)&lt;/li>
&lt;/ol>
&lt;h2 id="configure-the-loading-process">Configure the loading process&lt;/h2>
&lt;h3 id="configuration-specifications-and-sources">Configuration specifications and sources&lt;/h3>
&lt;p>Dubbo follows a &lt;a href="../principle/">path-based configuration specification&lt;/a>, and each configuration component can be expressed in this way. In terms of configuration sources, a total of 6 configuration sources are supported, that is, Dubbo will try to load configuration data from the following locations:&lt;/p>
&lt;ul>
&lt;li>JVM System Properties, JVM -D parameter&lt;/li>
&lt;li>System environment, the environment variable of the JVM process&lt;/li>
&lt;li>Externalized Configuration, [externalized configuration] (../principle/#33-externalized configuration), read from the configuration center&lt;/li>
&lt;li>Application Configuration, application attribute configuration, extract the attribute set starting with &amp;ldquo;dubbo&amp;rdquo; from the Spring application Environment&lt;/li>
&lt;li>The configuration collected by programming interfaces such as API/XML/annotation can be understood as a kind of configuration source, which is a configuration collection method directly oriented to user programming&lt;/li>
&lt;li>Read configuration file dubbo.properties from classpath&lt;/li>
&lt;/ul></description></item><item><title>Docs3-V2: Custom service call middleware</title><link>https://dubbo.apache.org/en/docs3-v2/golang-sdk/tutorial/governance/features/aop/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/docs3-v2/golang-sdk/tutorial/governance/features/aop/</guid><description>
&lt;p>Refer to samples &lt;a href="https://github.com/apache/dubbo-go-samples/tree/master/filter">dubbo-go-samples/filter&lt;/a>&lt;/p>
&lt;h2 id="1-preparations">1. Preparations&lt;/h2>
&lt;ul>
&lt;li>dubbo-go cli tools and dependent tools have been installed&lt;/li>
&lt;li>Read &lt;a href="https://dubbo.apache.org/en/docs3-v2/golang-sdk/preface/design/aop_and_extension/">[Component Loading and Extensibility]&lt;/a>&lt;/li>
&lt;li>Create a new demo application&lt;/li>
&lt;/ul>
&lt;h2 id="2-configure-the-specified-filter">2. Configure the specified Filter&lt;/h2>
&lt;p>When specifying a filter, it can be separated by &amp;lsquo;,&amp;rsquo;&lt;/p>
&lt;ul>
&lt;li>
&lt;p>Consumer side&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">dubbo&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">consumer&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">filter&lt;/span>: echo,token,tps,myCustomFilter &lt;span style="color:#586e75"># Custom filter can be specified&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Provider side&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">dubbo&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">provider&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">services&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">GreeterProvider&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">filter&lt;/span>: myCustomFilter, echo, tps
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ul>
&lt;h2 id="3-custom-filter">3. Custom Filter&lt;/h2>
&lt;p>Users can customize Filter in the code, register it on the framework, and choose to use it in the configuration.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-go" data-lang="go">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">func&lt;/span> &lt;span style="color:#268bd2">init&lt;/span>() {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>extension. &lt;span style="color:#268bd2">SetFilter&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;myCustomFilter&amp;#34;&lt;/span>, NewMyClientFilter)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">func&lt;/span> &lt;span style="color:#268bd2">NewMyClientFilter&lt;/span>() filter. Filter {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#719e07">return&lt;/span> &lt;span style="color:#719e07">&amp;amp;&lt;/span>MyClientFilter{}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">type&lt;/span> MyClientFilter &lt;span style="color:#268bd2">struct&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">func&lt;/span> (f &lt;span style="color:#719e07">*&lt;/span>MyClientFilter) &lt;span style="color:#268bd2">Invoke&lt;/span>(ctx context.Context, invoker protocol.Invoker, invocation protocol.Invocation) protocol.Result {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>fmt.&lt;span style="color:#268bd2">Println&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;MyClientFilter Invoke is called, method Name = &amp;#34;&lt;/span>, invocation.&lt;span style="color:#268bd2">MethodName&lt;/span>())
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#719e07">return&lt;/span> invoker. &lt;span style="color:#268bd2">Invoke&lt;/span>(ctx, invocation)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">func&lt;/span> (f &lt;span style="color:#719e07">*&lt;/span>MyClientFilter) &lt;span style="color:#268bd2">OnResponse&lt;/span>(ctx context.Context, result protocol.Result, invoker protocol.Invoker, protocol protocol.Invocation) protocol.Result {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>fmt.&lt;span style="color:#268bd2">Println&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;MyClientFilter OnResponse is called&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#719e07">return&lt;/span> result
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Docs3-V2: Custom Service Container</title><link>https://dubbo.apache.org/en/docs3-v2/java-sdk/advanced-features-and-usage/others/service-container/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/docs3-v2/java-sdk/advanced-features-and-usage/others/service-container/</guid><description>
&lt;h2 id="feature-description">Feature description&lt;/h2>
&lt;p>The service container of Dubbo 3 is a standalone startup program, because the background service does not need the functions of web containers such as Tomcat or JBoss. If you insist on using the web container to load the service provider, it will increase complexity and waste resources. Therefore, services usually do not require the features of web containers such as Tomcat/JBoss, and there is no need to use web containers to load services.&lt;/p>
&lt;p>The Dubbo3 service container is just a simple Main method and loads a simple Spring container for exposing services.&lt;/p>
&lt;p>The loading content of the service container can be extended, and spring, jetty, log4j, etc. are built-in, and can be extended through &lt;a href="../../../reference-manual/spi/description/container">container extension point&lt;/a>. The configuration is configured in the -D parameter of the java command or &lt;code>dubbo.properties&lt;/code>.&lt;/p>
&lt;h2 id="scenes-to-be-used">scenes to be used&lt;/h2>
&lt;p>The web container is mainly used to respond to http requests and static pages. The Dubbo service provider only provides dubbo services externally. It is not suitable to use the web container. As a dubbo service provider alone, it only needs to load a simple spring container through a main method Expose the service.&lt;/p>
&lt;h2 id="how-to-use">How to use&lt;/h2>
&lt;h3 id="spring-container">Spring Container&lt;/h3>
&lt;ul>
&lt;li>
&lt;p>Autoload all Spring configurations under the &lt;code>META-INF/spring&lt;/code> directory.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Configure the spring configuration loading location:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>dubbo.spring.config=classpath*:META-INF/spring/*.xml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ul>
&lt;h3 id="jetty-container">Jetty Container&lt;/h3>
&lt;ul>
&lt;li>Starts an embedded Jetty for reporting status.&lt;/li>
&lt;li>configuration:
&lt;ul>
&lt;li>&lt;code>dubbo.jetty.port=8080&lt;/code>: configure jetty startup port&lt;/li>
&lt;li>&lt;code>dubbo.jetty.directory=/foo/bar&lt;/code>: Configure a directory that can be directly accessed through jetty to store static files&lt;/li>
&lt;li>&lt;code>dubbo.jetty.page=log,status,system&lt;/code>: configure the displayed pages, all pages are loaded by default&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="log4j-container">Log4j Container&lt;/h3>
&lt;ul>
&lt;li>Automatically configure the configuration of log4j. When multiple processes are started, the log files are automatically divided into directories by process.&lt;/li>
&lt;li>configuration:
&lt;ul>
&lt;li>&lt;code>dubbo.log4j.file=/foo/bar.log&lt;/code>: configure log file path&lt;/li>
&lt;li>&lt;code>dubbo.log4j.level=WARN&lt;/code>: configure log level&lt;/li>
&lt;li>&lt;code>dubbo.log4j.subdirectory=20880&lt;/code>: Configure the log subdirectory for multi-process startup to avoid conflicts&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="container-loading-instructions">Container loading instructions&lt;/h3>
&lt;p>Only spring is loaded by default&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>java org.apache.dubbo.container.Main
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Pass in the container to be loaded through the main function parameter&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>java org.apache.dubbo.container.Main spring jetty log4j
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Pass in the container to be loaded through the JVM startup parameters&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sh" data-lang="sh">&lt;span style="display:flex;">&lt;span>java org.apache.dubbo.container.Main -Ddubbo.container&lt;span style="color:#719e07">=&lt;/span>spring,jetty,log4j
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Pass in the container to be loaded through &lt;code>dubbo.properties&lt;/code> configuration under the classpath&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>dubbo.container=spring,jetty,log4j
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Docs3-V2: Deploy the Istio environment</title><link>https://dubbo.apache.org/en/docs3-v2/golang-sdk/tutorial/governance/service-mesh/istio/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/docs3-v2/golang-sdk/tutorial/governance/service-mesh/istio/</guid><description>
&lt;h2 id="1-preparations">1. Preparations&lt;/h2>
&lt;ul>
&lt;li>The docker, helm, and kubectl environments have been installed.&lt;/li>
&lt;li>dubbo-go cli tools and dependent tools have been installed&lt;/li>
&lt;/ul>
&lt;h2 id="2-deploy-the-istio-environment">2. Deploy the Istio environment&lt;/h2>
&lt;ol>
&lt;li>Use helm to install istio base CRD and istiod components. You can also refer to &lt;a href="https://istio.io/">Istio Documentation&lt;/a> to install using istioctl.&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>$ helm repo add istio https://istio-release.storage.googleapis.com/charts
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$ kubectl create namespace istio-system
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$ helm install istio-base istio/base -n istio-system
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$ helm install istiod istio/istiod --namespace istio-system
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="2">
&lt;li>
&lt;p>Delete istio horizontal expansion resource&lt;/p>
&lt;p>*Currently dubbo-go relies on a single istiod instance for service discovery.&lt;/p>
&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>$ kubectl delete hpa istiod -n istio-system
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>After the installation is complete, you can see an istiod pod running normally under the istio-system namespace.&lt;/p></description></item><item><title>Docs: The Devil Is In The Details</title><link>https://dubbo.apache.org/en/docs/v2.7/dev/principals/code-detail/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/docs/v2.7/dev/principals/code-detail/</guid><description>
&lt;p>Recently, I have been worried about the quality of the Dubbo distributed service framework. If there are more maintenance personnel or changes, there will be a decline in quality. I am thinking, is there any need for everyone to abide by it, according to a habit when writing code, I have summarized it. The code process, especially the framework code, should always keep in mind the details. Maybe the following will be said, everyone will feel very simple, very basic, but always keep in mind. Considering these factors in every line of code requires a lot of patience. It is often said that the devil is in the details.&lt;/p>
&lt;h2 id="prevent-null-pointer-dereference-and-index-out-of-bounds">Prevent null pointer dereference and index out of bounds&lt;/h2>
&lt;p>This is the exception I least like to see, especially in the core framework, in contrast I would like to see a parameter not legal exception with detail information. This is also a robust program developer who should be prevented in the subconscious by writing every line of code. Basically, you must be able to ensure that the code that is written once will not appear in the case of no test.&lt;/p>
&lt;h2 id="ensure-thread-safety-and-visibility">Ensure thread safety and visibility&lt;/h2>
&lt;p>For framework developers, a deep understanding of thread safety and visibility is the most basic requirement. Developers are required to ensure that they are correct in the subconscious when writing each line of code. Because of this kind of code, it will look normal when doing functional tests under small concurrency. However, under high concurrency, there will be inexplicable problems, and the scene is difficult to reproduce, and it is extremely difficult to check.&lt;/p>
&lt;h2 id="fail-fast-and-precondition">Fail fast and precondition&lt;/h2>
&lt;p>Fail fast should also become a subconscious mind, assert at the entrance when there are incoming parameters and state changes. An illegal value and state should be reported at the first time, rather than waiting until the time is needed. Because when it is time to use, other related states may have been modified before, and few people in the program handle the rollback logic. After this error, the internal state may be confusing, and it is easy to cause the program to be unrecoverable on a hidden branch.&lt;/p>
&lt;h2 id="separate-reliable-operation-and-unreliable-operation">Separate reliable operation and unreliable operation&lt;/h2>
&lt;p>The reliability here is narrowly defined whether it will throw an exception or cause a state inconsistency. For example, writing a thread-safe Map can be considered reliable, but writing to a database can be considered unreliable. Developers must pay attention to its reliability when writing each line of code, divide it as much as possible in the code, and handle exceptions for failures, and provide clear logic for fault-tolerant, self-protection, automatic recovery or switching. The entry point ensures that the code that is subsequently added is not misplaced, and the original fault-tolerant processing is confusing.&lt;/p>
&lt;h2 id="safeguard-against-exceptions-but-does-not-ignore-exceptions">Safeguard against exceptions, but does not ignore exceptions&lt;/h2>
&lt;p>The exception defense mentioned here refers to the maximum tolerance of the code on the non-crucial path, including the bug on the program. For example, the version number of program is retrieved by scanning the Manifest and jar package names. This logic is auxiliary, but the code is quite a bit. Although the initial test works well but you should add a try-catch block to cover the whole getVersion() function, if something goes wrong then print error message and return the basic version. Because getVersion() may encounter exception for specific unknown scene, or other developers mistakenly modify the logic (usually they won&amp;rsquo;t remove try-catch). Otherwise if it throws an exception, the main process will be interrupted which we don&amp;rsquo;t want to see. It should be controlled properly, do not abuse try-catch, and do not eat the exception silently.&lt;/p>
&lt;h2 id="reduce-scope-of-variable-and-use-final-liberally">Reduce scope of variable and use final liberally&lt;/h2>
&lt;p>If a class can be an Immutable Class, it is preferred to design it as an Immutable Class. The immutable class has natural concurrency advantages, reduce synchronization and replication, it can efficiently help analyze the scope of thread safety. Even if a mutable class, for references passed in from constructor then held internally, it is better to make this field final, so as not to be mistakenly modified. Don&amp;rsquo;t assume that the field won&amp;rsquo;t be reassigned if this field is private or this class is written by myself. One factor to consider is that this code may be modified by others. He may not aware your weak convention, and the Final is a invariant contract.&lt;/p>
&lt;h2 id="reduce-misunderstanding-when-modifying-do-not-bury-mine">Reduce misunderstanding when modifying, do not bury mine&lt;/h2>
&lt;p>It is repeatedly mentioned that the code being modified by the others, and this is something developers should keep in mind. This other person includes the future of yourself, you always have to think about this code, someone may change it. I should give the modified person a hint, let him know my current design intent, instead of adding hidden rules in the program, or bury some easily overlooked mines, such as: use null to indicate that it is not available, the size is equal to 0 means black list, this is a mine. The next modifier, including yourself, will not remember to have such an agreement, may later change some of the other bugs, accidentally changed to here, directly detonated the fault. For this example, one principle is to never distinguish between null references and null values.&lt;/p>
&lt;h2 id="improve-code-testability">Improve code testability&lt;/h2>
&lt;p>The testability here mainly refers to the ease of Mock and the isolation of the test cases. As for the automation, repeatability, stability, disorder, completeness (full coverage), lightweight (fast execution) of the test, the general developer, plus the assist of tools such as JUnit can do it. Can also understand its benefits, just the matter of workload. Primary emphasis on unicity(only test the target class itself) and isolation(do not propagate failure). Nowadays there is too much emphasis on completeness, a lot of crossed and repeated test cases. It seems fine, but the more test code, the higher maintenance cost. A common problem is that modifying a line of code or adding an assertion causes more than 100 test cases to fail. It will cost a lot of time to fix these variance test cases. Over time, this test cases can&amp;rsquo;t really reflect the current state of the code, and it will often be compromised to bypass. In the best case, modify a line of code, and only one line of test code does not pass. If the code is modified and the test case can still pass, that doesn&amp;rsquo;t work, indicating that the scenario is not covered. In addition, Mockability is the basis of isolation, it hide the logic of indirect dependencies. One of the biggest killers of Mockability is the static method, which should be avoid as possible.&lt;/p></description></item><item><title>Docs3-V2: Distributed Transactions</title><link>https://dubbo.apache.org/en/docs3-v2/java-sdk/advanced-features-and-usage/service/transaction/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/docs3-v2/java-sdk/advanced-features-and-usage/service/transaction/</guid><description>
&lt;h2 id="how-to-use">How to use&lt;/h2>
&lt;h3 id="first-step">&lt;strong>First step&lt;/strong>&lt;/h3>
&lt;p>First visit: &lt;a href="https://seata.io/zh-cn/blog/download.html">https://seata.io/zh-cn/blog/download.html&lt;/a>&lt;/p>
&lt;p>Download the seata1.5.2 service we need to use&lt;/p>
&lt;h3 id="second-step">&lt;strong>Second step&lt;/strong>&lt;/h3>
&lt;ol>
&lt;li>Add the undo_log table to your database participating in global transactions (TCC, SAGA, XA can skip this step)&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75">-- for AT mode you must to init this sql for you business database. the seata server not need it.
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75">&lt;/span>&lt;span style="color:#719e07">CREATE&lt;/span> &lt;span style="color:#719e07">TABLE&lt;/span> &lt;span style="color:#719e07">IF&lt;/span> &lt;span style="color:#719e07">NOT&lt;/span> &lt;span style="color:#719e07">EXISTS&lt;/span> &lt;span style="color:#719e07">`&lt;/span>undo_log&lt;span style="color:#719e07">`&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">`&lt;/span>branch_id&lt;span style="color:#719e07">`&lt;/span> &lt;span style="color:#b58900">BIGINT&lt;/span>(&lt;span style="color:#2aa198">20&lt;/span>) &lt;span style="color:#719e07">NOT&lt;/span> &lt;span style="color:#719e07">NULL&lt;/span> &lt;span style="color:#719e07">COMMENT&lt;/span> &lt;span style="color:#2aa198">&amp;#39;branch transaction id&amp;#39;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">`&lt;/span>xid&lt;span style="color:#719e07">`&lt;/span> &lt;span style="color:#b58900">VARCHAR&lt;/span>(&lt;span style="color:#2aa198">100&lt;/span>) &lt;span style="color:#719e07">NOT&lt;/span> &lt;span style="color:#719e07">NULL&lt;/span> &lt;span style="color:#719e07">COMMENT&lt;/span> &lt;span style="color:#2aa198">&amp;#39;global transaction id&amp;#39;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">`&lt;/span>context&lt;span style="color:#719e07">`&lt;/span> &lt;span style="color:#b58900">VARCHAR&lt;/span>(&lt;span style="color:#2aa198">128&lt;/span>) &lt;span style="color:#719e07">NOT&lt;/span> &lt;span style="color:#719e07">NULL&lt;/span> &lt;span style="color:#719e07">COMMENT&lt;/span> &lt;span style="color:#2aa198">&amp;#39;undo_log context, such as serialization&amp;#39;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">`&lt;/span>rollback_info&lt;span style="color:#719e07">`&lt;/span> LONGBLOB &lt;span style="color:#719e07">NOT&lt;/span> &lt;span style="color:#719e07">NULL&lt;/span> &lt;span style="color:#719e07">COMMENT&lt;/span> &lt;span style="color:#2aa198">&amp;#39;rollback info&amp;#39;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">`&lt;/span>log_status&lt;span style="color:#719e07">`&lt;/span> &lt;span style="color:#b58900">INT&lt;/span>(&lt;span style="color:#2aa198">11&lt;/span>) &lt;span style="color:#719e07">NOT&lt;/span> &lt;span style="color:#719e07">NULL&lt;/span> &lt;span style="color:#719e07">COMMENT&lt;/span> &lt;span style="color:#2aa198">&amp;#39;0: normal status,1: defense status&amp;#39;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">`&lt;/span>log_created&lt;span style="color:#719e07">`&lt;/span> DATETIME(&lt;span style="color:#2aa198">6&lt;/span>) &lt;span style="color:#719e07">NOT&lt;/span> &lt;span style="color:#719e07">NULL&lt;/span> &lt;span style="color:#719e07">COMMENT&lt;/span> &lt;span style="color:#2aa198">&amp;#39;create datetime&amp;#39;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">`&lt;/span>log_modified&lt;span style="color:#719e07">`&lt;/span> DATETIME(&lt;span style="color:#2aa198">6&lt;/span>) &lt;span style="color:#719e07">NOT&lt;/span> &lt;span style="color:#719e07">NULL&lt;/span> &lt;span style="color:#719e07">COMMENT&lt;/span> &lt;span style="color:#2aa198">&amp;#39;modify datetime&amp;#39;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">UNIQUE&lt;/span> &lt;span style="color:#719e07">KEY&lt;/span> &lt;span style="color:#719e07">`&lt;/span>ux_undo_log&lt;span style="color:#719e07">`&lt;/span> (&lt;span style="color:#719e07">`&lt;/span>xid&lt;span style="color:#719e07">`&lt;/span>, &lt;span style="color:#719e07">`&lt;/span>branch_id&lt;span style="color:#719e07">`&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>) ENGINE &lt;span style="color:#719e07">=&lt;/span> InnoDB
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> AUTO_INCREMENT &lt;span style="color:#719e07">=&lt;/span> &lt;span style="color:#2aa198">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">DEFAULT&lt;/span> CHARSET &lt;span style="color:#719e07">=&lt;/span> utf8 &lt;span style="color:#719e07">COMMENT&lt;/span> &lt;span style="color:#719e07">=&lt;/span> &lt;span style="color:#2aa198">&amp;#39;AT transaction mode undo table&amp;#39;&lt;/span>;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="2">
&lt;li>Create a library named seata in your mysql database, and use the following sql&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75">-- -------------------------------- The script used when storeMode is &amp;#39;db&amp;#39; ------- -------------------------
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75">-- the table to store GlobalSession data
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75">&lt;/span>&lt;span style="color:#719e07">CREATE&lt;/span> &lt;span style="color:#719e07">TABLE&lt;/span> &lt;span style="color:#719e07">IF&lt;/span> &lt;span style="color:#719e07">NOT&lt;/span> &lt;span style="color:#719e07">EXISTS&lt;/span> &lt;span style="color:#719e07">`&lt;/span>global_table&lt;span style="color:#719e07">`&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">`&lt;/span>xid&lt;span style="color:#719e07">`&lt;/span> &lt;span style="color:#b58900">VARCHAR&lt;/span>(&lt;span style="color:#2aa198">128&lt;/span>) &lt;span style="color:#719e07">NOT&lt;/span> &lt;span style="color:#719e07">NULL&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">`&lt;/span>transaction_id&lt;span style="color:#719e07">`&lt;/span> &lt;span style="color:#b58900">BIGINT&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">`&lt;/span>status&lt;span style="color:#719e07">`&lt;/span> TINYINT &lt;span style="color:#719e07">NOT&lt;/span> &lt;span style="color:#719e07">NULL&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">`&lt;/span>application_id&lt;span style="color:#719e07">`&lt;/span> &lt;span style="color:#b58900">VARCHAR&lt;/span>(&lt;span style="color:#2aa198">32&lt;/span>),
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">`&lt;/span>transaction_service_group&lt;span style="color:#719e07">`&lt;/span> &lt;span style="color:#b58900">VARCHAR&lt;/span>(&lt;span style="color:#2aa198">32&lt;/span>),
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">`&lt;/span>transaction_name&lt;span style="color:#719e07">`&lt;/span> &lt;span style="color:#b58900">VARCHAR&lt;/span>(&lt;span style="color:#2aa198">128&lt;/span>),
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">`&lt;/span>timeout&lt;span style="color:#719e07">`&lt;/span> &lt;span style="color:#b58900">INT&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">`&lt;/span>begin_time&lt;span style="color:#719e07">`&lt;/span> &lt;span style="color:#b58900">BIGINT&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">`&lt;/span>application_data&lt;span style="color:#719e07">`&lt;/span> &lt;span style="color:#b58900">VARCHAR&lt;/span>(&lt;span style="color:#2aa198">2000&lt;/span>),
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">`&lt;/span>gmt_create&lt;span style="color:#719e07">`&lt;/span> DATETIME,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">`&lt;/span>gmt_modified&lt;span style="color:#719e07">`&lt;/span> DATETIME,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">PRIMARY&lt;/span> &lt;span style="color:#719e07">KEY&lt;/span> (&lt;span style="color:#719e07">`&lt;/span>xid&lt;span style="color:#719e07">`&lt;/span>),
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">KEY&lt;/span> &lt;span style="color:#719e07">`&lt;/span>idx_gmt_modified_status&lt;span style="color:#719e07">`&lt;/span> (&lt;span style="color:#719e07">`&lt;/span>gmt_modified&lt;span style="color:#719e07">`&lt;/span>, &lt;span style="color:#719e07">`&lt;/span>status&lt;span style="color:#719e07">`&lt;/span>),
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">KEY&lt;/span> &lt;span style="color:#719e07">`&lt;/span>idx_transaction_id&lt;span style="color:#719e07">`&lt;/span> (&lt;span style="color:#719e07">`&lt;/span>transaction_id&lt;span style="color:#719e07">`&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>) ENGINE &lt;span style="color:#719e07">=&lt;/span> InnoDB
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">DEFAULT&lt;/span> CHARSET &lt;span style="color:#719e07">=&lt;/span> utf8;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75">-- the table to store BranchSession data
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75">&lt;/span>&lt;span style="color:#719e07">CREATE&lt;/span> &lt;span style="color:#719e07">TABLE&lt;/span> &lt;span style="color:#719e07">IF&lt;/span> &lt;span style="color:#719e07">NOT&lt;/span> &lt;span style="color:#719e07">EXISTS&lt;/span> &lt;span style="color:#719e07">`&lt;/span>branch_table&lt;span style="color:#719e07">`&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">`&lt;/span>branch_id&lt;span style="color:#719e07">`&lt;/span> &lt;span style="color:#b58900">BIGINT&lt;/span> &lt;span style="color:#719e07">NOT&lt;/span> &lt;span style="color:#719e07">NULL&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">`&lt;/span>xid&lt;span style="color:#719e07">`&lt;/span> &lt;span style="color:#b58900">VARCHAR&lt;/span>(&lt;span style="color:#2aa198">128&lt;/span>) &lt;span style="color:#719e07">NOT&lt;/span> &lt;span style="color:#719e07">NULL&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">`&lt;/span>transaction_id&lt;span style="color:#719e07">`&lt;/span> &lt;span style="color:#b58900">BIGINT&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">`&lt;/span>resource_group_id&lt;span style="color:#719e07">`&lt;/span> &lt;span style="color:#b58900">VARCHAR&lt;/span>(&lt;span style="color:#2aa198">32&lt;/span>),
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">`&lt;/span>resource_id&lt;span style="color:#719e07">`&lt;/span> &lt;span style="color:#b58900">VARCHAR&lt;/span>(&lt;span style="color:#2aa198">256&lt;/span>),
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">`&lt;/span>branch_type&lt;span style="color:#719e07">`&lt;/span> &lt;span style="color:#b58900">VARCHAR&lt;/span>(&lt;span style="color:#2aa198">8&lt;/span>),
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">`&lt;/span>status&lt;span style="color:#719e07">`&lt;/span> TINYINT,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">`&lt;/span>client_id&lt;span style="color:#719e07">`&lt;/span> &lt;span style="color:#b58900">VARCHAR&lt;/span>(&lt;span style="color:#2aa198">64&lt;/span>),
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">`&lt;/span>application_data&lt;span style="color:#719e07">`&lt;/span> &lt;span style="color:#b58900">VARCHAR&lt;/span>(&lt;span style="color:#2aa198">2000&lt;/span>),
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">`&lt;/span>gmt_create&lt;span style="color:#719e07">`&lt;/span> DATETIME(&lt;span style="color:#2aa198">6&lt;/span>),
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">`&lt;/span>gmt_modified&lt;span style="color:#719e07">`&lt;/span> DATETIME(&lt;span style="color:#2aa198">6&lt;/span>),
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">PRIMARY&lt;/span> &lt;span style="color:#719e07">KEY&lt;/span> (&lt;span style="color:#719e07">`&lt;/span>branch_id&lt;span style="color:#719e07">`&lt;/span>),
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">KEY&lt;/span> &lt;span style="color:#719e07">`&lt;/span>idx_xid&lt;span style="color:#719e07">`&lt;/span> (&lt;span style="color:#719e07">`&lt;/span>xid&lt;span style="color:#719e07">`&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>) ENGINE &lt;span style="color:#719e07">=&lt;/span> InnoDB
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">DEFAULT&lt;/span> CHARSET &lt;span style="color:#719e07">=&lt;/span> utf8;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75">-- the table to store lock data
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75">&lt;/span>&lt;span style="color:#719e07">CREATE&lt;/span> &lt;span style="color:#719e07">TABLE&lt;/span> &lt;span style="color:#719e07">IF&lt;/span> &lt;span style="color:#719e07">NOT&lt;/span> &lt;span style="color:#719e07">EXISTS&lt;/span> &lt;span style="color:#719e07">`&lt;/span>lock_table&lt;span style="color:#719e07">`&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">`&lt;/span>row_key&lt;span style="color:#719e07">`&lt;/span> &lt;span style="color:#b58900">VARCHAR&lt;/span>(&lt;span style="color:#2aa198">128&lt;/span>) &lt;span style="color:#719e07">NOT&lt;/span> &lt;span style="color:#719e07">NULL&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">`&lt;/span>xid&lt;span style="color:#719e07">`&lt;/span> &lt;span style="color:#b58900">VARCHAR&lt;/span>(&lt;span style="color:#2aa198">96&lt;/span>),
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">`&lt;/span>transaction_id&lt;span style="color:#719e07">`&lt;/span> &lt;span style="color:#b58900">BIGINT&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">`&lt;/span>branch_id&lt;span style="color:#719e07">`&lt;/span> &lt;span style="color:#b58900">BIGINT&lt;/span> &lt;span style="color:#719e07">NOT&lt;/span> &lt;span style="color:#719e07">NULL&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">`&lt;/span>resource_id&lt;span style="color:#719e07">`&lt;/span> &lt;span style="color:#b58900">VARCHAR&lt;/span>(&lt;span style="color:#2aa198">256&lt;/span>),
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">`&lt;/span>&lt;span style="color:#719e07">table_name&lt;/span>&lt;span style="color:#719e07">`&lt;/span> &lt;span style="color:#b58900">VARCHAR&lt;/span>(&lt;span style="color:#2aa198">32&lt;/span>),
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">`&lt;/span>pk&lt;span style="color:#719e07">`&lt;/span> &lt;span style="color:#b58900">VARCHAR&lt;/span>(&lt;span style="color:#2aa198">36&lt;/span>),
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">`&lt;/span>gmt_create&lt;span style="color:#719e07">`&lt;/span> DATETIME,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">`&lt;/span>gmt_modified&lt;span style="color:#719e07">`&lt;/span> DATETIME,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">PRIMARY&lt;/span> &lt;span style="color:#719e07">KEY&lt;/span> (&lt;span style="color:#719e07">`&lt;/span>row_key&lt;span style="color:#719e07">`&lt;/span>),
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">KEY&lt;/span> &lt;span style="color:#719e07">`&lt;/span>idx_branch_id&lt;span style="color:#719e07">`&lt;/span> (&lt;span style="color:#719e07">`&lt;/span>branch_id&lt;span style="color:#719e07">`&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>) ENGINE &lt;span style="color:#719e07">=&lt;/span> InnoDB
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">DEFAULT&lt;/span> CHARSET &lt;span style="color:#719e07">=&lt;/span> utf8;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="third-step">&lt;strong>third step&lt;/strong>&lt;/h3>
&lt;p>Introduce seata dependency into your project&lt;/p>
&lt;p>spring-boot application:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span> &amp;lt;dependency&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;groupId&amp;gt;io.seata&amp;lt;/groupId&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;artifactId&amp;gt;seata-spring-boot-starter&amp;lt;/artifactId&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;version&amp;gt;1.5.2&amp;lt;/version&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;/dependency&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>spring application:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span> &amp;lt;dependency&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;groupId&amp;gt;io.seata&amp;lt;/groupId&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;artifactId&amp;gt;seata-all&amp;lt;/artifactId&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;version&amp;gt;1.5.2&amp;lt;/version&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;/dependency&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="the-fourth-step">&lt;strong>the fourth step&lt;/strong>&lt;/h3>
&lt;p>spring-boot application:&lt;/p>
&lt;p>Reference &lt;a href="https://github.com/seata/seata/tree/develop/script/client/spring">seata/script/client/spring at develop seata/seata (github.com)&lt;/a>&lt;/p>
&lt;p>Add it to your project&amp;rsquo;s application.yml.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">seata&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">enabled&lt;/span>: &lt;span style="color:#cb4b16">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">application-id&lt;/span>: applicationName
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">tx-service-group&lt;/span>: my_test_tx_group
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">enable-auto-data-source-proxy&lt;/span>: &lt;span style="color:#cb4b16">true&lt;/span> &lt;span style="color:#586e75">#Only AT and XA modes need to be true, and the data source will be automatically proxied after opening&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">data-source-proxy-mode&lt;/span>: AT &lt;span style="color:#586e75">#Optional AT&amp;amp;XA&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">config&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">type&lt;/span>: nacos
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">nacos&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#586e75">#namespace: If the configuration is created in a non-default namespace, please fill in the id of the namespace here&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">serverAddr&lt;/span>: &lt;span style="color:#2aa198">127.0.0.1&lt;/span>:&lt;span style="color:#2aa198">8848&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">group&lt;/span>: SEATA_GROUP
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">username&lt;/span>: &lt;span style="color:#2aa198">&amp;#34;nacos&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">password&lt;/span>: &lt;span style="color:#2aa198">&amp;#34;nacos&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">data-id&lt;/span>: seata.properties
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">registry&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">type&lt;/span>: nacos
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">nacos&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">application&lt;/span>: seata-server
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">server-addr&lt;/span>: &lt;span style="color:#2aa198">127.0.0.1&lt;/span>:&lt;span style="color:#2aa198">8848&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">group&lt;/span>: SEATA_GROUP
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#586e75">#namespace: If the configuration is created in a non-default namespace, please fill in the id of the namespace here&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">username&lt;/span>: &lt;span style="color:#2aa198">&amp;#34;nacos&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">password&lt;/span>: &lt;span style="color:#2aa198">&amp;#34;nacos&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>spring application:&lt;/p>
&lt;p>Add &lt;a href="https://github.com/seata/seata/tree/develop/script/client/conf">seata/script/client/conf at develop · seata/seata (github.com)&lt;/a> under registry.conf, because High-availability deployment uses a third-party configuration center, so file.conf is not required&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>registry {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> # file, nacos, eureka, redis, zk, consul, etcd3, sofa, custom
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> type = &amp;#34;nacos&amp;#34;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> nacos {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> application = &amp;#34;seata-server&amp;#34;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> serverAddr = &amp;#34;127.0.0.1:8848&amp;#34;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> group = &amp;#34;SEATA_GROUP&amp;#34;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> namespace = &amp;#34;&amp;#34;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> username = &amp;#34;&amp;#34;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> password = &amp;#34;&amp;#34;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ##if use MSE Nacos with auth, mutex with username/password attribute
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> #accessKey = &amp;#34;&amp;#34;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> #secretKey = &amp;#34;&amp;#34;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ##if use Nacos naming meta-data for SLB service registry, specify nacos address pattern rules here
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> #slbPattern = &amp;#34;&amp;#34;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>config {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> # file, nacos, apollo, zk, consul, etcd3, springCloudConfig, custom
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> type = &amp;#34;nacos&amp;#34;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> nacos {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> serverAddr = &amp;#34;127.0.0.1:8848&amp;#34;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> namespace = &amp;#34;&amp;#34;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> group = &amp;#34;SEATA_GROUP&amp;#34;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> username = &amp;#34;&amp;#34;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> password = &amp;#34;&amp;#34;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ##if use MSE Nacos with auth, mutex with username/password attribute
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> #accessKey = &amp;#34;&amp;#34;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> #secretKey = &amp;#34;&amp;#34;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> dataId = &amp;#34;seata.properties&amp;#34;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="the-fifth-step">&lt;strong>the fifth step&lt;/strong>&lt;/h3>
&lt;p>Run the nacos you downloaded, and refer to [https://github.com/seata/seata/tree/develop/script/config-center](&lt;a href="https://gitee.com/link?target=https%3A%2F%25">https://gitee.com/link?target=https%3A%2F%&lt;/a> 2Fgithub.com%2Fseata%2Fseata%2Ftree%2Fdevelop%2Fscript%2Fconfig-center) and modify the config.txt&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-properties" data-lang="properties">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75">#Only used by client&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75">#The transaction group is called my_test_tx_group and the corresponding seata-server cluster is default&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>service.vgroupMapping.my_test_tx_group&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">default&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75">#The following are only used by server&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>store.mode&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">db&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>store.db.datasource&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">druid&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>store.db.dbType&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">mysql&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>store.db.driverClassName&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">com.mysql.jdbc.Driver&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>store.db.url&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">jdbc:mysql://127.0.0.1:3306/seata?useUnicode=true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>store.db.user&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">username&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>store.db.password&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">password&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>store.db.minConn&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">5&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>store.db.maxConn&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">30&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>store.db.globalTable&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">global_table&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>store.db.branchTable&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">branch_table&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>store.db.queryLimit&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">100&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>store.db.lockTable&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">lock_table&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>store.db.maxWait&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">5000&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Open the nacos console, create a configuration whose dataId is seata.properties under the corresponding namespace, fill in the group as SEATA_GROUP, and fill in the above content and select the type as properties to save
&lt;img src="https://dubbo.apache.org/imgs/blog/Dingtalk_20220724021635.jpg" alt="Dingtalk_20220724021635.jpg.png" style="zoom:50%;" />&lt;/p>
&lt;h3 id="step-6">&lt;strong>Step 6&lt;/strong>&lt;/h3>
&lt;p>Change application.yml in server&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">server&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">port&lt;/span>: &lt;span style="color:#2aa198">7091&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">spring&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">application&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">name&lt;/span>: seata-server
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">record&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">config&lt;/span>: classpath:logback-spring.xml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">file&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">path&lt;/span>: ${user.home}/logs/seata
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">console&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">user&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">username&lt;/span>: seata
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">password&lt;/span>: seata
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">seata&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">config&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#586e75"># support: nacos, consul, apollo, zk, etcd3&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">type&lt;/span>: nacos
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">nacos&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">server-addr&lt;/span>: &lt;span style="color:#2aa198">127.0.0.1&lt;/span>:&lt;span style="color:#2aa198">8848&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#586e75">#namespace: If the configuration is created in a non-default namespace, please fill in the id of the namespace here&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">group&lt;/span>: SEATA_GROUP
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">username&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">password&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#586e75">##if use MSE Nacos with auth, mutex with username/password attribute&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#586e75">#access-key: &amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#586e75">#secret-key: &amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">data-id&lt;/span>: seata.properties
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">registry&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#586e75"># support: nacos, eureka, redis, zk, consul, etcd3, sofa&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">type&lt;/span>: nacos
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">nacos&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">application&lt;/span>: seata-server
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">server-addr&lt;/span>: &lt;span style="color:#2aa198">127.0.0.1&lt;/span>:&lt;span style="color:#2aa198">8848&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">group&lt;/span>: SEATA_GROUP
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">namespace&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">cluster&lt;/span>: default
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#586e75">#namespace: If the configuration is created in a non-default namespace, please fill in the id of the namespace here&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">password&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#586e75">##if use MSE Nacos with auth, mutex with username/password attribute&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#586e75">#access-key: &amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#586e75">#secret-key: &amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75"># server:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75"># service-port: 8091 #If not configured, the default is &amp;#39;${server.port} + 1000&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">security&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">secretKey&lt;/span>: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">tokenValidityInMilliseconds&lt;/span>: &lt;span style="color:#2aa198">1800000&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">ignore&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">urls&lt;/span>: /,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*. png, /**/*.ico, /console-fe/public/**, /api/v1/auth/login
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="step-seven">&lt;strong>Step Seven&lt;/strong>&lt;/h3>
&lt;p>An example of adding @GlobalTransactional to the interface of the global transaction caller (the service that initiates the global transaction) is as follows:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-java" data-lang="java">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">@GetMapping&lt;/span>(value &lt;span style="color:#719e07">=&lt;/span> &lt;span style="color:#2aa198">&amp;#34;testCommit&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">@GlobalTransactional&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">public&lt;/span> Object &lt;span style="color:#268bd2">testCommit&lt;/span>(&lt;span style="color:#268bd2">@RequestParam&lt;/span>(name &lt;span style="color:#719e07">=&lt;/span> &lt;span style="color:#2aa198">&amp;#34;id&amp;#34;&lt;/span>,defaultValue &lt;span style="color:#719e07">=&lt;/span> &lt;span style="color:#2aa198">&amp;#34;1&amp;#34;&lt;/span>) Integer id,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">@RequestParam&lt;/span>(name &lt;span style="color:#719e07">=&lt;/span> &lt;span style="color:#2aa198">&amp;#34;sum&amp;#34;&lt;/span>, defaultValue &lt;span style="color:#719e07">=&lt;/span> &lt;span style="color:#2aa198">&amp;#34;1&amp;#34;&lt;/span>) Integer sum) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Boolean ok &lt;span style="color:#719e07">=&lt;/span> productService. &lt;span style="color:#268bd2">reduceStock&lt;/span>(id, sum);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">if&lt;/span> (ok) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> LocalDateTime now &lt;span style="color:#719e07">=&lt;/span> LocalDateTime.now();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Orders orders &lt;span style="color:#719e07">=&lt;/span> &lt;span style="color:#719e07">new&lt;/span> Orders();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> orders.setCreateTime(now);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> orders.setProductId(id);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> orders. &lt;span style="color:#268bd2">setReplaceTime&lt;/span>(now);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> orders. &lt;span style="color:#268bd2">setSum&lt;/span>(sum);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> orderService. &lt;span style="color:#268bd2">save&lt;/span>(orders);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">return&lt;/span> &lt;span style="color:#2aa198">&amp;#34;ok&amp;#34;&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> } &lt;span style="color:#719e07">else&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">return&lt;/span> &lt;span style="color:#2aa198">&amp;#34;fail&amp;#34;&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Spring applications need to manually proxy the data source to select the transaction mode and initialize the transaction scanner when using AT or XA mode&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-java" data-lang="java">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">@Primary&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">@Bean&lt;/span>(&lt;span style="color:#2aa198">&amp;#34;dataSource&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">public&lt;/span> DataSource &lt;span style="color:#268bd2">dataSource&lt;/span>(DataSource druidDataSource) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#586e75">//AT agent choose one of the two&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">return&lt;/span> &lt;span style="color:#719e07">new&lt;/span> DataSourceProxy(druidDataSource);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#586e75">//XA Proxy&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">return&lt;/span> &lt;span style="color:#719e07">new&lt;/span> DataSourceProxyXA(druidDataSource)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-java" data-lang="java">&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">@Bean&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">public&lt;/span> GlobalTransactionScanner &lt;span style="color:#268bd2">globalTransactionScanner&lt;/span>() {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#719e07">return&lt;/span> &lt;span style="color:#719e07">new&lt;/span> GlobalTransactionScanner(&lt;span style="color:#2aa198">&amp;#34;application name&amp;#34;&lt;/span>, &lt;span style="color:#2aa198">&amp;#34;my_test_tx_group&amp;#34;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>If you use tcc mode, you need to additionally define two-stage try and confirm(commit) cancel(rollback) in the serviceimpl of the corresponding provider&lt;/p>
&lt;p>The spring-boot application needs to close the data source proxy&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">seata&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">enable-auto-data-source-proxy&lt;/span>: &lt;span style="color:#cb4b16">false&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-java" data-lang="java">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75">/**
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75"> * Define two-phase commit name = the bean name of the tcc, globally unique commitMethod = commit is the two-phase confirmation method rollbackMethod = rollback is the two-phase cancellation method
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75"> * useTCCFence=true is to enable anti-hanging
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75"> * BusinessActionContextParameter annotation to pass parameters to the second stage
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75"> *
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75"> * @param params - input parameters
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75"> * @return String
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75"> */&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">@TwoPhaseBusinessAction&lt;/span>(name &lt;span style="color:#719e07">=&lt;/span> &lt;span style="color:#2aa198">&amp;#34;beanName&amp;#34;&lt;/span>, commitMethod &lt;span style="color:#719e07">=&lt;/span> &lt;span style="color:#2aa198">&amp;#34;commit&amp;#34;&lt;/span>, rollbackMethod &lt;span style="color:#719e07">=&lt;/span> &lt;span style="color:#2aa198">&amp;#34;rollback&amp;#34;&lt;/span>, useTCCFence &lt;span style="color:#719e07">=&lt;/span> &lt;span style="color:#cb4b16">true&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">public&lt;/span> &lt;span style="color:#dc322f">void&lt;/span> &lt;span style="color:#268bd2">insert&lt;/span>(&lt;span style="color:#268bd2">@BusinessActionContextParameter&lt;/span>(paramName &lt;span style="color:#719e07">=&lt;/span> &lt;span style="color:#2aa198">&amp;#34;params&amp;#34;&lt;/span>) Map&lt;span style="color:#719e07">&amp;lt;&lt;/span>String, String&lt;span style="color:#719e07">&amp;gt;&lt;/span> params) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> logger.info(&lt;span style="color:#2aa198">&amp;#34;You can reserve resources here, or use the characteristics of tcc to mix with AT. In the second stage, use the messages stored here in the first stage and send them out through the second stage, such as redis, mq and other operations&amp;#34;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75">/**
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75"> * The confirmation method can be named otherwise, but it must be consistent with the commitMethod. The context can pass the parameters of the try method
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75"> *
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75"> * @param context context
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75"> * @return boolean
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75"> */&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">public&lt;/span> &lt;span style="color:#dc322f">void&lt;/span> &lt;span style="color:#268bd2">commit&lt;/span>(BusinessActionContext context) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> logger.info(&lt;span style="color:#2aa198">&amp;#34;Reserved resources are actually processed, or send mq messages and redis storage&amp;#34;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75">/**
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75"> * Two-stage cancellation method
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75"> *
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75"> * @param context context
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75"> * @return boolean
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75"> */&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">public&lt;/span> &lt;span style="color:#dc322f">void&lt;/span> &lt;span style="color:#268bd2">rollback&lt;/span>(BusinessActionContext context) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> logger.info(&lt;span style="color:#2aa198">&amp;#34;Release reserved resources, or clear the message cache sent when the first phase is ready to be submitted by the second phase&amp;#34;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>linux/macos&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#b58900">cd&lt;/span> bin
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sh seata-server.sh
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>windows&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#b58900">cd&lt;/span> bin
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>./seata-server.bat
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Run seata-server, after success, run your own service dubbo provider&amp;amp;consumer&lt;/p>
&lt;h3 id="the-eighth-step-is-to-build-a-highly-available-seata-server">&lt;strong>The eighth step is to build a highly available Seata-server&lt;/strong>&lt;/h3>
&lt;p>Since seata-server supports the separation mode of computing and storage, and supports exposing service addresses to multiple registration centers, it only needs to be configured according to the sixth step and then expanded horizontally&lt;/p>
&lt;p>For details, please visit: &lt;a href="https://seata.io/">https://seata.io/&lt;/a>&lt;/p></description></item><item><title>Docs3-V2: Dubbo Class Inspection Mechanism</title><link>https://dubbo.apache.org/en/docs3-v2/java-sdk/advanced-features-and-usage/security/class-check/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/docs3-v2/java-sdk/advanced-features-and-usage/security/class-check/</guid><description>
&lt;h2 id="supported-versions">Supported versions&lt;/h2>
&lt;p>Dubbo &amp;gt;= 3.1.6&lt;/p>
&lt;h2 id="scope-of-application">Scope of application&lt;/h2>
&lt;p>Currently, the serialization check supports Hessian2, Fastjson2 serialization and generalized calls. Other serialization methods are not currently supported.&lt;/p>
&lt;h2 id="configuration-method">configuration method&lt;/h2>
&lt;h3 id="1-check-mode">1. Check mode&lt;/h3>
&lt;p>The inspection mode is divided into three levels: &lt;code>STRICT&lt;/code> strict inspection, &lt;code>WARN&lt;/code> warning, &lt;code>DISABLED&lt;/code> disabled.
&lt;code>STRICT&lt;/code> Strict checks: disallow deserialization of all classes that are not in the allowed serialization list (whitelist).
&lt;code>WARN&lt;/code> warning: only prohibits serialization of all classes in the disallowed serialization list (blacklist), and alerts through logs when deserializing classes that are not in the allowed serialization list (whitelist).
&lt;code>DISABLED&lt;/code> Disabled: Do not do any checks.&lt;/p>
&lt;p>Version 3.1 defaults to &lt;code>WARN&lt;/code> warning level, and version 3.2 defaults to &lt;code>STRICT&lt;/code> strict checking level.&lt;/p>
&lt;p>Configuration via ApplicationConfig:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-java" data-lang="java">&lt;span style="display:flex;">&lt;span>ApplicationConfig applicationConfig &lt;span style="color:#719e07">=&lt;/span> &lt;span style="color:#719e07">new&lt;/span> ApplicationConfig();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>applicationConfig.setSerializeCheckStatus(&lt;span style="color:#2aa198">&amp;#34;STRICT&amp;#34;&lt;/span>);
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Configuration via Spring XML:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-xml" data-lang="xml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">&amp;lt;dubbo:application&lt;/span> name=&lt;span style="color:#2aa198">&amp;#34;demo-provider&amp;#34;&lt;/span> serialize-check-status=&lt;span style="color:#2aa198">&amp;#34;STRICT&amp;#34;&lt;/span>&lt;span style="color:#268bd2">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Configure via Spring Properties / dubbo.properties:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-properties" data-lang="properties">&lt;span style="display:flex;">&lt;span>dubbo.application.serialize-check-status&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">STRICT&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Configure via System Property:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-properties" data-lang="properties">&lt;span style="display:flex;">&lt;span>-Ddubbo.application.serialize-check-status&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">STRICT&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>After the configuration is successful, you can see the following prompts in the log:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>INFO utils.SerializeSecurityManager: [DUBBO] Serialize check level: STRICT
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Note: If multiple applications under the same process (Dubbo Framework Model) are configured with different inspection modes at the same time, the &amp;ldquo;loosenest&amp;rdquo; level will eventually take effect. If two Spring Contexts are started at the same time, one is configured as &lt;code>STRICT&lt;/code> and the other is configured as &lt;code>WARN&lt;/code>, the &lt;code>WARN&lt;/code> level configuration will finally take effect.&lt;/p>
&lt;h3 id="2-serializable-interface-check">2. Serializable interface check&lt;/h3>
&lt;p>The Serializable interface check mode is divided into two levels: &lt;code>true&lt;/code> is enabled, and &lt;code>false&lt;/code> is disabled. When the check is turned on, it will refuse to deserialize all classes that do not implement &lt;code>Serializable&lt;/code>.&lt;/p>
&lt;p>The default configuration in Dubbo is &lt;code>true&lt;/code> to enable the check.&lt;/p>
&lt;p>Configuration via ApplicationConfig:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-java" data-lang="java">&lt;span style="display:flex;">&lt;span>ApplicationConfig applicationConfig &lt;span style="color:#719e07">=&lt;/span> &lt;span style="color:#719e07">new&lt;/span> ApplicationConfig();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>applicationConfig.setCheckSerializable(&lt;span style="color:#cb4b16">true&lt;/span>);
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Configuration via Spring XML:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-xml" data-lang="xml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">&amp;lt;dubbo:application&lt;/span> name=&lt;span style="color:#2aa198">&amp;#34;demo-provider&amp;#34;&lt;/span> check-serializable=&lt;span style="color:#2aa198">&amp;#34;true&amp;#34;&lt;/span>&lt;span style="color:#268bd2">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Configure via Spring Properties / dubbo.properties:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-properties" data-lang="properties">&lt;span style="display:flex;">&lt;span>dubbo.application.check-serializable&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">true&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Configure via System Property:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-properties" data-lang="properties">&lt;span style="display:flex;">&lt;span>-Ddubbo.application.check-serializable&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">true&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>After the configuration is successful, you can see the following prompts in the log:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>INFO utils.SerializeSecurityManager: [DUBBO] Serialize check serializable: true
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Note 1: If multiple applications under the same process (Dubbo Framework Model) are configured with different Serializable interface inspection modes at the same time, the &amp;ldquo;loosenest&amp;rdquo; level will eventually take effect. If two Spring Contexts are started at the same time, one configured as &lt;code>true&lt;/code> and the other configured as &lt;code>false&lt;/code>, the &lt;code>false&lt;/code> level configuration will finally take effect.
Note 2: At present, the built-in &lt;code>Serializable&lt;/code> check configuration of Hessian2 and Fastjson2 has not been opened. For generalized calls, you only need to configure &lt;code>dubbo.application.check-serializable&lt;/code> to modify the check configuration; for Hessian2 serialization, you need to modify &lt;code>dubbo.application.check-serializable&lt;/code> and &lt;code>dubbo.hessian.allowNonSerializable&lt;/code> at the same time&lt;/p>
&lt;h3 id="3-automatically-scan-related-configurations">3. Automatically scan related configurations&lt;/h3>
&lt;p>There are two configuration items in the Dubbo class automatic scanning mechanism: `AutoTrustSerializeClass&lt;/p>
&lt;p>To put it simply, after automatic class scanning is enabled, Dubbo will automatically scan all related classes that may be used by the interface through &lt;code>ReferenceConfig&lt;/code> and &lt;code>ServiceConfig&lt;/code>, and recursively trust its package. `TrustSerializeClassLevel&lt;/p>
&lt;p>The default configuration in Dubbo is `AutoTrustSerializeClass&lt;/p>
&lt;p>Configuration via ApplicationConfig:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-java" data-lang="java">&lt;span style="display:flex;">&lt;span>ApplicationConfig applicationConfig &lt;span style="color:#719e07">=&lt;/span> &lt;span style="color:#719e07">new&lt;/span> ApplicationConfig();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>applicationConfig.setAutoTrustSerializeClass(&lt;span style="color:#cb4b16">true&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>applicationConfig.setTrustSerializeClassLevel(3);
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Configuration via Spring XML:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-xml" data-lang="xml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">&amp;lt;dubbo:application&lt;/span> name=&lt;span style="color:#2aa198">&amp;#34;demo-provider&amp;#34;&lt;/span> auto-trust-serialize-class=&lt;span style="color:#2aa198">&amp;#34;true&amp;#34;&lt;/span> trust-serialize-class-level=&lt;span style="color:#2aa198">&amp;#34;3&amp;#34;&lt;/span>&lt;span style="color:#268bd2">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Configure via Spring Properties / dubbo.properties:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-properties" data-lang="properties">&lt;span style="display:flex;">&lt;span>dubbo.application.auto-trust-serialize-class&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>dubbo.application.trust-serialize-class-level&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">3&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Configure via System Property:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-properties" data-lang="properties">&lt;span style="display:flex;">&lt;span>-Ddubbo.application.auto-trust-serialize-class&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>-Ddubbo.application.trust-serialize-class-level&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">3&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>After the configuration is successful, you can use the QoS command to check whether the results of the currently loaded trusted classes meet expectations.&lt;/p>
&lt;p>Note: After the check is enabled, there will be a certain performance loss during the startup process.&lt;/p>
&lt;h3 id="4-custom-configuration-of-trusteduntrusted-classes">4. Custom configuration of trusted/untrusted classes&lt;/h3>
&lt;p>In addition to Dubbo&amp;rsquo;s automatic scanning classes, it also supports configuration of trusted/untrusted class lists through resource files.&lt;/p>
&lt;p>Configuration method: define the following files under the resource directory (resource).&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-properties" data-lang="properties">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75"># security/serialize.allowlist&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>io.dubbo.test
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-properties" data-lang="properties">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#586e75"># security/serialize.blockedlist&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>io.dubbo.block
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>After the configuration is successful, you can see the following prompts in the log:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-properties" data-lang="properties">&lt;span style="display:flex;">&lt;span>INFO &lt;span style="color:#2aa198">utils.SerializeSecurityConfigurator: [DUBBO] Read serialize allow list from file:/Users/albumen/code/dubbo-samples/99-integration/dubbo-samples-serialize-check/target/classes/security/serialize.allowlist&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>INFO &lt;span style="color:#2aa198">utils.SerializeSecurityConfigurator: [DUBBO] Read serialize blocked list from file:/Users/albumen/code/dubbo-samples/99-integration/dubbo-samples-serialize-check/target/classes/security/serialize.blockedlist&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The configuration priority is: user-defined trusted class = built-in trusted class of the framework &amp;gt; user-defined untrusted class = built-in untrusted class of the framework &amp;gt; automatic class scanning trusted class.&lt;/p>
&lt;h2 id="audit-method">Audit method&lt;/h2>
&lt;p>Dubbo supports real-time viewing of current configuration information and trusted/untrusted class lists through QoS commands. Currently supports two commands: &lt;code>serializeCheckStatus&lt;/code> to view the current configuration information, &lt;code>serializeWarnedClasses&lt;/code> to view the real-time alarm list.&lt;/p>
&lt;ol>
&lt;li>&lt;code>serializeCheckStatus&lt;/code> View the current configuration information&lt;/li>
&lt;/ol>
&lt;p>Access directly through the console:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&amp;gt; telnet 127.0.0.1 &lt;span style="color:#2aa198">22222&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Trying 127.0.0.1...
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Connected to localhost.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Escape character is &lt;span style="color:#2aa198">&amp;#39;^]&amp;#39;&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ___ __ __ ___ ___ ____
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> / _ &lt;span style="color:#cb4b16">\ &lt;/span>/ / / // _ &lt;span style="color:#719e07">)&lt;/span> / _ &lt;span style="color:#719e07">)&lt;/span> / __ &lt;span style="color:#cb4b16">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#cb4b16">&lt;/span> / // // /_/ // _ |/ _ |/ /_/ /
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>/____/ &lt;span style="color:#cb4b16">\_&lt;/span>___//____//____/ &lt;span style="color:#cb4b16">\_&lt;/span>___/
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>dubbo&amp;gt;serializeCheckStatus
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>CheckStatus: WARN
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>CheckSerializable: &lt;span style="color:#b58900">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>AllowedPrefix:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>...
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>DisAllowedPrefix:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>...
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>dubbo&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Request the result in json format via http:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&amp;gt; curl http://127.0.0.1:22222/serializeCheckStatus
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#719e07">{&lt;/span>&lt;span style="color:#2aa198">&amp;#34;checkStatus&amp;#34;&lt;/span>: &lt;span style="color:#2aa198">&amp;#34;WARN&amp;#34;&lt;/span>,&lt;span style="color:#2aa198">&amp;#34;allowedPrefix&amp;#34;&lt;/span>:&lt;span style="color:#719e07">[&lt;/span>...&lt;span style="color:#719e07">]&lt;/span>,&lt;span style="color:#2aa198">&amp;#34;checkSerializable&amp;#34;&lt;/span>:true,&lt;span style="color:#2aa198">&amp;#34;disAllowedPrefix&amp;#34;&lt;/span>:&lt;span style="color:#719e07">[&lt;/span>...&lt;span style="color:#719e07">]}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="2">
&lt;li>&lt;code>serializeWarnedClasses&lt;/code> view real-time warning list&lt;/li>
&lt;/ol>
&lt;p>Access directly through the console:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&amp;gt; telnet 127.0.0.1 &lt;span style="color:#2aa198">22222&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Trying 127.0.0.1...
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Connected to localhost.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Escape character is &lt;span style="color:#2aa198">&amp;#39;^]&amp;#39;&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ___ __ __ ___ ___ ____
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> / _ &lt;span style="color:#cb4b16">\ &lt;/span>/ / / // _ &lt;span style="color:#719e07">)&lt;/span> / _ &lt;span style="color:#719e07">)&lt;/span> / __ &lt;span style="color:#cb4b16">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#cb4b16">&lt;/span> / // // /_/ // _ |/ _ |/ /_/ /
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>/____/ &lt;span style="color:#cb4b16">\_&lt;/span>___//____//____/ &lt;span style="color:#cb4b16">\_&lt;/span>___/
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>dubbo&amp;gt;serializeWarnedClasses
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Warned Classes:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>io.dubbo.test.NotSerializable
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>io.dubbo.test2.NotSerializable
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>io.dubbo.test2.OthersSerializable
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>org.apache.dubbo.samples.NotSerializable
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>dubbo&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Request the result in json format via http:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&amp;gt; curl http://127.0.0.1:22222/serializeWarnedClasses
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#719e07">{&lt;/span>&lt;span style="color:#2aa198">&amp;#34;warnedClasses&amp;#34;&lt;/span>:&lt;span style="color:#719e07">[&lt;/span>&lt;span style="color:#2aa198">&amp;#34;io.dubbo.test2.NotSerializable&amp;#34;&lt;/span>,&lt;span style="color:#2aa198">&amp;#34;org.apache.dubbo.samples.NotSerializable&amp;#34;&lt;/span>,&lt;span style="color:#2aa198">&amp;#34;io.dubbo.test.NotSerializable&amp;#34;&lt;/span>,&lt;span style="color:#2aa198">&amp;#34;io.dubbo.test2.OthersSerializable&amp;#34;&lt;/span>&lt;span style="color:#719e07">]}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Note: It is recommended to pay attention to the result of &lt;code>serializeWarnedClasses&lt;/code> in time, and judge whether it is attacked by whether the returned result is not empty.&lt;/p></description></item><item><title>Docs3-V2: Dubbo SPI Overview</title><link>https://dubbo.apache.org/en/docs3-v2/java-sdk/reference-manual/spi/overview/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/docs3-v2/java-sdk/reference-manual/spi/overview/</guid><description>
&lt;h2 id="extended-design-ideas">Extended Design Ideas&lt;/h2>
&lt;p>Scalability is what any system pursues, and it is equally applicable to Dubbo.&lt;/p>
&lt;h3 id="what-is-scalability">What is scalability&lt;/h3>
&lt;p>Scalability is a design concept that represents our vision for the future. We hope that based on the existing architecture or design, when some aspects change in the future, we can adapt to this with minimal changes. kind of change.&lt;/p>
&lt;h3 id="advantages-of-scalability">Advantages of Scalability&lt;/h3>
&lt;p>The advantage of scalability is mainly manifested in the decoupling between modules, which conforms to the principle of opening and closing, which is open to expansion and closed to modification. When a new function is added to the system, there is no need to modify the structure and code of the existing system, just add an extension.&lt;/p>
&lt;h3 id="extended-implementation">Extended implementation&lt;/h3>
&lt;p>Generally speaking, the system will use Factory, IoC, OSGI, etc. to manage the extension (plug-in) life cycle. Considering the applicability of Dubbo, I don&amp;rsquo;t want to strongly rely on IoC containers such as Spring.
And building a small IoC container by myself feels a bit over-designed, so choose the simplest Factory way to manage extensions (plug-ins). In Dubbo, all internal and third-party implementations are equal.&lt;/p>
&lt;h3 id="scalability-in-dubbo">Scalability in Dubbo&lt;/h3>
&lt;ul>
&lt;li>Treat third-party implementations equally. In Dubbo, all internal implementations and third-party implementations are equal, and users can replace the native implementations provided by Dubbo based on their own business needs.&lt;/li>
&lt;li>Each extension point only encapsulates one change factor to maximize reuse. The implementers of each extension point often only care about one thing. If users need to expand, they only need to expand the extension points they care about, which greatly reduces the workload of users.&lt;/li>
&lt;/ul>
&lt;h2 id="features-of-dubbo-extension">Features of Dubbo extension&lt;/h2>
&lt;p>The extension capability in Dubbo is enhanced from the JDK standard SPI extension point discovery mechanism, which improves the following problems of the JDK standard SPI:&lt;/p>
&lt;ul>
&lt;li>The JDK standard SPI will instantiate all the implementations of the extension point at one time. If there is an extension implementation, it will be time-consuming to initialize, but if it is not used, it will be loaded, which will be a waste of resources.&lt;/li>
&lt;li>If the extension point fails to load, even the name of the extension point cannot be obtained. For example: JDK standard ScriptEngine, get the name of the script type through getName(), but if RubyScriptEngine fails to load the RubyScriptEngine class because the jruby. When the user executes the ruby script, it will report that ruby is not supported, not the real reason for the failure.&lt;/li>
&lt;/ul>
&lt;p>Based on the expansion capabilities provided by Dubbo, users can easily expand other protocols, filters, routes, etc. based on their own needs. The following introduces the characteristics of Dubbo&amp;rsquo;s extension capabilities.&lt;/p>
&lt;ul>
&lt;li>Load on demand. Dubbo&amp;rsquo;s extension capability does not instantiate all implementations at once, but instantiates with extended classes to reduce resource waste.&lt;/li>
&lt;li>Increase the IOC capability of the extended class. Dubbo&amp;rsquo;s extension ability is not just to discover the extension service implementation class, but to go further on this basis. If the attributes of the extension class depend on other objects, Dubbo will automatically complete the injection function of the dependent object.&lt;/li>
&lt;li>Increase the AOP capability of extended classes. Dubbo&amp;rsquo;s extension capability will automatically discover the wrapper class of the extension class, complete the construction of the wrapper class, and enhance the function of the extension class.&lt;/li>
&lt;li>Possess the ability to dynamically select the extension implementation. The Dubbo extension will dynamically select the corresponding extension class at runtime based on parameters, which improves Dubbo&amp;rsquo;s scalability.&lt;/li>
&lt;li>The extension implementation can be sorted. The execution order of the extension implementation can be specified based on user requirements.&lt;/li>
&lt;li>Provides the Adaptive capability of the extension point. This capability enables some extension classes to take effect on the consumer side, and some extension classes to take effect on the provider side.&lt;/li>
&lt;/ul>
&lt;p>From the design goal of Dubbo extension, it can be seen that some features implemented by Dubbo, such as dynamic selection of extension implementation, IOC, AOP, etc., can provide users with very flexible expansion capabilities.&lt;/p>
&lt;h2 id="dubbo-extension-loading-process">Dubbo extension loading process&lt;/h2>
&lt;p>The whole process of Dubbo loading extension is as follows:&lt;/p>
&lt;p>&lt;img src="https://dubbo.apache.org/imgs/v3/concepts/extension-load.png" alt="//imgs/v3/concepts/extension-load.png">&lt;/p>
&lt;p>There are 4 main steps:&lt;/p>
&lt;ul>
&lt;li>Read and parse configuration files&lt;/li>
&lt;li>Cache all extension implementations&lt;/li>
&lt;li>Based on the extension name executed by the user, instantiate the corresponding extension implementation&lt;/li>
&lt;li>Perform IOC injection of extended instance attributes and instantiate extended wrapper classes to realize AOP features&lt;/li>
&lt;/ul>
&lt;h2 id="how-to-use-dubbos-extension-capability-to-expand">How to use Dubbo&amp;rsquo;s extension capability to expand&lt;/h2>
&lt;p>The following takes the extension protocol as an example to illustrate how to use the extension capabilities provided by Dubbo to extend the Triple protocol.&lt;/p>
&lt;p>(1) Place a text file in the protocol implementation jar package: META-INF/dubbo/org.apache.dubbo.remoting.api.WireProtocol&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-text" data-lang="text">&lt;span style="display:flex;">&lt;span>tri=org.apache.dubbo.rpc.protocol.tri.TripleHttp2Protocol
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>(2) Implementation class content&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-java" data-lang="java">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">@Activate&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">public&lt;/span> &lt;span style="color:#268bd2">class&lt;/span> &lt;span style="color:#268bd2">TripleHttp2Protocol&lt;/span> &lt;span style="color:#268bd2">extends&lt;/span> Http2WireProtocol {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#586e75">//...&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Instructions: Http2WireProtocol implements the WireProtocol interface&lt;/p>
&lt;p>(3) In the Dubbo configuration module, each extension point has a corresponding configuration attribute or label, and the configuration specifies which extension to use. for example:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-text" data-lang="text">&lt;span style="display:flex;">&lt;span>&amp;lt;dubbo:protocol name=&amp;#34;tri&amp;#34; /&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>As can be seen from the above expansion steps, the user basically completes the expansion under the black box.&lt;/p>
&lt;h2 id="dubbo-extended-application">Dubbo extended application&lt;/h2>
&lt;p>Dubbo&amp;rsquo;s expansion capability is very flexible, and it is ubiquitous in the realization of its own functions.&lt;/p>
&lt;p>&lt;img src="https://dubbo.apache.org/imgs/v3/concepts/extension-use.png" alt="//imgs/v3/concepts/extension-use.png">&lt;/p>
&lt;p>Dubbo&amp;rsquo;s extensibility makes it easy to divide the Dubbo project into sub-modules one by one to realize the hot-swappable feature. Users can completely replace Dubbo&amp;rsquo;s native implementation based on their own needs to meet their own business needs.&lt;/p>
&lt;h2 id="scenes-to-be-used">scenes to be used&lt;/h2>
&lt;ul>
&lt;li>If you need to customize the load balancing strategy, you can use Dubbo&amp;rsquo;s scalability.&lt;/li>
&lt;li>If you need to implement a custom registry, you can use Dubbo&amp;rsquo;s extension capabilities.&lt;/li>
&lt;li>If you need to implement custom filters, you can use Dubbo&amp;rsquo;s extension capabilities.&lt;/li>
&lt;/ul>
&lt;p>Dubbo extensions treat internal implementations and third-party implementations equally. For more usage scenarios, see &lt;a href="../description/">SPI extension implementation&lt;/a>&lt;/p></description></item><item><title>Docs: dubbo protocol</title><link>https://dubbo.apache.org/en/docs/v2.7/user/references/protocol/dubbo/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/docs/v2.7/user/references/protocol/dubbo/</guid><description>
&lt;p>Dubbo protocol which is the default protocol of Dubbo RPC Framework uses a single long connection and NIO asynchronous communication,it is suitable for small data but with high concurrency RPC call and the number of consumer machine is much greater than provider&lt;/p>
&lt;p>On the other hand, the Dubbo protocol is not suitable for transmitting large amounts of data, such as file transmission, video transmission, etc., unless the request is very low.&lt;/p>
&lt;p>&lt;img src="https://dubbo.apache.org/imgs/user/dubbo-protocol.jpg" alt="dubbo-protocol.jpg">&lt;/p>
&lt;ul>
&lt;li>Transporter: mina, netty, grizzy&lt;/li>
&lt;li>Serialization: dubbo, hessian2, java, json&lt;/li>
&lt;li>Dispatcher: all, direct, message, execution, connection&lt;/li>
&lt;li>ThreadPool: fixed, cached&lt;/li>
&lt;/ul>
&lt;h2 id="features">Features&lt;/h2>
&lt;p>The default protocol is Dubbo protocol ,based on netty &lt;code>3.2.5.Final&lt;/code> and Hessian2 &lt;code>3.2.1-fixed-2(Alibaba embed version)&lt;/code>.&lt;/p>
&lt;ul>
&lt;li>Default connection number: single connection&lt;/li>
&lt;li>Default connection mode: long connection&lt;/li>
&lt;li>Transmission protocol: TCP&lt;/li>
&lt;li>Transmission mode: NIO asynchronous transmission&lt;/li>
&lt;li>Serialization: Hessian2 serialization&lt;/li>
&lt;li>Scope of application: incoming and outgoing data packets are small (recommended less than 100K),try not to transfer large files or large strings with Dubbo protocol.&lt;/li>
&lt;li>Applicable scenarios:: most RPC scenarios&lt;/li>
&lt;/ul>
&lt;h2 id="constraint">Constraint&lt;/h2>
&lt;ul>
&lt;li>Parameters and return values must implement &lt;code>Serializable&lt;/code> interface&lt;/li>
&lt;li>Parameters and return values can not be customized to implement &lt;code>List&lt;/code>,&lt;code> Map&lt;/code>, &lt;code>Number&lt;/code>,&lt;code> Date&lt;/code>, &lt;code>Calendar&lt;/code> interface, can only be implemented with the JDK, because Hessian2 will do some special treatment, Attribute values in the class will be lost.&lt;/li>
&lt;li>Hessian serialization:to solve compatibility issues, only serialize class name,all the fields declared by the class,not included static fields,method information&lt;/li>
&lt;/ul>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Data transformation&lt;/th>
&lt;th>Cases&lt;/th>
&lt;th>Result&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>A-&amp;gt;B&lt;/td>
&lt;td>Class A has one more property than Class B&lt;/td>
&lt;td>It doesn&amp;rsquo;t throw exception ,Class B doesn&amp;rsquo;t have Class A new property,other is normal&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>A-&amp;gt;B&lt;/td>
&lt;td>enum Class A has one more new enum than enum Class B,when use Class A new enum to transfor to B&lt;/td>
&lt;td>throw exception&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>A-&amp;gt;B&lt;/td>
&lt;td>enum Class A has one more new enum than enum Class B,when don&amp;rsquo;t use Class A new enum to transfor to B&lt;/td>
&lt;td>It doesn&amp;rsquo;t throw exception&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>A-&amp;gt;B&lt;/td>
&lt;td>Class A and Class B have same property name,but the property type is different&lt;/td>
&lt;td>throw exception&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>A-&amp;gt;B&lt;/td>
&lt;td>serialId is not same&lt;/td>
&lt;td>normal&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>The interface new addition method has no effect on the client. If the method is not required by the client, the client does not need to redeploy it. The input parameter and result class add new properties, and if the client does not need new properties, it does not need to be redeployed too.&lt;/p>
&lt;p>The change of input parameter and result property name has no effect on client serialization, but if the client is not redeployed, no matter the input or output, the value of which property name had change is not available.&lt;/p>
&lt;p>Summary: the server side and the client do not need to be fully consistent with the domain objects,but you still should know about what would happen.&lt;/p>
&lt;h2 id="configuration">Configuration&lt;/h2>
&lt;p>configure protocol&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-xml" data-lang="xml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">&amp;lt;dubbo:protocol&lt;/span> name=&lt;span style="color:#2aa198">&amp;#34;dubbo&amp;#34;&lt;/span> port=&lt;span style="color:#2aa198">&amp;#34;20880&amp;#34;&lt;/span> &lt;span style="color:#268bd2">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>configure provider level default protocol:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-xml" data-lang="xml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">&amp;lt;dubbo:provider&lt;/span> protocol=&lt;span style="color:#2aa198">&amp;#34;dubbo&amp;#34;&lt;/span> &lt;span style="color:#268bd2">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>configure service level default protocol:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-xml" data-lang="xml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">&amp;lt;dubbo:service&lt;/span> protocol=&lt;span style="color:#2aa198">&amp;#34;dubbo&amp;#34;&lt;/span> &lt;span style="color:#268bd2">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>configure multiple port:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-xml" data-lang="xml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">&amp;lt;dubbo:protocol&lt;/span> id=&lt;span style="color:#2aa198">&amp;#34;dubbo1&amp;#34;&lt;/span> name=&lt;span style="color:#2aa198">&amp;#34;dubbo&amp;#34;&lt;/span> port=&lt;span style="color:#2aa198">&amp;#34;20880&amp;#34;&lt;/span> &lt;span style="color:#268bd2">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">&amp;lt;dubbo:protocol&lt;/span> id=&lt;span style="color:#2aa198">&amp;#34;dubbo2&amp;#34;&lt;/span> name=&lt;span style="color:#2aa198">&amp;#34;dubbo&amp;#34;&lt;/span> port=&lt;span style="color:#2aa198">&amp;#34;20881&amp;#34;&lt;/span> &lt;span style="color:#268bd2">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>configure protocol options:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-xml" data-lang="xml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">&amp;lt;dubbo:protocol&lt;/span> name=&lt;span style="color:#2aa198">“dubbo”&lt;/span> port=&lt;span style="color:#2aa198">“9090”&lt;/span> server=&lt;span style="color:#2aa198">“netty”&lt;/span> client=&lt;span style="color:#2aa198">“netty”&lt;/span> codec=&lt;span style="color:#2aa198">“dubbo”&lt;/span> serialization=&lt;span style="color:#2aa198">“hessian2”&lt;/span> charset=&lt;span style="color:#2aa198">“UTF-8”&lt;/span> threadpool=&lt;span style="color:#2aa198">“fixed”&lt;/span> threads=&lt;span style="color:#2aa198">“100”&lt;/span> queues=&lt;span style="color:#2aa198">“0”&lt;/span> iothreads=&lt;span style="color:#2aa198">“9”&lt;/span> buffer=&lt;span style="color:#2aa198">“8192”&lt;/span> accepts=&lt;span style="color:#2aa198">“1000”&lt;/span> payload=&lt;span style="color:#2aa198">“8388608”&lt;/span> &lt;span style="color:#268bd2">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>configure multiple connectios:&lt;/p>
&lt;p>Dubbo protocol default uses a single long connection per service per consumer for each service provider,and multiple connections can be used if the amount of data is large&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-xml" data-lang="xml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">&amp;lt;dubbo:protocol&lt;/span> name=&lt;span style="color:#2aa198">&amp;#34;dubbo&amp;#34;&lt;/span> connections=&lt;span style="color:#2aa198">&amp;#34;2&amp;#34;&lt;/span> &lt;span style="color:#268bd2">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;code>&amp;lt;dubbo:service connections=&amp;quot;0&amp;quot;&amp;gt;&lt;/code> OR &lt;code>&amp;lt;dubbo:reference connections=&amp;quot;0&amp;quot;&amp;gt;&lt;/code> It means that the service uses a share long connection per provider. &lt;code>default&lt;/code>&lt;/li>
&lt;li>&lt;code>&amp;lt;dubbo:service connections=&amp;quot;1&amp;quot;&amp;gt;&lt;/code> OR &lt;code>&amp;lt;dubbo:reference connections=&amp;quot;1&amp;quot;&amp;gt;&lt;/code> It means that the service uses a separate long connection.&lt;/li>
&lt;li>&lt;code>&amp;lt;dubbo:service connections=&amp;quot;2&amp;quot;&amp;gt;&lt;/code> OR&lt;code>&amp;lt;dubbo:reference connections=&amp;quot;2&amp;quot;&amp;gt;&lt;/code> It means that the service uses two separate long connection.&lt;/li>
&lt;/ul>
&lt;p>To prevent being hung up by a large number of connections, you can limit the number of connections at the service provider side.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-xml" data-lang="xml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">&amp;lt;dubbo:protocol&lt;/span> name=&lt;span style="color:#2aa198">&amp;#34;dubbo&amp;#34;&lt;/span> accepts=&lt;span style="color:#2aa198">&amp;#34;1000&amp;#34;&lt;/span> &lt;span style="color:#268bd2">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>or configure in &lt;code>dubbo.properties&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-fallback" data-lang="fallback">&lt;span style="display:flex;">&lt;span>dubbo.service.protocol=dubbo
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Docs: dubbo:application</title><link>https://dubbo.apache.org/en/docs/v2.7/user/references/xml/dubbo-application/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/docs/v2.7/user/references/xml/dubbo-application/</guid><description>
&lt;p>Application configuration. The corresponding class: &lt;code>org.apache.dubbo.config.ApplicationConfig&lt;/code>&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Property&lt;/th>
&lt;th>Corresponding URL parameter&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Requisite&lt;/th>
&lt;th>Default&lt;/th>
&lt;th>Effect&lt;/th>
&lt;th>Description&lt;/th>
&lt;th>Compatibility&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>name&lt;/td>
&lt;td>application&lt;/td>
&lt;td>string&lt;/td>
&lt;td>&lt;b>Y&lt;/b>&lt;/td>
&lt;td>&lt;/td>
&lt;td>service governance&lt;/td>
&lt;td>Application name is the unique identifier of an application. It is for registry combing the dependencies of applications. Note: Consumer and provider application name should not be the same, and this parameter is not a match condition. As a suggestion, you can name it as your project name. For example, kylin application invokes the service of morgan application, then you can name kylin application as &amp;ldquo;kylin&amp;rdquo;, and morgan application as &amp;ldquo;morgan&amp;rdquo;. Maybe kylin also works as a provider, but kylin should still called &amp;ldquo;kylin&amp;rdquo;. In this way, registry can understand the dependence of applications&lt;/td>
&lt;td>above 1.0.16&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>version&lt;/td>
&lt;td>application.version&lt;/td>
&lt;td>string&lt;/td>
&lt;td>N&lt;/td>
&lt;td>&lt;/td>
&lt;td>service governance&lt;/td>
&lt;td>The version of current application&lt;/td>
&lt;td>above 2.2.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>owner&lt;/td>
&lt;td>owner&lt;/td>
&lt;td>string&lt;/td>
&lt;td>N&lt;/td>
&lt;td>&lt;/td>
&lt;td>service governance&lt;/td>
&lt;td>Application manager. Pls. fill in the mailbox prefix of the person in charge&lt;/td>
&lt;td>above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>organization&lt;/td>
&lt;td>organization&lt;/td>
&lt;td>string&lt;/td>
&lt;td>N&lt;/td>
&lt;td>&lt;/td>
&lt;td>service governance&lt;/td>
&lt;td>Organization name is for registry distinguishing between the source of service. As a suggestion, this property should be written in config file directly. Such as china,intl,itu,crm,asc,dw,aliexpress etc.&lt;/td>
&lt;td>above 2.0.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>architecture &lt;br class="atl-forced-newline" />&lt;/td>
&lt;td>architecture &lt;br class="atl-forced-newline" />&lt;/td>
&lt;td>string&lt;/td>
&lt;td>N&lt;/td>
&lt;td>&lt;/td>
&lt;td>service governance&lt;/td>
&lt;td>The architecture of service layering. Like intl,china and so on. Different architecture use different layer&lt;/td>
&lt;td>above 2.0.7&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>environment&lt;/td>
&lt;td>environment&lt;/td>
&lt;td>string&lt;/td>
&lt;td>N&lt;/td>
&lt;td>&lt;/td>
&lt;td>service governance&lt;/td>
&lt;td>Application environment. Like develop,test,product. Work as the limit condition of developing new function&lt;/td>
&lt;td>above 2.0.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>compiler&lt;/td>
&lt;td>compiler&lt;/td>
&lt;td>string&lt;/td>
&lt;td>N&lt;/td>
&lt;td>javassist&lt;/td>
&lt;td>performance optimization&lt;/td>
&lt;td>Java class compile.It is used for the generating of dynamic class. The options are JDK and javassist&lt;/td>
&lt;td>above 2.1.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>logger&lt;/td>
&lt;td>logger&lt;/td>
&lt;td>string&lt;/td>
&lt;td>N&lt;/td>
&lt;td>slf4j&lt;/td>
&lt;td>performance optimization&lt;/td>
&lt;td>The format of log output,The options are slf4j,jcl,log4j,log4j2 and jdk&lt;/td>
&lt;td>above 2.2.0&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table></description></item><item><title>Docs: dubbo:argument</title><link>https://dubbo.apache.org/en/docs/v2.7/user/references/xml/dubbo-argument/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/docs/v2.7/user/references/xml/dubbo-argument/</guid><description>
&lt;p>Method argument configuration. The corresponding class:&lt;code>org.apache.dubbo.config.ArgumentConfig&lt;/code>. This tag is child of &lt;code>&amp;lt;dubbo:method&amp;gt;&lt;/code>, which is for feature description of method argument, such as:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-xml" data-lang="xml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">&amp;lt;dubbo:method&lt;/span> name=&lt;span style="color:#2aa198">&amp;#34;findXxx&amp;#34;&lt;/span> timeout=&lt;span style="color:#2aa198">&amp;#34;3000&amp;#34;&lt;/span> retries=&lt;span style="color:#2aa198">&amp;#34;2&amp;#34;&lt;/span>&lt;span style="color:#268bd2">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;dubbo:argument&lt;/span> index=&lt;span style="color:#2aa198">&amp;#34;0&amp;#34;&lt;/span> callback=&lt;span style="color:#2aa198">&amp;#34;true&amp;#34;&lt;/span> &lt;span style="color:#268bd2">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">&amp;lt;/dubbo:method&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Property&lt;/th>
&lt;th>Corresponding URL parameter&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Requisite&lt;/th>
&lt;th>Default&lt;/th>
&lt;th>Effect&lt;/th>
&lt;th>Description&lt;/th>
&lt;th>Compatibility&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>index&lt;/td>
&lt;td>&lt;/td>
&lt;td>int&lt;/td>
&lt;td>&lt;b>Y&lt;/b>&lt;/td>
&lt;td>&lt;/td>
&lt;td>identification&lt;/td>
&lt;td>method name&lt;/td>
&lt;td>above 2.0.6&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>type&lt;/td>
&lt;td>&lt;/td>
&lt;td>String&lt;/td>
&lt;td>Index and type choose one&lt;/td>
&lt;td>&lt;/td>
&lt;td>identification&lt;/td>
&lt;td>Find index of argument by it&lt;/td>
&lt;td>above 2.0.6&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>callback&lt;/td>
&lt;td>&amp;lt;metodName&amp;gt;&amp;lt;index&amp;gt;.retries&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>N&lt;/td>
&lt;td>&lt;/td>
&lt;td>service governance&lt;/td>
&lt;td>Mark whether this argument is a callback service. If true, provider will generate reverse proxy,which can invoke consumer in turn. Generally for event pushing&lt;/td>
&lt;td>above 2.0.6&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table></description></item><item><title>Docs: dubbo:config-center</title><link>https://dubbo.apache.org/en/docs/v2.7/user/references/xml/dubbo-config-center/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/docs/v2.7/user/references/xml/dubbo-config-center/</guid><description>
&lt;p>Configuration center. Corresponding configuration class: &lt;code>org.apache.dubbo.config.ConfigCenterConfig&lt;/code>&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>property&lt;/th>
&lt;th>Corresponding URL parameter&lt;/th>
&lt;th>type&lt;/th>
&lt;th>required&lt;/th>
&lt;th>default value&lt;/th>
&lt;th>description&lt;/th>
&lt;th>compatibility&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>protocol&lt;/td>
&lt;td>config.protocol&lt;/td>
&lt;td>string&lt;/td>
&lt;td>optional&lt;/td>
&lt;td>zookeeper&lt;/td>
&lt;td>Which configuration center to use: apollo, zookeeper, nacos, etc.&lt;br />take zookeeper for example&lt;br />1. If protocol is specified, address can be simplified to &lt;code>127.0.0.1:2181&lt;/code>;&lt;br />2. If protocol is not specified, address is set to &lt;code>zookeeper://127.0.0.1:2181&lt;/code>&lt;/td>
&lt;td>2.7.0+&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>address&lt;/td>
&lt;td>config.address&lt;/td>
&lt;td>string&lt;/td>
&lt;td>required&lt;/td>
&lt;td>&lt;/td>
&lt;td>Configuration center address.&lt;br />See protocol description for values&lt;/td>
&lt;td>2.7.0+&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>highest-priority&lt;/td>
&lt;td>config.highestPriority&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>optional&lt;/td>
&lt;td>true&lt;/td>
&lt;td>Configuration items from the configuration center have the highest priority, it means that the local configuration items will be overwritten.&lt;/td>
&lt;td>2.7.0+&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>namespace&lt;/td>
&lt;td>config.namespace&lt;/td>
&lt;td>string&lt;/td>
&lt;td>optional&lt;/td>
&lt;td>dubbo&lt;/td>
&lt;td>Using for multi-tenant isolation generally, the actual meaning varies depending on the configuration center. &lt;br />For example:&lt;br />zookeeper - Environment isolation, default &lt;code>dubbo&lt;/code>;&lt;br />apollo - Distinguish between sets of configurations for different domains and use them by default &lt;code>dubbo&lt;/code> and &lt;code>application&lt;/code>&lt;/td>
&lt;td>2.7.0+&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>cluster&lt;/td>
&lt;td>config.cluster&lt;/td>
&lt;td>string&lt;/td>
&lt;td>optional&lt;/td>
&lt;td>&lt;/td>
&lt;td>The meaning varies according to the configuration center selected.&lt;br />For example, it&amp;rsquo;s used to distinguish between different configuration clusters in apollo&lt;/td>
&lt;td>2.7.0+&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>group&lt;/td>
&lt;td>config.group&lt;/td>
&lt;td>string&lt;/td>
&lt;td>optional&lt;/td>
&lt;td>dubbo&lt;/td>
&lt;td>The meaning varies according to the configuration center selected.&lt;br />nacos - Isolate different configuration sets&lt;br />zookeeper - Isolate different configuration sets&lt;/td>
&lt;td>2.7.0+&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>check&lt;/td>
&lt;td>config.check&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>optional&lt;/td>
&lt;td>true&lt;/td>
&lt;td>Whether to terminate application startup when the configuration hub connection fails.&lt;/td>
&lt;td>2.7.0+&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>config-file&lt;/td>
&lt;td>config.configFile&lt;/td>
&lt;td>string&lt;/td>
&lt;td>optional&lt;/td>
&lt;td>dubbo.properties&lt;/td>
&lt;td>The key mapped to the global level profile&lt;br />zookeeper - $DEFAULT_PATH/dubbo/config/dubbo/dubbo.properties&lt;br />apollo - The dubbo.properties key in dubbo namespace&lt;/td>
&lt;td>2.7.0+&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>timeout&lt;/td>
&lt;td>config.timeout&lt;/td>
&lt;td>integer&lt;/td>
&lt;td>&lt;/td>
&lt;td>3000ms&lt;/td>
&lt;td>Gets the configured timeout&lt;/td>
&lt;td>2.7.0+&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>username&lt;/td>
&lt;td>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>&lt;/td>
&lt;td>&lt;/td>
&lt;td>the username if the configuration center requires validation&lt;br />Apollo is not yet enabled&lt;/td>
&lt;td>2.7.0+&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>password&lt;/td>
&lt;td>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>&lt;/td>
&lt;td>&lt;/td>
&lt;td>password if configuration center needs to do check&lt;br />Apollo is not yet enabled&lt;/td>
&lt;td>2.7.0+&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>parameters&lt;/td>
&lt;td>&lt;/td>
&lt;td>Map&amp;lt;string, string&amp;gt;&lt;/td>
&lt;td>&lt;/td>
&lt;td>&lt;/td>
&lt;td>Extended parameters to support customized configuration parameters for different configuration centers&lt;/td>
&lt;td>2.7.0+&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>include-spring-env&lt;/td>
&lt;td>&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>optional&lt;/td>
&lt;td>false&lt;/td>
&lt;td>With the Spring framework support, when the value is &lt;code>true&lt;/code>, it will automatically reads the configuration from the Spring Environment&lt;br />Read by default&lt;br />Configuration with key &lt;code>dubbo.properties&lt;/code>&lt;br />PropertySource with key &lt;code>dubbo.properties&lt;/code>&lt;/td>
&lt;td>2.7.0+&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table></description></item><item><title>Docs: dubbo:consumer</title><link>https://dubbo.apache.org/en/docs/v2.7/user/references/xml/dubbo-consumer/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/docs/v2.7/user/references/xml/dubbo-consumer/</guid><description>
&lt;p>Consumer default configuration. The corresponding clas: &lt;code>org.apache.dubbo.config.ConsumerConfig&lt;/code>. It is also default configuration of &lt;code>&amp;lt;dubbo:reference&amp;gt;&lt;/code>.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Property&lt;/th>
&lt;th>Corresponding URL parameter&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Requisite&lt;/th>
&lt;th>Default&lt;/th>
&lt;th>Effect&lt;/th>
&lt;th>Description&lt;/th>
&lt;th>Compatibility&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>timeout&lt;/td>
&lt;td>default.timeout&lt;/td>
&lt;td>int&lt;/td>
&lt;td>N&lt;/td>
&lt;td>1000&lt;/td>
&lt;td>performance optimization&lt;/td>
&lt;td>invoking timeout(ms)&lt;/td>
&lt;td>above 1.0.16&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>retries&lt;/td>
&lt;td>default.retries&lt;/td>
&lt;td>int&lt;/td>
&lt;td>N&lt;/td>
&lt;td>2&lt;/td>
&lt;td>performance optimization&lt;/td>
&lt;td>Invoking retry times, exclude the first invoking. Set 0 to disable it.Only valid if the cluster&amp;rsquo;s value is failback/failover&lt;/td>
&lt;td>above 1.0.16&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>loadbalance&lt;/td>
&lt;td>default.loadbalance&lt;/td>
&lt;td>string&lt;/td>
&lt;td>N&lt;/td>
&lt;td>random&lt;/td>
&lt;td>performance optimization&lt;/td>
&lt;td>Load balancing strategy. Choices:random, roundrobin(polling), leastactive(invoking least active service)&lt;/td>
&lt;td>above 1.0.16&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>async&lt;/td>
&lt;td>default.async&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>N&lt;/td>
&lt;td>false&lt;/td>
&lt;td>performance optimization&lt;/td>
&lt;td>Whether invoke asynchronously&lt;/td>
&lt;td>above 2.0.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>connections&lt;/td>
&lt;td>default.connections&lt;/td>
&lt;td>int&lt;/td>
&lt;td>N&lt;/td>
&lt;td>100&lt;/td>
&lt;td>performance optimization&lt;/td>
&lt;td>The maximum number of connections of per service provider. Only short link protocol such as rmi,http,hessian etc. supports. Long link protocol such as dubbo doesn&amp;rsquo;t support&lt;/td>
&lt;td>above 1.0.16&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>generic&lt;/td>
&lt;td>generic&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>N&lt;/td>
&lt;td>false&lt;/td>
&lt;td>service governance&lt;/td>
&lt;td>Whether default generic interface. A instance of GenericService will be got if true.&lt;/td>
&lt;td>above 2.0.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>check&lt;/td>
&lt;td>check&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>N&lt;/td>
&lt;td>true&lt;/td>
&lt;td>service governance&lt;/td>
&lt;td>Whether check the survival of provider. If true, throw exception when no provider of some services is alive. Otherwise, just ignore it&lt;/td>
&lt;td>above 1.0.16&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>proxy&lt;/td>
&lt;td>proxy&lt;/td>
&lt;td>string&lt;/td>
&lt;td>N&lt;/td>
&lt;td>javassist&lt;/td>
&lt;td>performance optimization&lt;/td>
&lt;td>Java class compile.It is used for the generating of dynamic class. The options are JDK and javassist&lt;/td>
&lt;td>above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>owner&lt;/td>
&lt;td>owner&lt;/td>
&lt;td>string&lt;/td>
&lt;td>N&lt;/td>
&lt;td>&lt;/td>
&lt;td>service governance&lt;/td>
&lt;td>Application manager. Pls. fill in the mailbox prefix of the person in charge&lt;/td>
&lt;td>above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>actives&lt;/td>
&lt;td>default.actives&lt;/td>
&lt;td>int&lt;/td>
&lt;td>N&lt;/td>
&lt;td>0&lt;/td>
&lt;td>performance optimization&lt;/td>
&lt;td>The max concurrency of per service method for each corresponding consumer&lt;/td>
&lt;td>above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>cluster&lt;/td>
&lt;td>default.cluster&lt;/td>
&lt;td>string&lt;/td>
&lt;td>N&lt;/td>
&lt;td>failover&lt;/td>
&lt;td>performance optimization&lt;/td>
&lt;td>Cluster tolerance. Choices:failover/failfast/failsafe/failback/forking&lt;/td>
&lt;td>above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>filter&lt;/td>
&lt;td>reference.filter&lt;/td>
&lt;td>string&lt;/td>
&lt;td>N&lt;/td>
&lt;td>&lt;/td>
&lt;td>performance optimization&lt;/td>
&lt;td>The name of filter which intercepts consumer remote invoke. Multiple names are separated by commas&lt;/td>
&lt;td>above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>listener&lt;/td>
&lt;td>invoker.listener&lt;/td>
&lt;td>string&lt;/td>
&lt;td>N&lt;/td>
&lt;td>&lt;/td>
&lt;td>performance optimization&lt;/td>
&lt;td>The consumer referenced service listener name. Multiple names are separated by commas&lt;/td>
&lt;td>above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>registry&lt;/td>
&lt;td>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>N&lt;/td>
&lt;td>register with the registry&lt;/td>
&lt;td>configuration relevant&lt;/td>
&lt;td>Register with the designated registry. Generally,for multiple registries, and value is the &amp;ldquo;id&amp;rdquo; of &amp;lt;dubbo:registry&amp;gt;. Multiple registries are separated by commas.If you do not want to register the service to any registry,pls set &amp;ldquo;N/A&amp;rdquo;&lt;/td>
&lt;td>above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>layer&lt;/td>
&lt;td>layer&lt;/td>
&lt;td>string&lt;/td>
&lt;td>N&lt;/td>
&lt;td>&lt;/td>
&lt;td>service governance&lt;/td>
&lt;td>The layer of consumer. Such as: biz, dao, intl:web, china:acton&lt;/td>
&lt;td>above 2.0.7&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>init&lt;/td>
&lt;td>init&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>N&lt;/td>
&lt;td>false&lt;/td>
&lt;td>performance optimization&lt;/td>
&lt;td>If true, initialize when &amp;ldquo;afterPropertiesSet()&amp;rdquo; is invoked. Otherwise wait until the instance is referenced to initialize&lt;/td>
&lt;td>above 2.0.10&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>cache&lt;/td>
&lt;td>cache&lt;/td>
&lt;td>string/boolean&lt;/td>
&lt;td>N&lt;/td>
&lt;td>&lt;/td>
&lt;td>service governance&lt;/td>
&lt;td>Cache return result, and key is call parameters. Choices: lru, threadlocal, jcache and so on&lt;/td>
&lt;td>at least 2.1.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>validation&lt;/td>
&lt;td>validation&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>N&lt;/td>
&lt;td>&lt;/td>
&lt;td>service governance&lt;/td>
&lt;td>Whether enable JSR303 standard annotation validation&lt;/td>
&lt;td>at least 2.1.0&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table></description></item><item><title>Docs: dubbo:method</title><link>https://dubbo.apache.org/en/docs/v2.7/user/references/xml/dubbo-method/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/docs/v2.7/user/references/xml/dubbo-method/</guid><description>
&lt;p>Method level configuration. The corresponding class: &lt;code>org.apache.dubbo.config.MethodConfig&lt;/code>. This tag is a child tag of &lt;code>&amp;lt;dubbo:service&amp;gt;&lt;/code> or &lt;code>&amp;lt;dubbo:reference&amp;gt;&lt;/code>, for accuracy to method level.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Property&lt;/th>
&lt;th>Corresponding URL parameter&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Requisite&lt;/th>
&lt;th>Default&lt;/th>
&lt;th>Effect&lt;/th>
&lt;th>Description&lt;/th>
&lt;th>Compatibility&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>name&lt;/td>
&lt;td>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>&lt;b>Y&lt;/b>&lt;/td>
&lt;td>&lt;/td>
&lt;td>identifier&lt;/td>
&lt;td>Method name&lt;/td>
&lt;td>above 1.0.8&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>timeout&lt;/td>
&lt;td>&amp;lt;metodName&amp;gt;.timeout&lt;/td>
&lt;td>int&lt;/td>
&lt;td>N&lt;/td>
&lt;td>&amp;lt;dubbo:reference&amp;gt; timeout&lt;/td>
&lt;td>performance optimization&lt;/td>
&lt;td>Method call timeout(ms)&lt;/td>
&lt;td>above 1.0.8&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>retries&lt;/td>
&lt;td>&amp;lt;metodName&amp;gt;.retries&lt;/td>
&lt;td>int&lt;/td>
&lt;td>N&lt;/td>
&lt;td>&amp;lt;dubbo:reference&amp;gt; retries&lt;/td>
&lt;td>performance optimization&lt;/td>
&lt;td>Invoking retry times, exclude the first invoking. Set 0 to disable it&lt;/td>
&lt;td>above 2.0.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>loadbalance&lt;/td>
&lt;td>&amp;lt;metodName&amp;gt;.loadbalance&lt;/td>
&lt;td>string&lt;/td>
&lt;td>N&lt;/td>
&lt;td>&amp;lt;dubbo:reference&amp;gt; loadbalance&lt;/td>
&lt;td>performance optimization&lt;/td>
&lt;td>Load balancing strategy. Choices:random, roundrobin(polling), leastactive(invoking least active service)&lt;/td>
&lt;td>above 2.0.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>async&lt;/td>
&lt;td>&amp;lt;metodName&amp;gt;.async&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>N&lt;/td>
&lt;td>&amp;lt;dubbo:reference&amp;gt; async&lt;/td>
&lt;td>performance optimization&lt;/td>
&lt;td>Whether invoke asynchronously&lt;/td>
&lt;td>above 1.0.9&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>sent&lt;/td>
&lt;td>&amp;lt;methodName&amp;gt;.sent&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>N&lt;/td>
&lt;td>true&lt;/td>
&lt;td>performance optimization&lt;/td>
&lt;td>Generally used when async is true, and If true, indicate that the network has sent out data&lt;/td>
&lt;td>above 2.0.6&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>actives&lt;/td>
&lt;td>&amp;lt;metodName&amp;gt;.actives&lt;/td>
&lt;td>int&lt;/td>
&lt;td>N&lt;/td>
&lt;td>0&lt;/td>
&lt;td>performance optimization&lt;/td>
&lt;td>The max concurrency of per service method for each corresponding consumer&lt;/td>
&lt;td>above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>executes&lt;/td>
&lt;td>&amp;lt;metodName&amp;gt;.executes&lt;/td>
&lt;td>int&lt;/td>
&lt;td>N&lt;/td>
&lt;td>0&lt;/td>
&lt;td>performance optimization&lt;/td>
&lt;td>The maximum number of threads of per service method is limited- -. Only take effect when &amp;lt;dubbo:method&amp;gt; is &amp;lt;dubbo:service&amp;gt; child tag&lt;/td>
&lt;td>above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>deprecated&lt;/td>
&lt;td>&amp;lt;methodName&amp;gt;.deprecated&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>N&lt;/td>
&lt;td>false&lt;/td>
&lt;td>service governance&lt;/td>
&lt;td>Whether is deprecated method. Only take effect when &amp;lt;dubbo:method&amp;gt; is &amp;lt;dubbo:service&amp;gt; child tag&lt;/td>
&lt;td>above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>sticky&lt;/td>
&lt;td>&amp;lt;methodName&amp;gt;.sticky&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>N&lt;/td>
&lt;td>false&lt;/td>
&lt;td>service governance&lt;/td>
&lt;td>If true, all methods on this interface use the same provider. If more complex rules are required, use routing&lt;/td>
&lt;td>above 2.0.6&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>return&lt;/td>
&lt;td>&amp;lt;methodName&amp;gt;.return&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>N&lt;/td>
&lt;td>true&lt;/td>
&lt;td>performance optimization&lt;/td>
&lt;td>Whether need return value. Only take effect when async is true. If true, return future, or callback such as &amp;ldquo;onreturn&amp;rdquo; method. Otherwise, return null.&lt;/td>
&lt;td>above 2.0.6&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>oninvoke&lt;/td>
&lt;td>&lt;/td>
&lt;td>String&lt;/td>
&lt;td>N&lt;/td>
&lt;td>&lt;/td>
&lt;td>performance optimization&lt;/td>
&lt;td>Intercept before invoke&lt;/td>
&lt;td>above 2.0.6&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>onreturn&lt;/td>
&lt;td>&lt;/td>
&lt;td>String&lt;/td>
&lt;td>N&lt;/td>
&lt;td>&lt;/td>
&lt;td>performance optimization&lt;/td>
&lt;td>Intercept after invoke&lt;/td>
&lt;td>above 2.0.6&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>onthrow&lt;/td>
&lt;td>&lt;/td>
&lt;td>String&lt;/td>
&lt;td>N&lt;/td>
&lt;td>&lt;/td>
&lt;td>performance optimization&lt;/td>
&lt;td>Intercept when catch exception&lt;/td>
&lt;td>above 2.0.6&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>cache&lt;/td>
&lt;td>&amp;lt;methodName&amp;gt;.cache&lt;/td>
&lt;td>string/boolean&lt;/td>
&lt;td>N&lt;/td>
&lt;td>&lt;/td>
&lt;td>service governance&lt;/td>
&lt;td>Cache return result, and key is call parameters. Choices: lru, threadlocal, jcache and so on&lt;/td>
&lt;td>at least 2.1.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>validation&lt;/td>
&lt;td>&amp;lt;methodName&amp;gt;.validation&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>N&lt;/td>
&lt;td>&lt;/td>
&lt;td>service governance&lt;/td>
&lt;td>Whether enable JSR303 standard annotation validation&lt;/td>
&lt;td>at least 2.1.0&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>For example:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-xml" data-lang="xml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">&amp;lt;dubbo:reference&lt;/span> interface=&lt;span style="color:#2aa198">&amp;#34;com.xxx.XxxService&amp;#34;&lt;/span>&lt;span style="color:#268bd2">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;dubbo:method&lt;/span> name=&lt;span style="color:#2aa198">&amp;#34;findXxx&amp;#34;&lt;/span> timeout=&lt;span style="color:#2aa198">&amp;#34;3000&amp;#34;&lt;/span> retries=&lt;span style="color:#2aa198">&amp;#34;2&amp;#34;&lt;/span> &lt;span style="color:#268bd2">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">&amp;lt;/dubbo:reference&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Docs: dubbo:module</title><link>https://dubbo.apache.org/en/docs/v2.7/user/references/xml/dubbo-module/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/docs/v2.7/user/references/xml/dubbo-module/</guid><description>
&lt;p>Module configuration. The corresponding class &lt;code>org.apache.dubbo.config.ModuleConfig&lt;/code>&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Property&lt;/th>
&lt;th>The corresponding class&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Requisite&lt;/th>
&lt;th>Default&lt;/th>
&lt;th>Effect&lt;/th>
&lt;th>Description&lt;/th>
&lt;th>Compatibility&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>name&lt;/td>
&lt;td>module&lt;/td>
&lt;td>string&lt;/td>
&lt;td>&lt;b>Y&lt;/b>&lt;/td>
&lt;td>&lt;/td>
&lt;td>service governance&lt;/td>
&lt;td>Module name is for registry combing the dependencies of modules.&lt;/td>
&lt;td>above 2.2.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>version&lt;/td>
&lt;td>module.version&lt;/td>
&lt;td>string&lt;/td>
&lt;td>N&lt;/td>
&lt;td>&lt;/td>
&lt;td>service governance&lt;/td>
&lt;td>module version&lt;/td>
&lt;td>above 2.2.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>owner&lt;/td>
&lt;td>owner&lt;/td>
&lt;td>string&lt;/td>
&lt;td>N&lt;/td>
&lt;td>&lt;/td>
&lt;td>service governance&lt;/td>
&lt;td>Module manager, Pls. fill in the mailbox prefix of the person in charge&lt;/td>
&lt;td>above 2.2.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>organization&lt;/td>
&lt;td>organization&lt;/td>
&lt;td>string&lt;/td>
&lt;td>N&lt;/td>
&lt;td>&lt;/td>
&lt;td>service governance&lt;/td>
&lt;td>Organization name is for registry distinguishing between the source of service. As a suggestion, this property should be written in config file directly. Such as china,intl,itu,crm,asc,dw,aliexpress etc.&lt;/td>
&lt;td>above 2.2.0&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table></description></item><item><title>Docs: dubbo:monitor</title><link>https://dubbo.apache.org/en/docs/v2.7/user/references/xml/dubbo-monitor/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/docs/v2.7/user/references/xml/dubbo-monitor/</guid><description>
&lt;p>Monitor center configuration. The corresponding class: &lt;code>org.apache.dubbo.config.MonitorConfig&lt;/code>&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Property&lt;/th>
&lt;th>The corresponding class&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Requisite&lt;/th>
&lt;th>Default&lt;/th>
&lt;th>Effect&lt;/th>
&lt;th>Description&lt;/th>
&lt;th>Compatibility&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>protocol&lt;/td>
&lt;td>protocol&lt;/td>
&lt;td>string&lt;/td>
&lt;td>N&lt;/td>
&lt;td>dubbo&lt;/td>
&lt;td>service governance&lt;/td>
&lt;td>Monitor center protocol. &amp;ldquo;registry&amp;rdquo; means looking up monitor center from registry. Others mean communicating to monitor center directly&lt;/td>
&lt;td>above 2.0.9&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>address&lt;/td>
&lt;td>&amp;lt;url&amp;gt;&lt;/td>
&lt;td>string&lt;/td>
&lt;td>N&lt;/td>
&lt;td>N/A&lt;/td>
&lt;td>service governance&lt;/td>
&lt;td>Communicating to monitor center directly. address=&amp;ldquo;10.20.130.230:12080&amp;rdquo;&lt;/td>
&lt;td>above 1.0.16&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table></description></item><item><title>Docs: dubbo:parameter</title><link>https://dubbo.apache.org/en/docs/v2.7/user/references/xml/dubbo-parameter/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/docs/v2.7/user/references/xml/dubbo-parameter/</guid><description>
&lt;p>Optional parameter configuration. The corresponding class is &lt;code>java.util.Map&lt;/code>. This tag is used as a sub tag to configure custom parameters for extending &lt;code>&amp;lt;dubbo:protocol&amp;gt;&lt;/code>, &lt;code>&amp;lt;dubbo:service&amp;gt;&lt;/code>, &lt;code>&amp;lt;dubbo:provider&amp;gt;&lt;/code>, &lt;code>&amp;lt;dubbo:reference&amp;gt;&lt;/code> or &lt;code>&amp;lt;dubbo:consumer&amp;gt;&lt;/code>.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Attribute&lt;/th>
&lt;th>Corresponding URL parameter&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Required&lt;/th>
&lt;th>Default Value&lt;/th>
&lt;th>Function&lt;/th>
&lt;th>Description&lt;/th>
&lt;th>Compatibility&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>key&lt;/td>
&lt;td>key&lt;/td>
&lt;td>string&lt;/td>
&lt;td>&lt;b>True&lt;/b>&lt;/td>
&lt;td>&lt;/td>
&lt;td>Service governance&lt;/td>
&lt;td>routing parameter key&lt;/td>
&lt;td>Above 2.0.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>value&lt;/td>
&lt;td>value&lt;/td>
&lt;td>string&lt;/td>
&lt;td>&lt;b>True&lt;/b>&lt;/td>
&lt;td>&lt;/td>
&lt;td>Service governance&lt;/td>
&lt;td>routing parameter value&lt;/td>
&lt;td>Above 2.0.0&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>For example:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-xml" data-lang="xml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">&amp;lt;dubbo:protocol&lt;/span> name=&lt;span style="color:#2aa198">&amp;#34;napoli&amp;#34;&lt;/span>&lt;span style="color:#268bd2">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;dubbo:parameter&lt;/span> key=&lt;span style="color:#2aa198">&amp;#34;http://10.20.160.198/wiki/display/dubbo/napoli.queue.name&amp;#34;&lt;/span> value=&lt;span style="color:#2aa198">&amp;#34;xxx&amp;#34;&lt;/span> &lt;span style="color:#268bd2">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">&amp;lt;/dubbo:protocol&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>you can also use it like this:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-xml" data-lang="xml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">&amp;lt;dubbo:protocol&lt;/span> name=&lt;span style="color:#2aa198">&amp;#34;jms&amp;#34;&lt;/span> p:queue=&lt;span style="color:#2aa198">&amp;#34;xxx&amp;#34;&lt;/span> &lt;span style="color:#268bd2">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Docs: dubbo:protocol</title><link>https://dubbo.apache.org/en/docs/v2.7/user/references/xml/dubbo-protocol/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/docs/v2.7/user/references/xml/dubbo-protocol/</guid><description>
&lt;p>Service provider protocol configuration. The corresponding class is &lt;code>org.apache.dubbo.config.ProtocolConfig&lt;/code>. If you need to support multiple protocols, you could declare multiple &lt;code>&amp;lt;dubbo:protocol&amp;gt;&lt;/code> tags, and specify the protocol via &lt;code>protocol&lt;/code> property.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Attribute&lt;/th>
&lt;th>Corresponding URL parameter&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Required&lt;/th>
&lt;th>Default Value&lt;/th>
&lt;th>Function&lt;/th>
&lt;th>Description&lt;/th>
&lt;th>Compatibility&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>id&lt;/td>
&lt;td>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>dubbo&lt;/td>
&lt;td>Configuration association&lt;/td>
&lt;td>Bean Id of the protocol, can be referenced in &amp;lt;dubbo:service protocol=&amp;quot;&amp;quot;&amp;gt; The default value is equal to the value of &lt;code>name&lt;/code> attribute while &lt;code>id&lt;/code> is not filled. If &lt;code>name&lt;/code> value has already existed, it will add index to it&amp;rsquo;s suffix.&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>name&lt;/td>
&lt;td>&amp;lt;protocol&amp;gt;&lt;/td>
&lt;td>string&lt;/td>
&lt;td>&lt;b>True&lt;/b>&lt;/td>
&lt;td>dubbo&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>Protocol name&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>port&lt;/td>
&lt;td>&amp;lt;port&amp;gt;&lt;/td>
&lt;td>int&lt;/td>
&lt;td>False&lt;/td>
&lt;td>The default port of dubbo protocol is 20880, rmi protocol is 1099, http and hessian protocol are 80;It will allocate the default port if &lt;code>port&lt;/code> is not filled; It will allocate an unused port if &lt;code>port&lt;/code> equals &lt;code>-1&lt;/code>. To ensure the ports scope is controllable, the port will increase based on the corresponding protocol default port after Dubbo 2.4.0+&lt;/td>
&lt;td>Service discovery&lt;/td>
&lt;td>Service port&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>host&lt;/td>
&lt;td>&amp;lt;host&amp;gt;&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>Find local IP automatically&lt;/td>
&lt;td>Service discovery&lt;/td>
&lt;td>-The host name of services, to specify VIP and domain, or having multiple network cards. If null, it will find local IP automatically- It&amp;rsquo;s recommended to let Dubbo find local IP automatically&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>threadpool&lt;/td>
&lt;td>threadpool&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>fixed&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>The type of Thread Pool, fixed/cached are available&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>threads&lt;/td>
&lt;td>threads&lt;/td>
&lt;td>int&lt;/td>
&lt;td>False&lt;/td>
&lt;td>200&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>The size of the services&amp;rsquo; Thread Pool(Fixed)&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>iothreads&lt;/td>
&lt;td>threads&lt;/td>
&lt;td>int&lt;/td>
&lt;td>False&lt;/td>
&lt;td>The count of CPU + 1&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>The size of io Thread Pool(Fixed)&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>accepts&lt;/td>
&lt;td>accepts&lt;/td>
&lt;td>int&lt;/td>
&lt;td>False&lt;/td>
&lt;td>0&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>The maximum connection count of the service provider&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>payload&lt;/td>
&lt;td>payload&lt;/td>
&lt;td>int&lt;/td>
&lt;td>False&lt;/td>
&lt;td>8388608(=8M)&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>The length limit of request and response, unit is byte&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>codec&lt;/td>
&lt;td>codec&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>dubbo&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>Protocol encoding&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>serialization&lt;/td>
&lt;td>serialization&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>The default serialization of dubbo protocol is hessian2, rmi protocol is java, http protocol is json&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>Protocol serialization, It&amp;rsquo;s used when a protocol has multiple serializations. For example, &lt;code>dubbo&lt;/code> protocol has 4 serializations, they are &lt;code>dubbo&lt;/code>, &lt;code>hessian2&lt;/code>, &lt;code>java&lt;/code> and &lt;code>compactedjava&lt;/code>.&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>accesslog&lt;/td>
&lt;td>accesslog&lt;/td>
&lt;td>string/boolean&lt;/td>
&lt;td>False&lt;/td>
&lt;td>&lt;/td>
&lt;td>Service discovery&lt;/td>
&lt;td>&lt;code>true&lt;/code> will write access log to logger. Specifying it to a log path, you can write access logs to special log file.&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>path&lt;/td>
&lt;td>&amp;lt;path&amp;gt;&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>&lt;/td>
&lt;td>Service discovery&lt;/td>
&lt;td>Context path, the prefix of the service path&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>transporter&lt;/td>
&lt;td>transporter&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>The default value of dubbo protocol is netty&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>The server and client implements of the protocol. For example, mina and netty for dubbo protocol. You can configure server or client side separately.&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>server&lt;/td>
&lt;td>server&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>The default value of dubbo protocol is netty, http protocol is servlet&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>The server implement of the protocol. For example, mina and netty for dubbo ptotocol, jetty and servlet for http protocol.&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>client&lt;/td>
&lt;td>client&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>The default value of dubbo protocol is netty&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>The client implement of the protocol. For example, mina and netty for dubbo protocol.&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>dispatcher&lt;/td>
&lt;td>dispatcher&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>The default value of dubbo protocol is all&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>specify the thread model of the way to dispatching. Such as &lt;code>all&lt;/code>, &lt;code>direct&lt;/code>, &lt;code>message&lt;/code>, &lt;code>execution&lt;/code>, and &lt;code>connection&lt;/code> for dubbo protocol.&lt;/td>
&lt;td>Above 2.1.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>queues&lt;/td>
&lt;td>queues&lt;/td>
&lt;td>int&lt;/td>
&lt;td>False&lt;/td>
&lt;td>0&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>The queue size of the Thread Pool. It&amp;rsquo;s recommended not to specify it in order to invoke other provides rather than queueing unless you have special requirement.&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>charset&lt;/td>
&lt;td>charset&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>UTF-8&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>Serialization encoding&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>buffer&lt;/td>
&lt;td>buffer&lt;/td>
&lt;td>int&lt;/td>
&lt;td>False&lt;/td>
&lt;td>8192&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>The buffer size of networking IO&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>heartbeat&lt;/td>
&lt;td>heartbeat&lt;/td>
&lt;td>int&lt;/td>
&lt;td>False&lt;/td>
&lt;td>0&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>Heartbeat interval. For long connection, it&amp;rsquo;s difficult to receive closing event while the physical layer is disconnected. So heartbeat is necessary to help checking the connection quality&lt;/td>
&lt;td>Above 2.0.10&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>telnet&lt;/td>
&lt;td>telnet&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>&lt;/td>
&lt;td>Service discovery&lt;/td>
&lt;td>Supported telnet commands, use &lt;code>,&lt;/code> to separate commands.&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>register&lt;/td>
&lt;td>register&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>False&lt;/td>
&lt;td>true&lt;/td>
&lt;td>Service discovery&lt;/td>
&lt;td>Whether registering the corresponding services to registry center&lt;/td>
&lt;td>Above 2.0.8&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>contextpath&lt;/td>
&lt;td>contextpath&lt;/td>
&lt;td>String&lt;/td>
&lt;td>False&lt;/td>
&lt;td>Default value is an empty string&lt;/td>
&lt;td>Service discovery&lt;/td>
&lt;td>&lt;/td>
&lt;td>Above 2.0.6&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table></description></item><item><title>Docs: dubbo:provider</title><link>https://dubbo.apache.org/en/docs/v2.7/user/references/xml/dubbo-provider/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/docs/v2.7/user/references/xml/dubbo-provider/</guid><description>
&lt;p>The default configuration of service provider. The corresponding class is &lt;code>org.apache.dubbo.config.ProviderConfig&lt;/code>. This tag provider default values for &lt;code>&amp;lt;dubbo:service&amp;gt;&lt;/code> and &lt;code>&amp;lt;dubbo:protocol&amp;gt;&lt;/code>.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Attribute&lt;/th>
&lt;th>Corresponding URL parameter&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Required&lt;/th>
&lt;th>Default Value&lt;/th>
&lt;th>Function&lt;/th>
&lt;th>Description&lt;/th>
&lt;th>Compatibility&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>id&lt;/td>
&lt;td>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>dubbo&lt;/td>
&lt;td>Configuration association&lt;/td>
&lt;td>Bean Id of the protocol, can be referenced in &amp;lt;dubbo:service proivder=&amp;quot;&amp;quot;&amp;gt;&lt;/td>
&lt;td>Above 1.0.16&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>protocol&lt;/td>
&lt;td>&amp;lt;protocol&amp;gt;&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>dubbo&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>Protocol name&lt;/td>
&lt;td>Above 1.0.16&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>host&lt;/td>
&lt;td>&amp;lt;host&amp;gt;&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>Find local IP automatically&lt;/td>
&lt;td>Service discovery&lt;/td>
&lt;td>The host name of services, to specify VIP and domain, or having multiple network cards. If null, it will find local IP automatically. It&amp;rsquo;s recommended to let Dubbo find local IP automatically&lt;/td>
&lt;td>Above 1.0.16&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>threads&lt;/td>
&lt;td>threads&lt;/td>
&lt;td>int&lt;/td>
&lt;td>False&lt;/td>
&lt;td>200&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>The size of the services&amp;rsquo; Thread Pool(Fixed)&lt;/td>
&lt;td>Above 1.0.16&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>payload&lt;/td>
&lt;td>payload&lt;/td>
&lt;td>int&lt;/td>
&lt;td>False&lt;/td>
&lt;td>8388608(=8M)&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>The length limit of request and response, unit is byte&lt;/td>
&lt;td>Above 2.0.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>path&lt;/td>
&lt;td>&amp;lt;path&amp;gt;&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>&lt;/td>
&lt;td>Service discovery&lt;/td>
&lt;td>Context path of the service provider, the prefix of the service path&lt;/td>
&lt;td>Above 2.0.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>server&lt;/td>
&lt;td>server&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>Default is netty for dubbo protocol, servlet for http protocol&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>The server implement of the protocol. For example, mina and netty for dubbo ptotocol, jetty and servlet for http protocol.&lt;/td>
&lt;td>Above 2.0.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>client&lt;/td>
&lt;td>client&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>Default is netty for dubbo protocol&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>The client implement of the protocol. For example, mina and netty for dubbo protocol.&lt;/td>
&lt;td>Above 2.0.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>codec&lt;/td>
&lt;td>codec&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>dubbo&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>Protocol encoding&lt;/td>
&lt;td>Above 2.0.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>serialization&lt;/td>
&lt;td>serialization&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>Default is hessian2 for dubbo protocol, json for http protocol&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>Protocol serialization, It&amp;rsquo;s used when a protocol has multiple serializations. For example, &lt;code>dubbo&lt;/code> protocol has 4 serializations, they are &lt;code>dubbo&lt;/code>, &lt;code>hessian2&lt;/code>, &lt;code>java&lt;/code> and &lt;code>compactedjava&lt;/code>, &lt;code>http&lt;/code> protocol has &lt;code>json&lt;/code> and &lt;code>xml&lt;/code>.&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>default&lt;/td>
&lt;td>&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>False&lt;/td>
&lt;td>false&lt;/td>
&lt;td>Configuration association&lt;/td>
&lt;td>To specify the default protocol for support multiple protocols.&lt;/td>
&lt;td>Above 1.0.16&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>filter&lt;/td>
&lt;td>service.filter&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>The filter name of the RPC process of the provider, use &lt;code>,&lt;/code> to separate multiple filter names.&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>listener&lt;/td>
&lt;td>exporter.listener&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>The listener name of the provider, use &lt;code>,&lt;/code> to separate multiple listener names.&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>threadpool&lt;/td>
&lt;td>threadpool&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>fixed&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>The type of Thread Pool, fixed/cached are available&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>accepts&lt;/td>
&lt;td>accepts&lt;/td>
&lt;td>int&lt;/td>
&lt;td>False&lt;/td>
&lt;td>0&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>The maximum connection count of the service provider&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>version&lt;/td>
&lt;td>version&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>0.0.0&lt;/td>
&lt;td>Service discovery&lt;/td>
&lt;td>Service version. It&amp;rsquo;s recommended to use 2 digitals such as &lt;code>1.0&lt;/code>. It&amp;rsquo;s necessary to upgrade version only when the service is not compatible.&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>group&lt;/td>
&lt;td>group&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>&lt;/td>
&lt;td>Service discovery&lt;/td>
&lt;td>The group of the service providers. It can distinguish services when it has multiple implements.&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>delay&lt;/td>
&lt;td>delay&lt;/td>
&lt;td>int&lt;/td>
&lt;td>False&lt;/td>
&lt;td>0&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>The delay time(ms) for registering services. When set to -1, it indicates that the services will expose to registry after the Spring context is initialized&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>timeout&lt;/td>
&lt;td>default.timeout&lt;/td>
&lt;td>int&lt;/td>
&lt;td>False&lt;/td>
&lt;td>1000&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>The RPC timeout(ms)&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>retries&lt;/td>
&lt;td>default.retries&lt;/td>
&lt;td>int&lt;/td>
&lt;td>False&lt;/td>
&lt;td>2&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>The retry count for RPC, not including the first invoke. Please set it to 0 if don&amp;rsquo;t need to retry.&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>connections&lt;/td>
&lt;td>default.connections&lt;/td>
&lt;td>int&lt;/td>
&lt;td>False&lt;/td>
&lt;td>0&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>The maximum connections of every provider. For short connection such as rmi, http and hessian, it&amp;rsquo;s connection limit, but for long connection such as dubbo, it&amp;rsquo;s connection count.&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>loadbalance&lt;/td>
&lt;td>default.loadbalance&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>random&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>Strategy of load balance, &lt;code>random&lt;/code>, &lt;code>roundrobin&lt;/code> and &lt;code>leastactive&lt;/code> are available.&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>async&lt;/td>
&lt;td>default.async&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>False&lt;/td>
&lt;td>false&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>Asynchronous execution, not reliable. It does not block the execution thread just only ignores the return value.&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>stub&lt;/td>
&lt;td>stub&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>False&lt;/td>
&lt;td>false&lt;/td>
&lt;td>Service governance&lt;/td>
&lt;td>&lt;code>true&lt;/code> means use the default proxy class name, which is the interface name with &lt;code>Local&lt;/code> as the suffix.&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>mock&lt;/td>
&lt;td>mock&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>False&lt;/td>
&lt;td>false&lt;/td>
&lt;td>Service governance&lt;/td>
&lt;td>&lt;code>true&lt;/code> means use the default mock class name, which is the interface name with &lt;code>Mock&lt;/code> suffix.&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>token&lt;/td>
&lt;td>token&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>False&lt;/td>
&lt;td>false&lt;/td>
&lt;td>Service governance&lt;/td>
&lt;td>Enable token validation. Disable token if it&amp;rsquo;s null. It will generate token randomly when it is enable.&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>registry&lt;/td>
&lt;td>registry&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>By default, register to all registries&lt;/td>
&lt;td>Configuration association&lt;/td>
&lt;td>Register services to specified registry while having multiple registries. It is the &lt;code>id&lt;/code> value of the &amp;lt;dubbo:registry&amp;gt;. If don&amp;rsquo;t want to register to any registry, set it as &lt;code>N/A&lt;/code>&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>dynamic&lt;/td>
&lt;td>dynamic&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>False&lt;/td>
&lt;td>true&lt;/td>
&lt;td>Service governance&lt;/td>
&lt;td>Whether the service is registered dynamically. If false, services will be showed as &lt;code>disable&lt;/code>, you need to enable it manually. And you also need to disable it when provider shut down.&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>accesslog&lt;/td>
&lt;td>accesslog&lt;/td>
&lt;td>string/boolean&lt;/td>
&lt;td>False&lt;/td>
&lt;td>false&lt;/td>
&lt;td>Service governance&lt;/td>
&lt;td>&lt;code>true&lt;/code> will write access log to logger. Specifying it to a log path, you can write access logs to special log file.&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>owner&lt;/td>
&lt;td>owner&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>&lt;/td>
&lt;td>Service governance&lt;/td>
&lt;td>The owner of the service. It&amp;rsquo;s used for service governance.&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>document&lt;/td>
&lt;td>document&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>&lt;/td>
&lt;td>Service governance&lt;/td>
&lt;td>Service document URL&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>weight&lt;/td>
&lt;td>weight&lt;/td>
&lt;td>int&lt;/td>
&lt;td>False&lt;/td>
&lt;td>&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>The weight of the service&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>executes&lt;/td>
&lt;td>executes&lt;/td>
&lt;td>int&lt;/td>
&lt;td>False&lt;/td>
&lt;td>0&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>The maximum parallel execution request count per method per service for the provider.&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>actives&lt;/td>
&lt;td>default.actives&lt;/td>
&lt;td>int&lt;/td>
&lt;td>False&lt;/td>
&lt;td>0&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>The maximum concurrent calls per method per service of the consumer.&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>proxy&lt;/td>
&lt;td>proxy&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>javassist&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>The proxy implement, jdk/javassist are available.&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>cluster&lt;/td>
&lt;td>default.cluster&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>failover&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>failover/failfast/failsafe/failback/forking are available.&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>deprecated&lt;/td>
&lt;td>deprecated&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>False&lt;/td>
&lt;td>false&lt;/td>
&lt;td>Service governance&lt;/td>
&lt;td>Mark the service is deprecated. If true, there will log an error log on the client side.&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>queues&lt;/td>
&lt;td>queues&lt;/td>
&lt;td>int&lt;/td>
&lt;td>False&lt;/td>
&lt;td>0&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>The queue size of the Thread Pool. It&amp;rsquo;s recommended not to specify it in order to invoke other provides rather than queueing unless you have special requirement.&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>charset&lt;/td>
&lt;td>charset&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>UTF-8&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>Serialization encoding&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>buffer&lt;/td>
&lt;td>buffer&lt;/td>
&lt;td>int&lt;/td>
&lt;td>False&lt;/td>
&lt;td>8192&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>The buffer size of networking IO&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>iothreads&lt;/td>
&lt;td>iothreads&lt;/td>
&lt;td>int&lt;/td>
&lt;td>False&lt;/td>
&lt;td>CPU + 1&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>The size of io Thread Pool(Fixed). These threads are used to receive, serialize and deserialize IO data. See &lt;code>threads&lt;/code> for configuring business thread pool. It&amp;rsquo;s not recommended to configure this.&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>telnet&lt;/td>
&lt;td>telnet&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>&lt;/td>
&lt;td>Service governance&lt;/td>
&lt;td>Supported telnet commands, use &lt;code>,&lt;/code> to separate commands.&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>contextpath&lt;/td>
&lt;td>contextpath&lt;/td>
&lt;td>String&lt;/td>
&lt;td>False&lt;/td>
&lt;td>Empty string&lt;/td>
&lt;td>Service governance&lt;/td>
&lt;td>&lt;/td>
&lt;td>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>layer&lt;/td>
&lt;td>layer&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>&lt;/td>
&lt;td>Service governance&lt;/td>
&lt;td>The biz layer of the service provider, such as biz, dao, intl:web and china:acton.&lt;/td>
&lt;td>Above 2.0.7&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table></description></item><item><title>Docs: dubbo:reference</title><link>https://dubbo.apache.org/en/docs/v2.7/user/references/xml/dubbo-reference/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/docs/v2.7/user/references/xml/dubbo-reference/</guid><description>
&lt;p>The configuration of service consumer. The corresponding class is&lt;code>org.apache.dubbo.config.ReferenceConfig&lt;/code>&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Attribute&lt;/th>
&lt;th>Corresponding URL parameter&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Required&lt;/th>
&lt;th>Default Value&lt;/th>
&lt;th>Function&lt;/th>
&lt;th>Description&lt;/th>
&lt;th>Compatibility&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>id&lt;/td>
&lt;td>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>&lt;b>True&lt;/b>&lt;/td>
&lt;td>&lt;/td>
&lt;td>Configuration association&lt;/td>
&lt;td>Bean Id of the service reference&lt;/td>
&lt;td>Above 1.0.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>interface&lt;/td>
&lt;td>&lt;/td>
&lt;td>class&lt;/td>
&lt;td>&lt;b>True&lt;/b>&lt;/td>
&lt;td>&lt;/td>
&lt;td>Service discovery&lt;/td>
&lt;td>Interface name of the service&lt;/td>
&lt;td>Above 1.0.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>version&lt;/td>
&lt;td>version&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>&lt;/td>
&lt;td>Service discovery&lt;/td>
&lt;td>Service version, must be equal to the provider&amp;rsquo;s version&lt;/td>
&lt;td>Above 1.0.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>group&lt;/td>
&lt;td>group&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>&lt;/td>
&lt;td>Service discovery&lt;/td>
&lt;td>The group of the service reference, must be equal to the provider&amp;rsquo;s group. It can distinguish services when it has multiple implements.&lt;/td>
&lt;td>Above 1.0.7&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>timeout&lt;/td>
&lt;td>timeout&lt;/td>
&lt;td>long&lt;/td>
&lt;td>False&lt;/td>
&lt;td>By default, use &amp;lt;dubbo:consumer&amp;gt; timeout&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>The RPC timeout(ms)&lt;/td>
&lt;td>Above 1.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>retries&lt;/td>
&lt;td>retries&lt;/td>
&lt;td>int&lt;/td>
&lt;td>False&lt;/td>
&lt;td>By default, use &amp;lt;dubbo:consumer&amp;gt; retries&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>The retry count for RPC, not including the first invoke. Please set it to 0 if don&amp;rsquo;t need to retry.&lt;/td>
&lt;td>Above 2.0.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>connections&lt;/td>
&lt;td>connections&lt;/td>
&lt;td>int&lt;/td>
&lt;td>False&lt;/td>
&lt;td>By default, use &amp;lt;dubbo:consumer&amp;gt; connections&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>The maximum connections of every provider. For short connection such as rmi, http and hessian, it&amp;rsquo;s connection limit, but for long connection such as dubbo, it&amp;rsquo;s connection count.&lt;/td>
&lt;td>Above 2.0.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>loadbalance&lt;/td>
&lt;td>loadbalance&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>By default, use &amp;lt;dubbo:consumer&amp;gt; loadbalance&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>Strategy of load balance, &lt;code>random&lt;/code>, &lt;code>roundrobin&lt;/code> and &lt;code>leastactive&lt;/code> are available.&lt;/td>
&lt;td>Above 2.0.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>async&lt;/td>
&lt;td>async&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>False&lt;/td>
&lt;td>By default, use &amp;lt;dubbo:consumer&amp;gt; async&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>Asynchronous execution, not reliable. It does not block the execution thread just only ignores the return value.&lt;/td>
&lt;td>Above 2.0.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>generic&lt;/td>
&lt;td>generic&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>False&lt;/td>
&lt;td>By default, use &amp;lt;dubbo:consumer&amp;gt; generic&lt;/td>
&lt;td>Service governance&lt;/td>
&lt;td>Enable generic interface. If true, the reference will return &lt;code>GenericService&lt;/code>&lt;/td>
&lt;td>Above 2.0.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>check&lt;/td>
&lt;td>check&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>False&lt;/td>
&lt;td>By default, use &amp;lt;dubbo:consumer&amp;gt; check&lt;/td>
&lt;td>Service governance&lt;/td>
&lt;td>Check the exist of the provider. If true, it will throw exception when provider is not exist. If false, will ignore.&lt;/td>
&lt;td>Above 2.0.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>url&lt;/td>
&lt;td>url&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>&lt;/td>
&lt;td>Service governance&lt;/td>
&lt;td>Connect to the provider directly via this url. It will bypass the registry.&lt;/td>
&lt;td>Above 1.0.6&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>stub&lt;/td>
&lt;td>stub&lt;/td>
&lt;td>class/boolean&lt;/td>
&lt;td>False&lt;/td>
&lt;td>&lt;/td>
&lt;td>Service governance&lt;/td>
&lt;td>The local proxy class name of the client, it&amp;rsquo;s used to execute local logic such as caching. The proxy class must have a constructor with the remote proxy object as a parameter, such as &lt;code>public XxxServiceLocal(XxxService xxxService)&lt;/code>&lt;/td>
&lt;td>Above 2.0.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>mock&lt;/td>
&lt;td>mock&lt;/td>
&lt;td>class/boolean&lt;/td>
&lt;td>False&lt;/td>
&lt;td>&lt;/td>
&lt;td>Service governance&lt;/td>
&lt;td>The mock class name. It&amp;rsquo;s called when the RPC is failed, such as timeout or IO exception. The mock class must carry a none parameter constructor. The difference between mock and local proxy is that local proxy is always invoked before RPC but mock is invoked only when exception after RPC.&lt;/td>
&lt;td>Above 1.0.13&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>cache&lt;/td>
&lt;td>cache&lt;/td>
&lt;td>string/boolean&lt;/td>
&lt;td>False&lt;/td>
&lt;td>&lt;/td>
&lt;td>Service governance&lt;/td>
&lt;td>lru, threadlocal, jcache等Using RPC parameters as the key to cache the result. &lt;code>lru&lt;/code>, &lt;code>threadlocal&lt;/code> and &lt;code>jcache&lt;/code> are available.&lt;/td>
&lt;td>Above 2.1.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>validation&lt;/td>
&lt;td>validation&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>False&lt;/td>
&lt;td>&lt;/td>
&lt;td>Service governance&lt;/td>
&lt;td>Enable JSR303 annotation validation. If true, it will validate the method parameters&amp;rsquo; annotations.&lt;/td>
&lt;td>Above 2.1.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>proxy&lt;/td>
&lt;td>proxy&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>False&lt;/td>
&lt;td>javassist&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>The proxy implement, jdk/javassist are available.&lt;/td>
&lt;td>Above 2.0.2&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>client&lt;/td>
&lt;td>client&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>The transport type of the client, such as netty and mina for dubbo protocol.&lt;/td>
&lt;td>Above 2.0.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>registry&lt;/td>
&lt;td>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>By default, it will merge all the service providers that getting from all registries&lt;/td>
&lt;td>Configuration association&lt;/td>
&lt;td>Get provider lists from the specified registry. It is the &lt;code>id&lt;/code> value of the &amp;lt;dubbo:registry&amp;gt;, use &lt;code>,&lt;/code> to separate multiple regsitries id.&lt;/td>
&lt;td>Above 2.0.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>owner&lt;/td>
&lt;td>owner&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>&lt;/td>
&lt;td>Service governance&lt;/td>
&lt;td>The owner of the service. It&amp;rsquo;s used for service governance.&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>actives&lt;/td>
&lt;td>actives&lt;/td>
&lt;td>int&lt;/td>
&lt;td>False&lt;/td>
&lt;td>0&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>The maximum concurrent calls per method per service of the consumer.&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>cluster&lt;/td>
&lt;td>cluster&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>failover&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>failover/failfast/failsafe/failback/forking are available.&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>filter&lt;/td>
&lt;td>reference.filter&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>default&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>The filter name of the RPC process of the reference, use &lt;code>,&lt;/code> to separate multiple filter names.&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>listener&lt;/td>
&lt;td>invoker.listener&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>default&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>The listener name of the reference, use &lt;code>,&lt;/code> to separate multiple listener names.&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>layer&lt;/td>
&lt;td>layer&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>&lt;/td>
&lt;td>Service governance&lt;/td>
&lt;td>The biz layer of the service provider, such as biz, dao, intl:web and china:acton.&lt;/td>
&lt;td>Above 2.0.7&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>init&lt;/td>
&lt;td>init&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>False&lt;/td>
&lt;td>false&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>If true, init the service reference when &lt;code>afterPropertiesSet()&lt;/code>is invoked, or it will init later only when it is referenced and autowired.&lt;/td>
&lt;td>Above 2.0.10&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>protocol&lt;/td>
&lt;td>protocol&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>&lt;/td>
&lt;td>Service governance&lt;/td>
&lt;td>Only invoke the providers with specified protocol, and ignore other protocol providers.&lt;/td>
&lt;td>Above 2.2.0&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table></description></item><item><title>Docs: dubbo:registry</title><link>https://dubbo.apache.org/en/docs/v2.7/user/references/xml/dubbo-registry/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/docs/v2.7/user/references/xml/dubbo-registry/</guid><description>
&lt;p>The configuration of the registry center. The corresponding class is &lt;code>org.apache.dubbo.config.RegistryConfig&lt;/code>. If you have multiple different registries, you can declare multiple &lt;code>&amp;lt;dubbo:registry&amp;gt;&lt;/code> tags, and then reference specified registry with &lt;code>registry&lt;/code> property in &lt;code>&amp;lt;dubbo:service&amp;gt;&lt;/code> or &lt;code>&amp;lt;dubbo:reference&amp;gt;&lt;/code> tag.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Attribute&lt;/th>
&lt;th>Corresponding URL parameter&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Required&lt;/th>
&lt;th>Default Value&lt;/th>
&lt;th>Function&lt;/th>
&lt;th>Description&lt;/th>
&lt;th>Compatibility&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>id&lt;/td>
&lt;td>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>&lt;/td>
&lt;td>Configuration association&lt;/td>
&lt;td>Bean Id of the registry center, can be referenced in &amp;lt;dubbo:service registry=&amp;quot;&amp;quot;&amp;gt;or &amp;lt;dubbo:reference registry=&amp;quot;&amp;quot;&amp;gt;&lt;/td>
&lt;td>Above 1.0.16&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>address&lt;/td>
&lt;td>&amp;lt;host:port&amp;gt;&lt;/td>
&lt;td>string&lt;/td>
&lt;td>&lt;b>True&lt;/b>&lt;/td>
&lt;td>&lt;/td>
&lt;td>Service discovery&lt;/td>
&lt;td>The address of the registry center. If the address has no port, default port 9999 will be adopted. Multiple addresses within the same cluster use &lt;code>,&lt;/code> to seperate, such as &lt;code>ip:port,ip:port&lt;/code>. Multiple registries within different cluster, please configure different &lt;code>dubbo:registry&lt;/code> tag.&lt;/td>
&lt;td>Above 1.0.16&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>protocol&lt;/td>
&lt;td>&amp;lt;protocol&amp;gt;&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>dubbo&lt;/td>
&lt;td>Service discovery&lt;/td>
&lt;td>The protocol of the registry center. &lt;code>dubbo&lt;/code>, &lt;code>multicast&lt;/code>, &lt;code>zookeeper&lt;/code>, &lt;code>redis&lt;/code>, &lt;code>consul(2.7.1)&lt;/code>, &lt;code>sofa(2.7.2)&lt;/code>, &lt;code>etcd(2.7.2)&lt;/code>, &lt;code>nacos(2.7.2)&lt;/code> are available.&lt;/td>
&lt;td>Above 2.0.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>port&lt;/td>
&lt;td>&amp;lt;port&amp;gt;&lt;/td>
&lt;td>int&lt;/td>
&lt;td>False&lt;/td>
&lt;td>9090&lt;/td>
&lt;td>Service discovery&lt;/td>
&lt;td>The default port of the registry. When the &lt;code>address&lt;/code> has no port, this default port will be adopted.&lt;/td>
&lt;td>Above 2.0.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>username&lt;/td>
&lt;td>&amp;lt;username&amp;gt;&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>&lt;/td>
&lt;td>Service governance&lt;/td>
&lt;td>The usename of the registry. Do not set it if the registry doesn&amp;rsquo;t need validation.&lt;/td>
&lt;td>Above 2.0.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>password&lt;/td>
&lt;td>&amp;lt;password&amp;gt;&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>&lt;/td>
&lt;td>Service governance&lt;/td>
&lt;td>The password of the registry. Do not set it if the registry doesn&amp;rsquo;t need validation.&lt;/td>
&lt;td>Above 2.0.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>transport&lt;/td>
&lt;td>registry.transporter&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>netty&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>mina, netty are available.&lt;/td>
&lt;td>Above 2.0.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>timeout&lt;/td>
&lt;td>registry.timeout&lt;/td>
&lt;td>int&lt;/td>
&lt;td>False&lt;/td>
&lt;td>5000&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>The timeout(ms) of the request to registry.&lt;/td>
&lt;td>Above 2.0.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>session&lt;/td>
&lt;td>registry.session&lt;/td>
&lt;td>int&lt;/td>
&lt;td>False&lt;/td>
&lt;td>60000&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>The session timeout(ms) of the registry. It&amp;rsquo;s used to check whether the providers are alive. It depends on the implement of the registry. For example, for HeartBeat implement, the timeout is the interval of two heart beats.&lt;/td>
&lt;td>Above 2.1.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>file&lt;/td>
&lt;td>registry.file&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>&lt;/td>
&lt;td>Service governance&lt;/td>
&lt;td>The local file to cache the address list of registries and providers. When application restarts, it will restore the registries and providers. Please use different file for different registy.&lt;/td>
&lt;td>Above 2.0.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>wait&lt;/td>
&lt;td>registry.wait&lt;/td>
&lt;td>int&lt;/td>
&lt;td>False&lt;/td>
&lt;td>0&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>Stop wait for a notice completion time (ms)&lt;/td>
&lt;td>Above 2.0.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>check&lt;/td>
&lt;td>check&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>False&lt;/td>
&lt;td>true&lt;/td>
&lt;td>Service governance&lt;/td>
&lt;td>Whether throwing exception while the registry isn&amp;rsquo;t existed.&lt;/td>
&lt;td>Above 2.0.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>register&lt;/td>
&lt;td>register&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>False&lt;/td>
&lt;td>true&lt;/td>
&lt;td>Service governance&lt;/td>
&lt;td>whether registering to the registry center. If false, just subscribing, not registering.&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>subscribe&lt;/td>
&lt;td>subscribe&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>False&lt;/td>
&lt;td>true&lt;/td>
&lt;td>Service governance&lt;/td>
&lt;td>whether subscribing from the registry center. If false, just registering, not subscribing.&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>dynamic&lt;/td>
&lt;td>dynamic&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>False&lt;/td>
&lt;td>true&lt;/td>
&lt;td>Service governance&lt;/td>
&lt;td>Whether the service is registered dynamically. If false, services will be showed as &lt;code>disable&lt;/code>, you need to enable it manually. And you also need to disable it when provider shut down.&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>group&lt;/td>
&lt;td>group&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>dubbo&lt;/td>
&lt;td>Service governance&lt;/td>
&lt;td>Service registration grouping, cross-group services will not affect each other, and can not be called each other, suitable for environmental isolation.&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>simplified&lt;/td>
&lt;td>simplified&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>False&lt;/td>
&lt;td>false&lt;/td>
&lt;td>Service governance&lt;/td>
&lt;td>Registered with the registry URL whether to adopt the lean mode (compatible with low version)&lt;/td>
&lt;td>Above 2.7.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>extra-keys&lt;/td>
&lt;td>extraKeys&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>&lt;/td>
&lt;td>Service governance&lt;/td>
&lt;td>In simplified = true, extraKeys allows you to outside the default arguments put additional key in the URL, format: &amp;ldquo;interface, key1, key2&amp;rdquo;.&lt;/td>
&lt;td>Above 2.7.0&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table></description></item><item><title>Docs: dubbo:service</title><link>https://dubbo.apache.org/en/docs/v2.7/user/references/xml/dubbo-service/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/docs/v2.7/user/references/xml/dubbo-service/</guid><description>
&lt;p>The configuration of the service provider. The corresponding class is &lt;code>org.apache.dubbo.config.ServiceConfig&lt;/code>.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Attribute&lt;/th>
&lt;th>Corresponding URL parameter&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Required&lt;/th>
&lt;th>Default Value&lt;/th>
&lt;th>Function&lt;/th>
&lt;th>Description&lt;/th>
&lt;th>Compatibility&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>interface&lt;/td>
&lt;td>&lt;/td>
&lt;td>class&lt;/td>
&lt;td>&lt;b>True&lt;/b>&lt;/td>
&lt;td>&lt;/td>
&lt;td>Service discovery&lt;/td>
&lt;td>The service interface name&lt;/td>
&lt;td>Above 1.0.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>ref&lt;/td>
&lt;td>&lt;/td>
&lt;td>object&lt;/td>
&lt;td>&lt;b>True&lt;/b>&lt;/td>
&lt;td>&lt;/td>
&lt;td>Service discovery&lt;/td>
&lt;td>The reference to the service implementation&lt;/td>
&lt;td>Above 1.0.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>version&lt;/td>
&lt;td>version&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>0.0.0&lt;/td>
&lt;td>Service discovery&lt;/td>
&lt;td>Service version. It&amp;rsquo;s recommended to use 2 digitals such as &lt;code>1.0&lt;/code>. It&amp;rsquo;s necessary to upgrade version only when the service is not compatible.&lt;/td>
&lt;td>Above 1.0.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>group&lt;/td>
&lt;td>group&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>&lt;/td>
&lt;td>Service discovery&lt;/td>
&lt;td>The group of the service providers. It can distinguish services when it has multiple implements.&lt;/td>
&lt;td>Above 1.0.7&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>path&lt;/td>
&lt;td>&amp;lt;path&amp;gt;&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>default value is the interface name&lt;/td>
&lt;td>Service discovery&lt;/td>
&lt;td>In 1.0, service path is not supported, it&amp;rsquo;s always equals to the interface name. So it may not compitable when a service reference in 1.0 calls a service provider in 2.0 that specified path.&lt;/td>
&lt;td>Above 1.0.12&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>delay&lt;/td>
&lt;td>delay&lt;/td>
&lt;td>int&lt;/td>
&lt;td>False&lt;/td>
&lt;td>0&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>The delay time(ms) for registering services. When set to -1, it indicates that the services will expose to registry after the Spring context is initialized&lt;/td>
&lt;td>Above 1.0.14&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>timeout&lt;/td>
&lt;td>timeout&lt;/td>
&lt;td>int&lt;/td>
&lt;td>False&lt;/td>
&lt;td>1000&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>The RPC timeout(ms)&lt;/td>
&lt;td>Above 2.0.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>retries&lt;/td>
&lt;td>retries&lt;/td>
&lt;td>int&lt;/td>
&lt;td>False&lt;/td>
&lt;td>2&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>The retry count for RPC, not including the first invoke. Please set it to 0 if don&amp;rsquo;t need to retry.&lt;/td>
&lt;td>Above 2.0.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>connections&lt;/td>
&lt;td>connections&lt;/td>
&lt;td>int&lt;/td>
&lt;td>False&lt;/td>
&lt;td>100&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>The maximum connections of every provider. For short connection such as rmi, http and hessian, it&amp;rsquo;s connection limit, but for long connection such as dubbo, it&amp;rsquo;s connection count.&lt;/td>
&lt;td>Above 2.0.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>loadbalance&lt;/td>
&lt;td>loadbalance&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>random&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>Strategy of load balance, &lt;code>random&lt;/code>, &lt;code>roundrobin&lt;/code> and &lt;code>leastactive&lt;/code> are available.&lt;/td>
&lt;td>Above 2.0.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>async&lt;/td>
&lt;td>async&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>False&lt;/td>
&lt;td>false&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>Asynchronous execution, not reliable. It does not block the execution thread just only ignores the return value.&lt;/td>
&lt;td>Above 2.0.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>local&lt;/td>
&lt;td>local&lt;/td>
&lt;td>class/boolean&lt;/td>
&lt;td>False&lt;/td>
&lt;td>false&lt;/td>
&lt;td>Service governance&lt;/td>
&lt;td>&lt;code>true&lt;/code> means use the default proxy class name, which is the interface name with &lt;code>Local&lt;/code> as the suffix. But it has been marked as @Deprecated.Pleas see also stub.&lt;/td>
&lt;td>Above 2.0.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>stub&lt;/td>
&lt;td>stub&lt;/td>
&lt;td>class/boolean&lt;/td>
&lt;td>False&lt;/td>
&lt;td>false&lt;/td>
&lt;td>Service governance&lt;/td>
&lt;td>&lt;code>true&lt;/code> means use the default proxy class name, which is the interface name with &lt;code>Stub&lt;/code> as the suffix. It&amp;rsquo;s used to execute local logic such as caching. The proxy class must have a constructor with the remote proxy object as a parameter, such as &lt;code>public XxxServiceStub(XxxService xxxService)&lt;/code>&lt;/td>
&lt;td>Above 2.0.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>mock&lt;/td>
&lt;td>mock&lt;/td>
&lt;td>class/boolean&lt;/td>
&lt;td>False&lt;/td>
&lt;td>false&lt;/td>
&lt;td>Service governance&lt;/td>
&lt;td>&lt;code>true&lt;/code> means use the default mock class name, which is the interface name with &lt;code>Mock&lt;/code> suffix. It&amp;rsquo;s called when the RPC is failed, such as timeout or IO exception. The mock class must carry a none parameter constructor. The difference between mock and local proxy is that local proxy is always invoked before RPC but mock is invoked only when exception after RPC.&lt;/td>
&lt;td>Above 2.0.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>token&lt;/td>
&lt;td>token&lt;/td>
&lt;td>string/boolean&lt;/td>
&lt;td>False&lt;/td>
&lt;td>false&lt;/td>
&lt;td>Service governance&lt;/td>
&lt;td>Enable token validation. Disable token if it&amp;rsquo;s null. It will generate token randomly when enable, or will use static token. The token is designed to prevent consumers from bypassing the registry direct access to provider. If you want peer to peer, token validation must disbable.&lt;/td>
&lt;td>Above 2.0.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>registry&lt;/td>
&lt;td>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>register to all registries by default&lt;/td>
&lt;td>Configuration association&lt;/td>
&lt;td>Register services to specified registry while having multiple registries. It is the &lt;code>id&lt;/code> value of the &amp;lt;dubbo:registry&amp;gt;. If don&amp;rsquo;t want to register to any registry, set it as &lt;code>N/A&lt;/code>&lt;/td>
&lt;td>Above 2.0.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>provider&lt;/td>
&lt;td>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>use the first configured provider&lt;/td>
&lt;td>Configuration association&lt;/td>
&lt;td>The reference to &lt;code>&amp;lt;dubbo:provider&amp;gt;&lt;/code>&lt;/td>
&lt;td>Above 2.0.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>deprecated&lt;/td>
&lt;td>deprecated&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>False&lt;/td>
&lt;td>false&lt;/td>
&lt;td>Service governance&lt;/td>
&lt;td>Mark the service is deprecated. If true, there will log an error log on the client side.&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>dynamic&lt;/td>
&lt;td>dynamic&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>False&lt;/td>
&lt;td>true&lt;/td>
&lt;td>Service governance&lt;/td>
&lt;td>Whether the service is registered dynamically. If false, services will be showed as &lt;code>disable&lt;/code>, you need to enable it manually. And you also need to disable it when provider shut down.&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>accesslog&lt;/td>
&lt;td>accesslog&lt;/td>
&lt;td>string/boolean&lt;/td>
&lt;td>False&lt;/td>
&lt;td>false&lt;/td>
&lt;td>Service governance&lt;/td>
&lt;td>&lt;code>true&lt;/code> will write access log to logger. Specifying it to a log path, you can write access logs to special log file.&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>owner&lt;/td>
&lt;td>owner&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>&lt;/td>
&lt;td>Service governance&lt;/td>
&lt;td>The owner of the service. It&amp;rsquo;s used for service governance.&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>document&lt;/td>
&lt;td>document&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>&lt;/td>
&lt;td>Service governance&lt;/td>
&lt;td>Service document URL&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>weight&lt;/td>
&lt;td>weight&lt;/td>
&lt;td>int&lt;/td>
&lt;td>False&lt;/td>
&lt;td>&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>The weight of the service&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>executes&lt;/td>
&lt;td>executes&lt;/td>
&lt;td>int&lt;/td>
&lt;td>False&lt;/td>
&lt;td>0&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>The maximum parallel execution request count per method per service for the provider.&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>proxy&lt;/td>
&lt;td>proxy&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>javassist&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>The proxy implement, jdk/javassist are available.&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>cluster&lt;/td>
&lt;td>cluster&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>failover&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>failover/failfast/failsafe/failback/forking are available.&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>filter&lt;/td>
&lt;td>service.filter&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>default&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>The filter name of the RPC process of the provider, use &lt;code>,&lt;/code> to separate multiple filter names.&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>listener&lt;/td>
&lt;td>exporter.listener&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>default&lt;/td>
&lt;td>Performance optimize&lt;/td>
&lt;td>The listener name of the provider, use &lt;code>,&lt;/code> to separate multiple listener names.&lt;/td>
&lt;td>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>protocol&lt;/td>
&lt;td>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>&lt;/td>
&lt;td>Configuration association&lt;/td>
&lt;td>Specify the protocol for service provider. It references the &lt;code>id&lt;/code> of &lt;code>&amp;lt;dubbo:protocol&amp;gt;&lt;/code> tag. Use &lt;code>,&lt;/code> to separate multiple protocols.&lt;/td>
&lt;td>Above 2.0.5&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>layer&lt;/td>
&lt;td>layer&lt;/td>
&lt;td>string&lt;/td>
&lt;td>False&lt;/td>
&lt;td>&lt;/td>
&lt;td>Service governance&lt;/td>
&lt;td>The biz layer of the service provider, such as biz, dao, intl:web and china:acton.&lt;/td>
&lt;td>Above 2.0.7&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>register&lt;/td>
&lt;td>register&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>False&lt;/td>
&lt;td>true&lt;/td>
&lt;td>Service governance&lt;/td>
&lt;td>Whether registering service providers to registry.&lt;/td>
&lt;td>Above 2.0.8&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table></description></item><item><title>Docs: Dubbo Admin Functions</title><link>https://dubbo.apache.org/en/docs/v2.7/admin/ops/functions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/docs/v2.7/admin/ops/functions/</guid><description>
&lt;h2 id="page-search">Page search&lt;/h2>
&lt;p>If you need to manage a Dubbo service, you need to search it first and open it&amp;rsquo;s management page&lt;/p>
&lt;p>&lt;img src="https://dubbo.apache.org/imgs/admin/dubbo-search.jpg" alt="/admin-guide/images/dubbo-search.png">&lt;/p>
&lt;h2 id="service-provider-page">Service provider page&lt;/h2>
&lt;p>&lt;img src="https://dubbo.apache.org/imgs/admin/dubbo-providers.jpg" alt="/admin-guide/images/dubbo-providers.png">&lt;/p>
&lt;h2 id="service-consumer-page">Service consumer page&lt;/h2>
&lt;p>&lt;img src="https://dubbo.apache.org/imgs/admin/dubbo-consumers.jpg" alt="/admin-guide/images/dubbo-consumers.png">&lt;/p>
&lt;h2 id="add-route-rule-page">Add route rule page&lt;/h2>
&lt;p>&lt;img src="https://dubbo.apache.org/imgs/admin/dubbo-add-route.jpg" alt="/admin-guide/images/dubbo-add-route.png">&lt;/p>
&lt;h2 id="add-dynamic-configuration-page">Add dynamic configuration page&lt;/h2>
&lt;p>&lt;img src="https://dubbo.apache.org/imgs/admin/dubbo-add-config.jpg" alt="/admin-guide/images/dubbo-add-config.png">&lt;/p></description></item><item><title>Docs3-V2: Group Aggregation</title><link>https://dubbo.apache.org/en/docs3-v2/java-sdk/advanced-features-and-usage/service/group-merger/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/docs3-v2/java-sdk/advanced-features-and-usage/service/group-merger/</guid><description>
&lt;h2 id="feature-description">Feature description&lt;/h2>
&lt;p>Aggregate the results by grouping and return the aggregated results, such as menu service, use group to distinguish multiple implementations of the same interface, now the consumer needs to call once from each group and return the result, and return the result after merging, so You can implement aggregated menu items.&lt;/p>
&lt;p>For relevant codes, please refer to &lt;a href="https://github.com/apache/dubbo-samples/tree/master/2-advanced/dubbo-samples-merge">Samples in the dubbo project&lt;/a>&lt;/p>
&lt;h2 id="scenes-to-be-used">scenes to be used&lt;/h2>
&lt;p>Service Grouping and Multiple Versions&lt;/p>
&lt;h2 id="how-to-use">How to use&lt;/h2>
&lt;h3 id="search-all-groups">Search all groups&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-xml" data-lang="xml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">&amp;lt;dubbo:reference&lt;/span> interface=&lt;span style="color:#2aa198">&amp;#34;com.xxx.MenuService&amp;#34;&lt;/span> group=&lt;span style="color:#2aa198">&amp;#34;*&amp;#34;&lt;/span> merger=&lt;span style="color:#2aa198">&amp;#34;true&amp;#34;&lt;/span> &lt;span style="color:#268bd2">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="merge-specified-groups">Merge specified groups&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-xml" data-lang="xml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">&amp;lt;dubbo:reference&lt;/span> interface=&lt;span style="color:#2aa198">&amp;#34;com.xxx.MenuService&amp;#34;&lt;/span> group=&lt;span style="color:#2aa198">&amp;#34;aaa,bbb&amp;#34;&lt;/span> merger=&lt;span style="color:#2aa198">&amp;#34;true&amp;#34;&lt;/span> &lt;span style="color:#268bd2">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="specify-method-merge">Specify method merge&lt;/h3>
&lt;p>Combine the results of the specified method, and other unspecified methods will only call one Group&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-xml" data-lang="xml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">&amp;lt;dubbo:reference&lt;/span> interface=&lt;span style="color:#2aa198">&amp;#34;com.xxx.MenuService&amp;#34;&lt;/span> group=&lt;span style="color:#2aa198">&amp;#34;*&amp;#34;&lt;/span>&lt;span style="color:#268bd2">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;dubbo:method&lt;/span> name=&lt;span style="color:#2aa198">&amp;#34;getMenuItems&amp;#34;&lt;/span> merger=&lt;span style="color:#2aa198">&amp;#34;true&amp;#34;&lt;/span> &lt;span style="color:#268bd2">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">&amp;lt;/dubbo:reference&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="a-method-is-not-merged">A method is not merged&lt;/h3>
&lt;p>One method does not combine results, others combine results&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-xml" data-lang="xml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">&amp;lt;dubbo:reference&lt;/span> interface=&lt;span style="color:#2aa198">&amp;#34;com.xxx.MenuService&amp;#34;&lt;/span> group=&lt;span style="color:#2aa198">&amp;#34;*&amp;#34;&lt;/span> merger=&lt;span style="color:#2aa198">&amp;#34;true&amp;#34;&lt;/span>&lt;span style="color:#268bd2">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;dubbo:method&lt;/span> name=&lt;span style="color:#2aa198">&amp;#34;getMenuItems&amp;#34;&lt;/span> merger=&lt;span style="color:#2aa198">&amp;#34;false&amp;#34;&lt;/span> &lt;span style="color:#268bd2">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">&amp;lt;/dubbo:reference&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="specify-merge-strategy">Specify merge strategy&lt;/h3>
&lt;p>Specify the merge strategy, the default is to automatically match according to the return value type, if there are two combiners of the same type, you need to specify the name of the combiner [Merge result extension](../../../reference-manual/spi/ description/merger)&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-xml" data-lang="xml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">&amp;lt;dubbo:reference&lt;/span> interface=&lt;span style="color:#2aa198">&amp;#34;com.xxx.MenuService&amp;#34;&lt;/span> group=&lt;span style="color:#2aa198">&amp;#34;*&amp;#34;&lt;/span>&lt;span style="color:#268bd2">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;dubbo:method&lt;/span> name=&lt;span style="color:#2aa198">&amp;#34;getMenuItems&amp;#34;&lt;/span> merger=&lt;span style="color:#2aa198">&amp;#34;mymerge&amp;#34;&lt;/span> &lt;span style="color:#268bd2">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">&amp;lt;/dubbo:reference&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="specify-merge-method">Specify merge method&lt;/h3>
&lt;p>Specify the merge method to merge the specified method that returns the result of the call. The parameter type of the merge method must be the return result type itself&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-xml" data-lang="xml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">&amp;lt;dubbo:reference&lt;/span> interface=&lt;span style="color:#2aa198">&amp;#34;com.xxx.MenuService&amp;#34;&lt;/span> group=&lt;span style="color:#2aa198">&amp;#34;*&amp;#34;&lt;/span>&lt;span style="color:#268bd2">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;lt;dubbo:method&lt;/span> name=&lt;span style="color:#2aa198">&amp;#34;getMenuItems&amp;#34;&lt;/span> merger=&lt;span style="color:#2aa198">&amp;#34;.addAll&amp;#34;&lt;/span> &lt;span style="color:#268bd2">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">&amp;lt;/dubbo:reference&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="hint">hint:&lt;/h4>
&lt;p>Supported since &lt;code>2.1.0&lt;/code> version&lt;/p></description></item><item><title>Docs: How to become a Dubbo committer</title><link>https://dubbo.apache.org/en/docs/contribution-guidelines/contributor/become-a-committer_dev/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/docs/contribution-guidelines/contributor/become-a-committer_dev/</guid><description>
&lt;p>Anyone can be a contributor to an Apache project. Being a contributor simply means that you take an interest in the project and contribute in some way, ranging from asking sensible questions (which documents the project and provides feedback to developers) through to providing new features as patches.&lt;/p>
&lt;p>If you become a valuable contributor to the project you may well be invited to become a committer. Committer is a term used at the ASF to signify someone who is committed to a particular project. It brings with it the privilege of write access to the project repository and resources.&lt;/p>
&lt;p>In Dubbo community, if a committer who have earned even more merit, can be invited to be a part of the Project Management Committee (PMC).&lt;/p>
&lt;p>One thing that is sometimes hard to understand when you are new to the open development process used at the ASF, is that we value the community more than the code. A strong and healthy community will be respectful and be a fun and rewarding place. More importantly, a diverse and healthy community can continue to support the code over the longer term, even as individual companies come and go from the field.&lt;/p>
&lt;p>More details could be found &lt;a href="https://community.apache.org/contributors/">here&lt;/a>.&lt;/p>
&lt;h3 id="what-can-i-contribute">What can I contribute?&lt;/h3>
&lt;p>Please refer to the &lt;a href="https://dubbo.apache.org/en/docs/contribution-guidelines/contributor/new-contributor-guide_dev">new contributor guide&lt;/a>.&lt;/p></description></item><item><title>Docs3-V2: Install Dubbo-go development environment</title><link>https://dubbo.apache.org/en/docs3-v2/golang-sdk/quickstart/install/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/docs3-v2/golang-sdk/quickstart/install/</guid><description>
&lt;h3 id="1-install-the-go-language-environment">1. Install the Go language environment&lt;/h3>
&lt;p>It is recommended to use the latest version of go 1.17&lt;/p>
&lt;p>go version &amp;gt;= go 1.15&lt;/p>
&lt;p>&lt;a href="https://golang.google.cn/">[Go language official website download address]&lt;/a>&lt;/p>
&lt;p>Add $GOPATH/bin to environment variable&lt;/p>
&lt;h3 id="2-install-the-serialization-tool-protoc">2. Install the serialization tool protoc&lt;/h3>
&lt;p>&lt;a href="https://github.com/protocolbuffers/protobuf/releases">[protoc download address]&lt;/a>&lt;/p>
&lt;h3 id="3-install-dubbogo-cli-and-related-plugins">3. Install dubbogo-cli and related plugins&lt;/h3>
&lt;p>Execute the following command to install dubbogo-cli to $GOPATH/bin&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>$ &lt;span style="color:#b58900">export&lt;/span> &lt;span style="color:#268bd2">GOPROXY&lt;/span>&lt;span style="color:#719e07">=&lt;/span>&lt;span style="color:#2aa198">&amp;#34;https://goproxy.cn&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$ go install github.com/dubbogo/dubbogo-cli@latest
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$ dubbogo-cli
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>hello
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Install dependent tool plugins&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>$ dubbogo-cli install all
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Make sure the tools installed above are located in the system environment variables&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>$ protoc --version
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>libprotoc 3.14.0
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$ protoc-gen-go --version
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>protoc-gen-go v1.26.0
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$ protoc-gen-go-triple --version
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>protoc-gen-go-triple 1.0.8
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Latest: Introduction</title><link>https://dubbo.apache.org/en/latest/facade-docs/what/overview/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/latest/facade-docs/what/overview/</guid><description/></item><item><title>Overview: Introduction to Dubbo</title><link>https://dubbo.apache.org/en/overview/what/overview/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/overview/what/overview/</guid><description>
&lt;p>Apache Dubbo is an RPC service development framework, which is used to solve service governance and communication problems under the microservice architecture. It officially provides multi-language SDK implementations such as Java and Golang. Microservices developed using Dubbo are natively capable of remote address discovery and communication with each other.
Using the rich service governance features provided by Dubbo, service governance demands such as service discovery, load balancing, and traffic scheduling can be realized. Dubbo is designed to be highly scalable, and users can easily implement various custom logics for traffic interception and location selection.&lt;/p>
&lt;p>Dubbo3 is defined as a cloud-native-oriented next-generation RPC service framework. 3.0 has evolved based on Dubbo 2.x. While maintaining the original core features, Dubbo3 has improved in ease of use, ultra-large-scale microservice practice, cloud-native infrastructure adaptation, and security. Comprehensive upgrades have been made in several major directions, including ease of use, hyperscale microservice practices, cloud-native infrastructure adaptation, and security.&lt;/p>
&lt;h3 id="what-is-dubbo">What is Dubbo&lt;/h3>
&lt;p>Apache Dubbo was originally donated by Alibaba as an open source in 2008, and soon became the de facto standard framework for the selection of open source service frameworks in China, and has been widely used in various industries. In 2017, Dubbo officially donated to the Apache Software Foundation and became a top-level project of Apache. Currently, Dubbo3 is already a one-stop microservice solution providing:&lt;/p>
&lt;ul>
&lt;li>HTTP/2-based &lt;a href="https://dubbo.apache.org/en/docs3-v2/java-sdk/concepts-and-architecture/triple/">Triple protocol&lt;/a> and programming experience for proxy API.&lt;/li>
&lt;li>Powerful [traffic management capability] (../../tasks/traffic-management), such as address discovery, load balancing, routing address selection, dynamic configuration, etc.&lt;/li>
&lt;li>&lt;a href="../../mannual/">Multi-language SDK implementation&lt;/a>, covering Java, Golang, Javascript, etc. More language implementations will be released in succession.&lt;/li>
&lt;li>Flexible adaptation and expansion capabilities, which can be easily adapted to other components of the microservice system such as Tracing and Transaction.&lt;/li>
&lt;li>&lt;a href="https://dubbo.apache.org/en/docs3-v2/java-sdk/concepts-and-architecture/mesh/">Dubbo Mesh Solution&lt;/a>, while supporting flexible Mesh deployment solutions such as Sidecar and Proxyless.&lt;/li>
&lt;/ul>
&lt;p>The overall architecture of Apache Dubbo can well meet the large-scale microservice practice of enterprises, because it is designed to solve the practical problems of ultra-large-scale microservice clusters from the beginning, whether it is Alibaba, ICBC, China Ping An, Ctrip and other community users, They have fully verified the stability and performance of Dubbo through years of large-scale production environment traffic. Therefore, Dubbo has unparalleled advantages in solving business landing and large-scale practice:&lt;/p>
&lt;ul>
&lt;li>out of the box
&lt;ul>
&lt;li>High ease of use, such as the interface-oriented proxy feature of the Java version can realize local transparent calls&lt;/li>
&lt;li>Rich in functions, most of the microservice governance capabilities can be realized based on native libraries or lightweight extensions&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Designed for ultra-large-scale microservice clusters
&lt;ul>
&lt;li>Extreme performance, high-performance RPC communication protocol design and implementation&lt;/li>
&lt;li>Horizontally scalable, easily supporting address discovery and traffic management of millions of cluster instances&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="../extensibility">highly extensible&lt;/a>
&lt;ul>
&lt;li>Interception and extension of traffic and protocols during calling, such as Filter, Router, LB, etc.&lt;/li>
&lt;li>Extension of microservice governance components, such as Registry, Config Center, Metadata Center, etc.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Enterprise-level microservice governance capabilities
&lt;ul>
&lt;li>The de facto standard service framework supported by domestic public cloud vendors&lt;/li>
&lt;li>Years of enterprise practical experience test&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="dubbo-basic-workflow">Dubbo basic workflow&lt;/h3>
&lt;p>&lt;img src="https://dubbo.apache.org/imgs/v3/concepts/rpc.png" alt="dubbo-rpc">&lt;/p>
&lt;p>First of all, Dubbo is an RPC framework, which defines its own RPC communication protocol and programming method. As shown in the figure above, when using Dubbo, users first need to define the Dubbo service; secondly, after deploying the Dubbo service online, rely on Dubbo&amp;rsquo;s application layer communication protocol to realize data exchange, and the data transmitted by Dubbo must be serialized. And here the serialization protocol is fully extensible.
The first step in using Dubbo is to define Dubbo services. The definition of services in Dubbo is a set of methods to complete business functions. You can choose to define them in a way that is bound to a certain language. For example, in Java, Dubbo services have a set of The Interface interface of the method can also use the language-neutral Protobuf Buffers &lt;a href="../../tasks/triple/idl/">IDL definition service&lt;/a>. After the service is defined, the server (Provider) needs to provide a specific implementation of the service and declare it as a Dubbo service. From the perspective of the service consumer (Consumer), a service proxy can be obtained by calling the API provided by the Dubbo framework ( stub) object, and then you can call the service method like a local service.
After the consumer initiates a call to the service method, the Dubbo framework is responsible for sending the request to the service provider deployed on the remote machine. After receiving the request, the provider will call the implementation class of the service, and then return the processing result to the consumer. This completes a complete service call. The data flow of Request and Response in the figure is shown.&lt;/p>
&lt;blockquote>
&lt;p>It should be noted that in Dubbo, when we refer to services, we usually refer to RPC-grained interfaces or methods that provide the function of adding, deleting, and modifying a specific business, which is not the same as the services generally referred to in some microservice concept books concept.&lt;/p>
&lt;/blockquote>
&lt;p>In a distributed system, especially with the development of the microservice architecture, the deployment, release, and scaling of applications become extremely frequent. As an RPC consumer, how to dynamically discover the address of the service provider becomes a precondition for RPC communication . Dubbo provides an automatic address discovery mechanism to deal with the dynamic migration of machine instances in distributed scenarios. As shown in the figure below, the address of the provider and the consumer is coordinated by introducing the registration center. After the provider starts, it registers its own address with the registration center, and the consumer dynamically perceives the address list of the provider by pulling or subscribing to a specific node in the registration center. Variety.&lt;/p>
&lt;p>&lt;img src="https://dubbo.apache.org/imgs/architecture.png" alt="arch-service-discovery">&lt;/p>
&lt;h3 id="dubbo-core-features">Dubbo core features&lt;/h3>
&lt;h4 id="high-performance-rpc-communication-protocol">High performance RPC communication protocol&lt;/h4>
&lt;p>Service communication across processes or hosts is a basic capability of Dubbo. Dubbo RPC sends the request data (Request) to the backend service in a predefined protocol encoding method, and receives the calculation result (Response) returned by the server. RPC communication is completely transparent to the user, and the user does not need to care about how and where the request is sent, and only needs to get the correct call result for each call. In addition to the Request-Response communication model in synchronous mode, Dubbo3 also provides a richer selection of communication models:&lt;/p>
&lt;ul>
&lt;li>Consumer side asynchronous request (Client Side Asynchronous Request-Response)&lt;/li>
&lt;li>Provider side asynchronous execution (Server Side Asynchronous Request-Response)&lt;/li>
&lt;li>Consumer request stream (Request Streaming)&lt;/li>
&lt;li>Provider response stream (Response Streaming)&lt;/li>
&lt;li>Bidirectional Streaming&lt;/li>
&lt;/ul>
&lt;p>For details, please refer to the list of optional protocols implemented by each language SDK or &lt;a href="https://dubbo.apache.org/en/docs3-v2/java-sdk/concepts-and-architecture/triple/">Triple Protocol&lt;/a>&lt;/p>
&lt;h4 id="automatic-service-address-discovery">Automatic service (address) discovery&lt;/h4>
&lt;p>Dubbo&amp;rsquo;s service discovery mechanism allows microservice components to evolve independently and be deployed arbitrarily, and the consumer can complete communication without knowing the deployment location and IP address of the peer. Dubbo provides a Client-Based service discovery mechanism, and users can enable service discovery in various ways:&lt;/p>
&lt;ul>
&lt;li>Use independent registry components, such as &lt;a href="https://nacos.io/">Nacos&lt;/a>, Zookeeper, Consul, Etcd, etc.&lt;/li>
&lt;li>Leave the organization and registration of services to the underlying container platform, such as Kubernetes, which is understood to be a more cloud-native usage&lt;/li>
&lt;/ul>
&lt;h4 id="run-state-traffic-control">Run state traffic control&lt;/h4>
&lt;p>Transparent address discovery allows Dubbo requests to be sent to any IP instance, and traffic is randomly allocated during this process. When richer and finer-grained control of traffic is required, Dubbo&amp;rsquo;s traffic control strategy can be used. Dubbo provides strategies including load balancing, traffic routing, request timeout, traffic degradation, retry, etc., based on these basic capabilities You can easily implement more scenario-based routing solutions, including canary release, A/B testing, weight routing, same-region priority, etc. What&amp;rsquo;s even cooler is that Dubbo supports traffic control policies to take effect dynamically in the running state without redeployment . For details, please refer to:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="../../tasks/traffic-management">Traffic management example&lt;/a>&lt;/li>
&lt;/ul>
&lt;h4 id="rich-extension-components-and-ecology">Rich extension components and ecology&lt;/h4>
&lt;p>Dubbo&amp;rsquo;s powerful service governance capabilities are not only reflected in the core framework, but also include its excellent expansion capabilities and the support of surrounding supporting facilities. Through the definition of extension points that exist in almost every key process, such as Filter, Router, and Protocol, we can enrich Dubbo&amp;rsquo;s functions or realize the connection with other microservice supporting systems, including Transaction and Tracing. Currently, there are implementations that extend through SPI For details, please refer to the details of Dubbo extensibility, and you can also find more extension implementations in the &lt;a href="https://github.com/apache/dubbo-spi-extensions">apache/dubbo-spi-extensions&lt;/a> project. For details, please refer to:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="../../what/ecosystem">Dubbo Ecosystem&lt;/a>&lt;/li>
&lt;li>&lt;a href="../../what/extensibility">Dubbo Extensibility Design&lt;/a>&lt;/li>
&lt;/ul>
&lt;h4 id="cloud-native-design">Cloud Native Design&lt;/h4>
&lt;p>Dubbo is designed to fully follow the development concept of cloud-native microservices, which is reflected in many aspects. First, it supports cloud-native infrastructure and deployment architecture, including containers, Kubernetes, etc. The overall solution of Dubbo Mesh is also in version 3.1 Official release; on the other hand, many core components of Dubbo have been upgraded for cloud native, including Triple protocol, unified routing rules, and support for multiple languages.&lt;/p>
&lt;p>It is worth mentioning that how to use Dubbo to support elastic scaling services such as Serverless is also planned in the future, including using Native Image to improve Dubbo&amp;rsquo;s startup speed and resource consumption.&lt;/p>
&lt;p>Combined with the current version, this section mainly expands Dubbo&amp;rsquo;s cloud-native features from the following two points&lt;/p>
&lt;ul>
&lt;li>&lt;a href="../../tasks/kubernetes/deploy-on-k8s">Container Scheduling Platform (Kubernetes)&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://dubbo.apache.org/en/docs3-v2/java-sdk/concepts-and-architecture/mesh/">Dubbo Mesh&lt;/a>&lt;/li>
&lt;/ul>
&lt;h5 id="kubernetes">Kubernetes&lt;/h5>
&lt;p>For Dubbo microservices to support Kubernetes platform scheduling, the most basic thing is to realize the alignment of the dubbo service life cycle and the container life cycle, which includes life cycle events such as Dubbo startup, destruction, and service registration. Compared with the past where Dubbo defined life cycle events by itself and required developers to abide by the agreement during operation and maintenance practice, the underlying infrastructure of Kubernetes defines strict component life cycle events (probes), and instead requires Dubbo to adapt according to the agreement.&lt;/p>
&lt;p>Kubernetes Service is another level of adaptation, which reflects the trend of service definition and registration sinking to the cloud-native underlying infrastructure. In this mode, users no longer need to build additional registry components, Dubbo consumer end nodes can automatically connect to Kubernetes (API-Server or DNS), and query the instance list (Kubernetes endpoints) according to the service name (Kubernetes Service Name) . At this point, the service is defined through the standard Kubernetes Service API and dispatched to each node.&lt;/p>
&lt;h5 id="dubbo-mesh">Dubbo Mesh&lt;/h5>
&lt;p>Service Mesh has been widely disseminated and recognized in the industry, and is considered to be the next-generation microservice architecture, mainly because it solves many difficult problems, including transparent upgrades, multilingualism, dependency conflicts, and traffic management. The typical architecture of Service Mesh is to intercept all egress and ingress traffic by deploying independent Sidecar components, and integrate rich traffic management strategies such as load balancing and routing in Sidecar. In addition, Service Mesh also requires a control plane (Control Panel) to realize the control of Sidecar traffic, that is, to issue various policies. We call this architecture here Classic Mesh.&lt;/p>
&lt;p>However, no technical architecture is perfect, and classic Mesh also faces the problem of high cost at the implementation level&lt;/p>
&lt;ol>
&lt;li>Operation and maintenance control panel (Control Panel) is required&lt;/li>
&lt;li>Need to operate and maintain Sidecar&lt;/li>
&lt;li>Need to consider how to migrate from the original SDK to Sidecar&lt;/li>
&lt;li>It is necessary to consider the performance loss of the entire link after introducing Sidecar&lt;/li>
&lt;/ol>
&lt;p>In order to solve the related cost problems introduced by Sidecar, Dubbo introduced and implemented a new Proxyless Mesh architecture. As the name suggests, Proxyless Mesh refers to the deployment without Sidecar, and the Dubbo SDK directly interacts with the control plane. The architecture diagram is as follows&lt;/p>
&lt;p>&lt;img src="https://dubbo.apache.org/imgs/v3/mesh/dubbo-proxyless.png" alt="dubbo-proxyless">&lt;/p>
&lt;p>It can be imagined that in different organizations and different development stages, microservices built with Dubbo will allow three deployment architectures in the future: traditional SDK, Sidecar-based Service Mesh, and Proxyless Mesh without Sidecar. Based on Sidecar&amp;rsquo;s Service Mesh, that is, the classic Mesh architecture, the independent sidecar runtime takes over all the traffic, separate from the Sidecar&amp;rsquo;s Proxyless Mesh, and the secondary SDK directly communicates with the control plane through xDS. Dubbo microservices allow deployment on physical machines, containers, and Kubernetes platforms, and can use Admin as the control plane and manage them with unified traffic governance rules.&lt;/p></description></item><item><title>Docs3-V2: Introduction to Configuration Center</title><link>https://dubbo.apache.org/en/docs3-v2/golang-sdk/tutorial/develop/config-center/desc/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/docs3-v2/golang-sdk/tutorial/develop/config-center/desc/</guid><description/></item><item><title>Overview: Java SDK</title><link>https://dubbo.apache.org/en/overview/mannual/java/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/overview/mannual/java/</guid><description/></item></channel></rss>