<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Ecosystem Integration on Apache Dubbo</title><link>https://deploy-preview-3203--dubbo.netlify.app/en/blog/integration/</link><description>Recent content in Ecosystem Integration on Apache Dubbo</description><generator>Hugo</generator><language>en</language><atom:link href="https://deploy-preview-3203--dubbo.netlify.app/en/blog/integration/index.xml" rel="self" type="application/rss+xml"/><item><title>Use Apache APISIX to Proxy Dubbo Services (Triple Protocol)</title><link>https://deploy-preview-3203--dubbo.netlify.app/en/blog/2024/04/22/use-apache-apisix-to-proxy-dubbo-services-triple-protocol/</link><pubDate>Mon, 22 Apr 2024 00:00:00 +0000</pubDate><guid>https://deploy-preview-3203--dubbo.netlify.app/en/blog/2024/04/22/use-apache-apisix-to-proxy-dubbo-services-triple-protocol/</guid><description>&lt;p>For a description of how to proxy triple protocol services with a gateway, please refer to the section on &lt;a href="https://deploy-preview-3203--dubbo.netlify.app/en/overview/mannual/java-sdk/tasks/gateway/triple/">HTTP Gateway Access&lt;/a>.&lt;/p>
&lt;p>This article demonstrates how to use the combination of &lt;code>Apache APISIX + triple protocol + Nacos registry&lt;/code> to proxy Dubbo services.&lt;/p>
&lt;h2 id="sample-application-description">Sample Application Description&lt;/h2>
&lt;p>The complete source code and deployment resource files for this example can be found at &lt;a href="https://github.com/apache/dubbo-samples/tree/master/2-advanced/dubbo-samples-gateway/dubbo-samples-gateway-apisix/dubbo-samples-gateway-apisix-triple">dubbo-samples-gateway-triple-apisix&lt;/a>, with the architecture diagram as follows:&lt;/p>
&lt;img style="max-width:800px;height:auto;" src="https://deploy-preview-3203--dubbo.netlify.app/imgs/v3/tasks/gateway/apisix-nacos-dubbo.png"/>
&lt;p>In this example, a triple service &lt;code>org.apache.dubbo.samples.gateway.apisix.DemoService&lt;/code> has been defined and published, with the interface defined as:&lt;/p></description></item><item><title>Using Apache APISIX to Proxy Dubbo Services (Dubbo Protocol)</title><link>https://deploy-preview-3203--dubbo.netlify.app/en/blog/2024/04/25/using-apache-apisix-to-proxy-dubbo-services-dubbo-protocol/</link><pubDate>Thu, 25 Apr 2024 00:00:00 +0000</pubDate><guid>https://deploy-preview-3203--dubbo.netlify.app/en/blog/2024/04/25/using-apache-apisix-to-proxy-dubbo-services-dubbo-protocol/</guid><description>&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Note&lt;/h4>

 This article is only applicable to the Dubbo protocol communication scenario. If you are a Dubbo3 user, it is recommended to use the triple protocol. Please refer to &lt;a href="https://deploy-preview-3203--dubbo.netlify.app/en/blog/2024/04/22/use-apache-apisix-to-proxy-dubbo-services-triple-protocol/">Using Apache APISIX to Proxy Dubbo Services (Triple Protocol)&lt;/a> for specific examples.

&lt;/div>

&lt;p>&lt;a href="https://apisix.apache.org/">Apache APISIX&lt;/a> is a top-level open-source project of the Apache Software Foundation and the most active open-source gateway project currently. As a dynamic, real-time, high-performance open-source API gateway, Apache APISIX provides rich traffic management features such as load balancing, dynamic upstream, gray release, service circuit breaking, authentication, and observability.&lt;/p></description></item><item><title>How to Proxy Dubbo Services via Higress Gateway</title><link>https://deploy-preview-3203--dubbo.netlify.app/en/blog/2024/04/01/how-to-proxy-dubbo-services-via-higress-gateway/</link><pubDate>Mon, 01 Apr 2024 00:00:00 +0000</pubDate><guid>https://deploy-preview-3203--dubbo.netlify.app/en/blog/2024/04/01/how-to-proxy-dubbo-services-via-higress-gateway/</guid><description>&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Note&lt;/h4>

 This article is only applicable to Dubbo protocol communication scenarios. If you are a Dubbo3 user, it is recommended to use the triple protocol. Please refer to &lt;a href="https://deploy-preview-3203--dubbo.netlify.app/en/overview/mannual/java-sdk/tasks/gateway/triple/">Use Apache APISIX to Proxy Dubbo Services (triple protocol)&lt;/a> for specific examples.

&lt;/div>

&lt;p>Higress provides the capability to convert from HTTP protocol to Dubbo protocol. Users can expose a Dubbo service as an HTTP interface by configuring protocol conversion, thus allowing HTTP requests to invoke Dubbo interfaces. This article introduces how to configure HTTP to Dubbo protocol conversion using Higress through an example. The example guides you to easily deploy a Nacos server and a Dubbo service, then forwards HTTP requests to the Dubbo service registered in Nacos through Ingress, and accomplishes HTTP calls to the Dubbo service through Higress&amp;rsquo;s protocol conversion capability.&lt;/p></description></item><item><title>Best Practices for Microservices: Zero Refactoring to Achieve Interoperability Between Spring Cloud and Apache Dubbo</title><link>https://deploy-preview-3203--dubbo.netlify.app/en/blog/2023/10/07/best-practices-for-microservices-zero-refactoring-to-achieve-interoperability-between-spring-cloud-and-apache-dubbo/</link><pubDate>Sat, 07 Oct 2023 00:00:00 +0000</pubDate><guid>https://deploy-preview-3203--dubbo.netlify.app/en/blog/2023/10/07/best-practices-for-microservices-zero-refactoring-to-achieve-interoperability-between-spring-cloud-and-apache-dubbo/</guid><description>&lt;p>&lt;strong>This article uses real projects and code as examples, demonstrating step by step how to achieve interoperability between the Apache Dubbo system and the Spring Cloud system with minimal cost, enabling hybrid deployment and migration of different microservice systems, helping you solve practical architectural and business issues.&lt;/strong>&lt;/p>
&lt;h2 id="background-and-goals">Background and Goals&lt;/h2>
&lt;p>If you are facing the following business scenarios during microservice development, this article can help you:&lt;/p>
&lt;ul>
&lt;li>You already have a microservice application built on Dubbo, and now you need to publish some services through REST HTTP without changing the code, just adding some configurations and annotations for the pre-written Dubbo services.&lt;/li>
&lt;li>You have a microservice system based on Spring Cloud and later built a set of microservices on Dubbo. You want both systems to coexist, requiring mutual access to services published by each other.&lt;/li>
&lt;li>Due to historical reasons, you are planning to migrate from one microservice system to another, ensuring a smooth transition in the process.&lt;/li>
&lt;/ul>
&lt;p>&lt;img alt="image.png" src="https://deploy-preview-3203--dubbo.netlify.app/imgs/blog/2023/9/springcloud/img.png">&lt;/p></description></item><item><title>Towards Native: Spring &amp; Dubbo AOT Technical Examples and Principles Explanation</title><link>https://deploy-preview-3203--dubbo.netlify.app/en/blog/2023/06/28/towards-native-spring-dubbo-aot-technical-examples-and-principles-explanation/</link><pubDate>Wed, 28 Jun 2023 00:00:00 +0000</pubDate><guid>https://deploy-preview-3203--dubbo.netlify.app/en/blog/2023/06/28/towards-native-spring-dubbo-aot-technical-examples-and-principles-explanation/</guid><description>&lt;p>Java applications face issues such as slow “cold start”, high memory usage, and long warm-up times in the cloud computing era, making it difficult to adapt to cloud deployment models like Serverless. GraalVM addresses these issues significantly through static compilation and packaging techniques, and mainstream frameworks such as Spring and Dubbo provide corresponding AOT solutions to some of the limitations of GraalVM.&lt;/p>
&lt;p>In this article, we will analyze the challenges faced by Java applications in the cloud era, how GraalVM Native Image addresses these issues, the basic concepts and working principles of GraalVM, and finally demonstrate how to statically package a typical microservice application with an example using Spring6 and Dubbo3.&lt;/p></description></item><item><title>How to Proxy Dubbo Services through Apache ShenYu Gateway</title><link>https://deploy-preview-3203--dubbo.netlify.app/en/blog/2022/05/04/how-to-proxy-dubbo-services-through-apache-shenyu-gateway/</link><pubDate>Wed, 04 May 2022 00:00:00 +0000</pubDate><guid>https://deploy-preview-3203--dubbo.netlify.app/en/blog/2022/05/04/how-to-proxy-dubbo-services-through-apache-shenyu-gateway/</guid><description>&lt;p>&lt;img alt="img" src="https://deploy-preview-3203--dubbo.netlify.app/imgs/blog/shenyu-dubbo/ApacheShenYu-Dubbo-en.png">&lt;/p>
&lt;h2 id="1-introduction">1. Introduction&lt;/h2>
&lt;ul>
&lt;li>Apache ShenYu&lt;/li>
&lt;/ul>
&lt;p>&lt;img alt="img" src="https://deploy-preview-3203--dubbo.netlify.app/imgs/blog/shenyu-dubbo/shenyu.png">&lt;/p>
&lt;p>&lt;a href="https://shenyu.apache.org/docs/index">Apache ShenYu(Incubating)&lt;/a> is an asynchronous, high-performance, cross-language, and responsive &lt;code>API&lt;/code> gateway. Compatible with various mainstream framework systems, it supports hot swapping, and users can customize development to meet various current and future needs through large-scale scenario testing.&lt;/p>
&lt;p>In May 2021, &lt;code>ShenYu&lt;/code> was donated to the &lt;code>Apache&lt;/code> Software Foundation, which was fully approved by the Apache Foundation and successfully entered the incubator.&lt;/p>
&lt;ul>
&lt;li>Apache Dubbo&lt;/li>
&lt;/ul>
&lt;p>&lt;code>Apache Dubbo&lt;/code> is a microservices development framework that provides two key capabilities: &lt;code>RPC&lt;/code> communication and microservice governance. This means that microservices developed using &lt;code>Dubbo&lt;/code> will have remote discovery and communication capabilities among themselves, while utilizing the rich service governance capabilities provided by Dubbo to implement service governance requirements such as service discovery, load balancing, and traffic scheduling. Additionally, &lt;code>Dubbo&lt;/code> is highly extensible, allowing users to customize their implementations at almost any function point to change the default behavior of the framework to meet their business needs.&lt;/p></description></item><item><title>Using Apache Skywalking (Incubator) for Distributed Tracing</title><link>https://deploy-preview-3203--dubbo.netlify.app/en/blog/2019/08/11/using-apache-skywalking-incubator-for-distributed-tracing/</link><pubDate>Sun, 11 Aug 2019 00:00:00 +0000</pubDate><guid>https://deploy-preview-3203--dubbo.netlify.app/en/blog/2019/08/11/using-apache-skywalking-incubator-for-distributed-tracing/</guid><description>&lt;h2 id="introduction-to-apache-skywalking-incubator">Introduction to Apache Skywalking (Incubator)&lt;/h2>
&lt;p>&lt;a href="https://github.com/apache/skywalking">Apache Skywalking (Incubator)&lt;/a> is an APM system designed for microservice architecture and cloud-native architecture systems that supports distributed tracing. &lt;a href="https://github.com/apache/skywalking">Apache Skywalking (Incubator)&lt;/a> collects application call chain information by loading probes and analyzes the collected call chain information to generate relationships and service metrics between applications and services. Currently, &lt;a href="https://github.com/apache/skywalking">Apache Skywalking (Incubating)&lt;/a> supports multiple languages, including &lt;a href="https://github.com/apache/skywalking">Java&lt;/a>, &lt;a href="https://github.com/OpenSkywalking/skywalking-netcore">.Net Core&lt;/a>, &lt;a href="https://github.com/OpenSkywalking/skywalking-nodejs">Node.js&lt;/a>, and &lt;a href="https://github.com/SkyAPM/go2sky">Go&lt;/a>.&lt;/p>
&lt;p>Skywalking currently supports dissecting the operation of distributed systems from six visualization dimensions. The overview view provides a global view of applications and components, including the number of components and applications, alarm fluctuations, slow service lists, and application throughput; the topology map shows the entire application&amp;rsquo;s topology based on application dependencies; the application view shows upstream and downstream relationships, TopN services, JVM-related information, and corresponding host information from the perspective of a single application. The service view focuses on the operating status of a single service entry and its upstream and downstream dependencies, helping users optimize and monitor individual services; the call chain shows all points of interest along with the execution duration of each point for a single request; the alarm view provides real-time alerts for applications, servers, and services based on configured thresholds.&lt;/p></description></item><item><title>When Dubbo Meets Arthas: Problem Diagnosis in Practice</title><link>https://deploy-preview-3203--dubbo.netlify.app/en/blog/2019/02/02/when-dubbo-meets-arthas-problem-diagnosis-in-practice/</link><pubDate>Sat, 02 Feb 2019 00:00:00 +0000</pubDate><guid>https://deploy-preview-3203--dubbo.netlify.app/en/blog/2019/02/02/when-dubbo-meets-arthas-problem-diagnosis-in-practice/</guid><description>&lt;p>Apache Dubbo is Alibaba&amp;rsquo;s open-source high-performance RPC framework with a large user base in China.&lt;/p>
&lt;ul>
&lt;li>Github: &lt;a href="https://github.com/apache/dubbo">https://github.com/apache/dubbo&lt;/a>&lt;/li>
&lt;li>Documentation: &lt;a href="http://dubbo.apache.org/en-us/">http://dubbo.apache.org/en-us/&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Arthas is Alibaba&amp;rsquo;s open-source application diagnosis tool, which has gained over 6000 stars on Github within three months of its release in September.&lt;/p>
&lt;ul>
&lt;li>Github: &lt;a href="https://github.com/alibaba/arthas">https://github.com/alibaba/arthas&lt;/a>&lt;/li>
&lt;li>Documentation: &lt;a href="https://arthas.aliyun.com/doc/">https://arthas.aliyun.com/doc/&lt;/a>&lt;/li>
&lt;li>Arthas open-source exchange QQ Group: 916328269&lt;/li>
&lt;li>Arthas open-source exchange DingTalk Group: 21965291&lt;/li>
&lt;/ul>
&lt;p>What sparks will fly when Dubbo meets Arthas? Here are some experiences in diagnosing Dubbo issues using Arthas.&lt;/p></description></item><item><title>How to Use Seata to Ensure Consistency Between Dubbo Microservices</title><link>https://deploy-preview-3203--dubbo.netlify.app/en/blog/2019/01/17/how-to-use-seata-to-ensure-consistency-between-dubbo-microservices/</link><pubDate>Thu, 17 Jan 2019 00:00:00 +0000</pubDate><guid>https://deploy-preview-3203--dubbo.netlify.app/en/blog/2019/01/17/how-to-use-seata-to-ensure-consistency-between-dubbo-microservices/</guid><description>&lt;h2 id="case">Case&lt;/h2>
&lt;p>The user purchases product business, which consists of 3 microservices:&lt;/p>
&lt;ul>
&lt;li>Inventory Service: Deducts the inventory quantity of the given product.&lt;/li>
&lt;li>Order Service: Generates an order based on the purchase request.&lt;/li>
&lt;li>Account Service: Deducts from the user&amp;rsquo;s account balance.&lt;/li>
&lt;/ul>
&lt;h3 id="business-structure-diagram">Business Structure Diagram&lt;/h3>
&lt;p>&lt;img alt="Architecture" src="https://deploy-preview-3203--dubbo.netlify.app/imgs/blog/fescar/fescar-1.png">&lt;/p>
&lt;h3 id="storageservice">StorageService&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-java" data-lang="java">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">public&lt;/span> &lt;span style="color:#268bd2">interface&lt;/span> &lt;span style="color:#268bd2">StorageService&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"> * Deduct storage quantity
&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:#dc322f">void&lt;/span> &lt;span style="color:#268bd2">deduct&lt;/span>(String commodityCode, &lt;span style="color:#dc322f">int&lt;/span> count);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="orderservice">OrderService&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-java" data-lang="java">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">public&lt;/span> &lt;span style="color:#268bd2">interface&lt;/span> &lt;span style="color:#268bd2">OrderService&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"> * Create order
&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> Order &lt;span style="color:#268bd2">create&lt;/span>(String userId, String commodityCode, &lt;span style="color:#dc322f">int&lt;/span> orderCount);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="accountservice">AccountService&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-java" data-lang="java">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">public&lt;/span> &lt;span style="color:#268bd2">interface&lt;/span> &lt;span style="color:#268bd2">AccountService&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"> * Debit from user account
&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:#dc322f">void&lt;/span> &lt;span style="color:#268bd2">debit&lt;/span>(String userId, &lt;span style="color:#dc322f">int&lt;/span> money);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="main-business-logic">Main Business Logic:&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-java" data-lang="java">&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">BusinessServiceImpl&lt;/span> &lt;span style="color:#268bd2">implements&lt;/span> BusinessService {
&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">private&lt;/span> StorageService storageService;
&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">private&lt;/span> OrderService orderService;
&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"> * Purchase
&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">purchase&lt;/span>(String userId, String commodityCode, &lt;span style="color:#dc322f">int&lt;/span> orderCount) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> storageService.deduct(commodityCode, orderCount);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> orderService.create(userId, commodityCode, orderCount);
&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-java" data-lang="java">&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">StorageServiceImpl&lt;/span> &lt;span style="color:#268bd2">implements&lt;/span> StorageService {
&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">private&lt;/span> StorageDAO storageDAO;
&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">@Override&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">deduct&lt;/span>(String commodityCode, &lt;span style="color:#dc322f">int&lt;/span> count) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Storage storage &lt;span style="color:#719e07">=&lt;/span> &lt;span style="color:#719e07">new&lt;/span> Storage();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> storage.setCount(count);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> storage.setCommodityCode(commodityCode);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> storageDAO.update(storage);
&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-java" data-lang="java">&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">OrderServiceImpl&lt;/span> &lt;span style="color:#268bd2">implements&lt;/span> OrderService {
&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">private&lt;/span> OrderDAO orderDAO;
&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">private&lt;/span> AccountService accountService;
&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">public&lt;/span> Order &lt;span style="color:#268bd2">create&lt;/span>(String userId, String commodityCode, &lt;span style="color:#dc322f">int&lt;/span> orderCount) {
&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:#dc322f">int&lt;/span> orderMoney &lt;span style="color:#719e07">=&lt;/span> calculate(commodityCode, orderCount);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> accountService.debit(userId, orderMoney);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Order order &lt;span style="color:#719e07">=&lt;/span> &lt;span style="color:#719e07">new&lt;/span> Order();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> order.userId &lt;span style="color:#719e07">=&lt;/span> userId;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> order.commodityCode &lt;span style="color:#719e07">=&lt;/span> commodityCode;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> order.count &lt;span style="color:#719e07">=&lt;/span> orderCount;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> order.money &lt;span style="color:#719e07">=&lt;/span> orderMoney;
&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">return&lt;/span> orderDAO.insert(order);
&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;h2 id="seata-distributed-transaction-solution">Seata Distributed Transaction Solution&lt;/h2>
&lt;p>&lt;img alt="undefined" src="https://deploy-preview-3203--dubbo.netlify.app/imgs/blog/fescar/fescar-2.png">&lt;/p></description></item><item><title>Introduction to the New Dubbo Admin</title><link>https://deploy-preview-3203--dubbo.netlify.app/en/blog/2019/01/07/introduction-to-the-new-dubbo-admin/</link><pubDate>Mon, 07 Jan 2019 00:00:00 +0000</pubDate><guid>https://deploy-preview-3203--dubbo.netlify.app/en/blog/2019/01/07/introduction-to-the-new-dubbo-admin/</guid><description>&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>github: https://github.com/apache/dubbo-ops
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The previous versions of Dubbo Admin were outdated and lacked maintenance for a long time. Therefore, a major refactoring of the project was carried out mid last year, with the following structural changes:&lt;/p>
&lt;ul>
&lt;li>The backend framework was replaced from webx to spring boot.&lt;/li>
&lt;li>The frontend uses Vue and Vuetify.js as the development framework.&lt;/li>
&lt;li>Removed velocity templates.&lt;/li>
&lt;li>Integrated swagger for API management features.&lt;/li>
&lt;/ul>
&lt;p>The current version of Dubbo Admin includes most of the functions from previous versions, including service governance and service query, while supporting the new service governance features introduced in Dubbo 2.7.&lt;/p></description></item><item><title>The Practice of Dubbo at Guazi Used Car</title><link>https://deploy-preview-3203--dubbo.netlify.app/en/blog/2019/01/05/the-practice-of-dubbo-at-guazi-used-car/</link><pubDate>Sat, 05 Jan 2019 00:00:00 +0000</pubDate><guid>https://deploy-preview-3203--dubbo.netlify.app/en/blog/2019/01/05/the-practice-of-dubbo-at-guazi-used-car/</guid><description>&lt;h2 id="preface">Preface&lt;/h2>
&lt;p>  With the continuous development of Guazi&amp;rsquo;s business, the system scale is gradually expanding. Currently, hundreds of Dubbo applications and thousands of Dubbo instances are running on Guazi&amp;rsquo;s private cloud. Each department of Guazi has rapidly developed its own versions without timely alignment. With the construction of the second data center, the need for a unified Dubbo version has become increasingly urgent. A few months ago, a production incident related to Dubbo occurred, which became a catalyst for the company&amp;rsquo;s Dubbo version upgrade.&lt;/p></description></item><item><title>Dubbo Integrates Nacos as a Registry Center</title><link>https://deploy-preview-3203--dubbo.netlify.app/en/blog/2018/11/07/dubbo-integrates-nacos-as-a-registry-center/</link><pubDate>Wed, 07 Nov 2018 00:00:00 +0000</pubDate><guid>https://deploy-preview-3203--dubbo.netlify.app/en/blog/2018/11/07/dubbo-integrates-nacos-as-a-registry-center/</guid><description>&lt;p>Nacos is an important registry center implementation in the Dubbo ecosystem, and &lt;a href="https://github.com/apache/dubbo/tree/master/dubbo-registry/dubbo-registry-nacos">&lt;code>dubbo-registry-nacos&lt;/code>&lt;/a> is the implementation for integrating Nacos as a registry center in Dubbo.&lt;/p>
&lt;h2 id="preparations">Preparations&lt;/h2>
&lt;p>Before integrating &lt;a href="https://github.com/apache/dubbo/tree/master/dubbo-registry/dubbo-registry-nacos">&lt;code>dubbo-registry-nacos&lt;/code>&lt;/a> into your Dubbo project, make sure that the Nacos service is started in the background. If you are not familiar with the basic usage of Nacos, you can refer to the &lt;a href="https://nacos.io/en-us/docs/quick-start.html">Nacos Quick Start&lt;/a>. It is recommended to use Nacos version &lt;code>0.6.1&lt;/code> or above.&lt;/p></description></item><item><title>Quick Integration of Dubbo + Hystrix in Spring Applications</title><link>https://deploy-preview-3203--dubbo.netlify.app/en/blog/2018/08/22/quick-integration-of-dubbo--hystrix-in-spring-applications/</link><pubDate>Wed, 22 Aug 2018 00:00:00 +0000</pubDate><guid>https://deploy-preview-3203--dubbo.netlify.app/en/blog/2018/08/22/quick-integration-of-dubbo--hystrix-in-spring-applications/</guid><description>&lt;h2 id="background">Background&lt;/h2>
&lt;p>Hystrix is designed to provide more robust fault tolerance by controlling the nodes that access remote systems, services, and third-party libraries, thus providing stronger resilience against latency and failures. Hystrix includes thread and signal isolation, fallback mechanisms, circuit breaker functionality, request caching, request bundling, as well as monitoring and configuration.&lt;/p>
&lt;p>Dubbo is an open-source Java RPC framework from Alibaba and is currently the most popular in China.&lt;/p>
&lt;p>This article describes how to combine Dubbo and Hystrix in a Spring application.&lt;/p></description></item><item><title>From Cross-Language Calls to dubbo2.js</title><link>https://deploy-preview-3203--dubbo.netlify.app/en/blog/2018/08/14/from-cross-language-calls-to-dubbo2.js/</link><pubDate>Tue, 14 Aug 2018 00:00:00 +0000</pubDate><guid>https://deploy-preview-3203--dubbo.netlify.app/en/blog/2018/08/14/from-cross-language-calls-to-dubbo2.js/</guid><description>&lt;blockquote>
&lt;p>&lt;a href="https://github.com/dubbo/dubbo2.js">dubbo2.js&lt;/a> is a Node.js Dubbo client contributed by &lt;a href="https://www.qianmi.com/">Qianmi&lt;/a> to the Dubbo community. It provides support for the native Dubbo protocol in Node.js, making RPC calls between Node.js and Java, two heterogeneous languages, convenient and efficient.&lt;/p>
&lt;/blockquote>
&lt;h2 id="cross-language-calls-in-microservices">Cross-Language Calls in Microservices&lt;/h2>
&lt;p>Microservice architecture has become the trend in today’s internet architecture, and discussions about microservices occupy most of the various technical conferences. The most widely used service governance framework in China is undoubtedly Dubbo, an open-source project from Alibaba. Qianmi has also chosen Dubbo as its microservice governance framework. On the other hand, like most internet companies, Qianmi has a diverse range of development languages, with most backend services supported by Java, while each business line has the freedom to choose its own development language, leading to issues of calling Node.js, Python, and Go in a multi-language environment. Cross-language invocation is a broad and challenging topic, and several solutions frequently mentioned in the industry are as follows:&lt;/p></description></item><item><title>Using Zookeeper in Dubbo Applications</title><link>https://deploy-preview-3203--dubbo.netlify.app/en/blog/2018/08/07/using-zookeeper-in-dubbo-applications/</link><pubDate>Tue, 07 Aug 2018 00:00:00 +0000</pubDate><guid>https://deploy-preview-3203--dubbo.netlify.app/en/blog/2018/08/07/using-zookeeper-in-dubbo-applications/</guid><description>&lt;h2 id="introduction-to-zookeeper">Introduction to Zookeeper&lt;/h2>
&lt;h3 id="basic-concepts">Basic Concepts&lt;/h3>
&lt;p>In modern distributed applications, coordination issues often arise between nodes, including leader election, cluster management, distributed locks, distributed configuration management, unified naming services, and state synchronization. &lt;a href="https://zookeeper.apache.org">Apache Zookeeper&lt;/a>, as its name suggests, is a distributed coordination service framework designed to address these concerns.&lt;/p>
&lt;p>To ensure high availability, ZooKeeper can be deployed in a cluster mode, known as a &lt;em>ZooKeeper ensemble&lt;/em>. Within a ZooKeeper cluster, one node always acts as the leader, and through the &lt;em>ZAB (Zookeeper Atomic Broadcast Protocol) &lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup>&lt;/em> protocol, it ensures the consistency of information across all nodes. Clients can access any node in the cluster for read and write operations without worrying about data inconsistency.&lt;/p></description></item><item><title>Sentinel Safeguarding Dubbo Services</title><link>https://deploy-preview-3203--dubbo.netlify.app/en/blog/2018/07/27/sentinel-safeguarding-dubbo-services/</link><pubDate>Fri, 27 Jul 2018 00:00:00 +0000</pubDate><guid>https://deploy-preview-3203--dubbo.netlify.app/en/blog/2018/07/27/sentinel-safeguarding-dubbo-services/</guid><description>&lt;p>In complex production environments, thousands of Dubbo service instances may be deployed, with continuous traffic flowing in and services calling each other. However, distributed systems may encounter issues like traffic surges, system overload, and network delays, leading to service unavailability. If not controlled, this may cause cascading failures, impacting service availability. Hence, the rational control of traffic becomes key to ensuring service stability.&lt;/p>
&lt;p>&lt;a href="https://github.com/alibaba/Sentinel">Sentinel&lt;/a> is an open-source lightweight traffic control product developed by Alibaba&amp;rsquo;s middleware team, focusing on traffic dynamics and helping users protect service stability through &lt;strong>traffic control&lt;/strong>, &lt;strong>circuit breaking&lt;/strong>, and &lt;strong>system load protection&lt;/strong>. This article will explore how Sentinel performs traffic control based on Dubbo, providing best practices for Dubbo integration with Sentinel.&lt;/p></description></item><item><title>Using Pinpoint for Distributed Tracing</title><link>https://deploy-preview-3203--dubbo.netlify.app/en/blog/2018/07/12/using-pinpoint-for-distributed-tracing/</link><pubDate>Thu, 12 Jul 2018 00:00:00 +0000</pubDate><guid>https://deploy-preview-3203--dubbo.netlify.app/en/blog/2018/07/12/using-pinpoint-for-distributed-tracing/</guid><description>&lt;p>When using Dubbo for service-oriented or integrated applications, if a service&amp;rsquo;s backend logs show an exception, and this service is called by multiple applications, it is often difficult to determine which application made the call and what the cause of the issue is. Thus, we need a distributed tracing system to quickly locate the problem, and Pinpoint can help us achieve this (of course, there are other solutions as well).&lt;/p></description></item><item><title>Using Zipkin in Dubbo</title><link>https://deploy-preview-3203--dubbo.netlify.app/en/blog/2018/06/17/using-zipkin-in-dubbo/</link><pubDate>Sun, 17 Jun 2018 00:00:00 +0000</pubDate><guid>https://deploy-preview-3203--dubbo.netlify.app/en/blog/2018/06/17/using-zipkin-in-dubbo/</guid><description>&lt;p>As business grows, the scale of applications continues to expand, and traditional application architectures cannot meet demands. The transformation to a service-oriented architecture is imperative, with distributed service frameworks like Dubbo becoming essential. As the microservices concept becomes widely accepted, applications are further segmented into finer granularity, and different applications are independently managed by various development teams, resulting in a very complex distributed system. No one can clearly and timely know the overall dependency relationships within the system. When problems occur, it&amp;rsquo;s also not possible to quickly identify which link in the chain fails.&lt;/p></description></item></channel></rss>