blob: 863c1f75fdbc76f5a4e3eccc01854eed58100379 [file] [log] [blame]
<!doctype html><html lang=en class=no-js><head><meta name=ROBOTS content="INDEX, FOLLOW"><link rel=canonical href=https://dubbo.apache.org/en/blog/2018/11/07/dubbo-integrates-with-nacos-to-become-a-registry/><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=generator content="Hugo 0.120.4"><link rel="shortcut icon" type=image/png href=/imgs/favicon.png><link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=manifest href=/manifest.webmanifest><title>Dubbo Integrates with Nacos to Become a Registry | Apache Dubbo</title><meta property="og:title" content="Dubbo Integrates with Nacos to Become a Registry">
<meta property="og:description" content="This article introduces how to use Nacos in Dubbo application."><meta property="og:type" content="article"><meta property="og:url" content="https://dubbo.apache.org/en/blog/2018/11/07/dubbo-integrates-with-nacos-to-become-a-registry/"><meta property="article:section" content="blog"><meta property="article:published_time" content="2018-11-07T00:00:00+00:00"><meta property="article:modified_time" content="2020-12-22T13:19:33+08:00"><meta itemprop=name content="Dubbo Integrates with Nacos to Become a Registry"><meta itemprop=description content="This article introduces how to use Nacos in Dubbo application."><meta itemprop=datePublished content="2018-11-07T00:00:00+00:00"><meta itemprop=dateModified content="2020-12-22T13:19:33+08:00"><meta itemprop=wordCount content="1806"><meta itemprop=keywords content><meta name=twitter:card content="summary"><meta name=twitter:title content="Dubbo Integrates with Nacos to Become a Registry"><meta name=twitter:description content="This article introduces how to use Nacos in Dubbo application."><script async src="https://www.googletagmanager.com/gtag/js?id=G-1TFHM5YBH0"></script><script>var doNotTrack=!1;if(!doNotTrack){window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}gtag("js",new Date),gtag("config","G-1TFHM5YBH0",{anonymize_ip:!1})}</script><link rel=preload href=/scss/main.min.fe7176cbe3102a33d3e8c0c9cec61eb52508abd24a2cc1ae23ccf535a481ffde.css as=style><link href=/scss/main.min.fe7176cbe3102a33d3e8c0c9cec61eb52508abd24a2cc1ae23ccf535a481ffde.css rel=stylesheet integrity><script src=/js/jquery-3.5.1.min.js integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin=anonymous></script><link rel=stylesheet href=https://cdn.jsdelivr.net/npm/@docsearch/css@3><meta name=theme-color content="#326ce5"><link rel=stylesheet href=/css/feature-states.css><meta name=description content="This article introduces how to use Nacos in Dubbo application."><meta property="og:description" content="This article introduces how to use Nacos in Dubbo application."><meta name=twitter:description content="This article introduces how to use Nacos in Dubbo application."><meta property="og:url" content="https://dubbo.apache.org/en/blog/2018/11/07/dubbo-integrates-with-nacos-to-become-a-registry/"><meta property="og:title" content="Dubbo Integrates with Nacos to Become a Registry"><meta name=twitter:title content="Dubbo Integrates with Nacos to Become a Registry"><meta name=twitter:image:alt content="Apache Dubbo"><meta property="og:image" content="/imgs/blog/dubbo-registry-nacos-1.png"><meta property="og:type" content="article"><meta name=viewport content="width=device-width"><script async defer src=/js/github-buttons.js></script><link href=/css/community.css rel=stylesheet><link href=/css/contactus.css rel=stylesheet><link href=/css/language.css rel=stylesheet><script src=/js/script.js></script></head><body class="td-page td-documentation"><header><nav class="js-navbar-scroll navbar navbar-expand navbar-dark flex-column flex-md-row td-navbar" data-auto-burger=primary><a class=navbar-brand href=/en/><span class=navbar-logo></span><span class="text-uppercase font-weight-bold">Apache Dubbo</span></a><div class="td-navbar-nav-scroll ml-md-auto" id=main_navbar><ul class="navbar-nav mt-2 mt-lg-0"><li class="nav-item mr-4 mb-2 mb-lg-0"><a class=nav-link href=/en/overview/><span>Overview</span></a></li><li class="nav-item mr-4 mb-2 mb-lg-0"><a class=nav-link href=/en/docs3-v2/><span>SDK Manual</span></a></li><li class="nav-item mr-4 mb-2 mb-lg-0"><a class="nav-link active" href=/en/blog/><span class=active>Blog</span></a></li><li class="nav-item mr-4 mb-2 mb-lg-0"><a class=nav-link href=/en/download/><span>Download</span></a></li><li class="nav-item mr-4 mb-2 mb-lg-0"><a class=nav-link href=https://start.dubbo.apache.org/bootstrap.html target=_blank><span>Initializer</span><i class='fas fa-external-link-alt'></i></a></li><li class="nav-item dropdown d-lg-block"><a class="nav-link dropdown-toggle" href=# id=navbarDropdownMenuLink role=button data-toggle=dropdown aria-haspopup=true aria-expanded=false>English</a><div class="dropdown-menu dropdown-menu-right" aria-labelledby=navbarDropdownMenuLink><a class=dropdown-item href=/zh-cn/>中文</a></div></li><li class="nav-item dropdown d-lg-block"><div class="nav-item d-none d-lg-block"><div id=docsearch></div></div></li></ul></div></nav><section class="header-hero text-white pb-0 light-text"></section></header><div class="container-fluid td-outer"><div class=td-main><div class="row flex-md-nowrap"><div class="col-12 col-md-3 col-xl-2 td-sidebar d-print-none"><script>$(function(){$("#td-section-nav a").removeClass("active"),$("#td-section-nav #m-enblog20181107dubbo-integrates-with-nacos-to-become-a-registry").addClass("active"),$("#td-section-nav #m-enblog20181107dubbo-integrates-with-nacos-to-become-a-registry-li span").addClass("td-sidebar-nav-active-item"),$("#td-section-nav #m-enblog20181107dubbo-integrates-with-nacos-to-become-a-registry").parents("li").addClass("active-path"),$("#td-section-nav li.active-path").addClass("show"),$("#td-section-nav li.active-path").children("input").prop("checked",!0),$("#td-section-nav #m-enblog20181107dubbo-integrates-with-nacos-to-become-a-registry-li").siblings("li").addClass("show"),$("#td-section-nav #m-enblog20181107dubbo-integrates-with-nacos-to-become-a-registry-li").children("ul").children("li").addClass("show"),$("#td-sidebar-menu").toggleClass("d-none")})</script><div id=td-sidebar-menu class="td-sidebar__inner d-none"><div id=content-mobile><form class="td-sidebar__search d-flex align-items-center"><div id=docsearch></div><button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type=button data-toggle=collapse data-target=#td-section-nav aria-controls=td-docs-nav aria-expanded=false aria-label="Toggle section navigation"></button></form></div><div id=content-desktop></div><nav class="collapse td-sidebar-nav foldable-nav" id=td-section-nav><ul class="td-sidebar-nav__section pr-md-3 ul-0"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-enblog-li><ul class=ul-1><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-enblognews-li><input type=checkbox id=m-enblognews-check>
<label for=m-enblognews-check><a href=/en/blog/news/ title="Articles About Apache Dubbo" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enblognews><span>Articles</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20231023introduction-to-apache-dubbo-plugin-for-intellij-idea-li><input type=checkbox id=m-enblog20231023introduction-to-apache-dubbo-plugin-for-intellij-idea-check>
<label for=m-enblog20231023introduction-to-apache-dubbo-plugin-for-intellij-idea-check><a href=/en/blog/2023/10/23/introduction-to-apache-dubbo-plugin-for-intellij-idea/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20231023introduction-to-apache-dubbo-plugin-for-intellij-idea><span>Introduction to Apache Dubbo plugin for IntelliJ IDEA</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20230415advanced-cloud-native-dubbo-32-officially-released-li><input type=checkbox id=m-enblog20230415advanced-cloud-native-dubbo-32-officially-released-check>
<label for=m-enblog20230415advanced-cloud-native-dubbo-32-officially-released-check><a href=/en/blog/2023/04/15/advanced-cloud-native-dubbo-3.2-officially-released/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20230415advanced-cloud-native-dubbo-32-officially-released><span>Advanced cloud native - Dubbo 3.2 officially released</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20220504how-to-proxy-dubbo-service-in-apache-shenyu-gateway-li><input type=checkbox id=m-enblog20220504how-to-proxy-dubbo-service-in-apache-shenyu-gateway-check>
<label for=m-enblog20220504how-to-proxy-dubbo-service-in-apache-shenyu-gateway-check><a href=/en/blog/2022/05/04/how-to-proxy-dubbo-service-in-apache-shenyu-gateway/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20220504how-to-proxy-dubbo-service-in-apache-shenyu-gateway><span>How to proxy Dubbo service in Apache ShenYu Gateway</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20220118makes-it-more-convenient-for-you-to-proxy-dubbo-services-in-apache-apisix-li><input type=checkbox id=m-enblog20220118makes-it-more-convenient-for-you-to-proxy-dubbo-services-in-apache-apisix-check>
<label for=m-enblog20220118makes-it-more-convenient-for-you-to-proxy-dubbo-services-in-apache-apisix-check><a href=/en/blog/2022/01/18/makes-it-more-convenient-for-you-to-proxy-dubbo-services-in-apache-apisix/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20220118makes-it-more-convenient-for-you-to-proxy-dubbo-services-in-apache-apisix><span>Makes it More Convenient for You to Proxy Dubbo Services in Apache APISIX</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20190826service-test-li><input type=checkbox id=m-enblog20190826service-test-check>
<label for=m-enblog20190826service-test-check><a href=/en/blog/2019/08/26/service-test/ title="Dubbo Admin service test" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20190826service-test><span>Service test in dubbo admin</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20190811tracing-dubbo-service-with-apache-skywalking-li><input type=checkbox id=m-enblog20190811tracing-dubbo-service-with-apache-skywalking-check>
<label for=m-enblog20190811tracing-dubbo-service-with-apache-skywalking-check><a href=/en/blog/2019/08/11/tracing-dubbo-service-with-apache-skywalking/ title="Tracing Dubbo service with Apache Skywalking" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20190811tracing-dubbo-service-with-apache-skywalking><span>Use apache skywalking in dubbo</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20190502dubbo-extensible-mechanism-source-code-analysis-part-2-li><input type=checkbox id=m-enblog20190502dubbo-extensible-mechanism-source-code-analysis-part-2-check>
<label for=m-enblog20190502dubbo-extensible-mechanism-source-code-analysis-part-2-check><a href=/en/blog/2019/05/02/dubbo-extensible-mechanism-source-code-analysis-part-2/ title="Dubbo extensible mechanism source code analysis - part 2" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20190502dubbo-extensible-mechanism-source-code-analysis-part-2><span>Dubbo extensible mechanism - part 2</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20190425dubbo-extensible-mechanism-source-code-analysis-part-1-li><input type=checkbox id=m-enblog20190425dubbo-extensible-mechanism-source-code-analysis-part-1-check>
<label for=m-enblog20190425dubbo-extensible-mechanism-source-code-analysis-part-1-check><a href=/en/blog/2019/04/25/dubbo-extensible-mechanism-source-code-analysis-part-1/ title="Dubbo extensible mechanism source code analysis - part 1" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20190425dubbo-extensible-mechanism-source-code-analysis-part-1><span>Dubbo extensible mechanism - part 1</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20190220implementation-background-and-practice-of-dubbo-client-asynchronous-interface-li><input type=checkbox id=m-enblog20190220implementation-background-and-practice-of-dubbo-client-asynchronous-interface-check>
<label for=m-enblog20190220implementation-background-and-practice-of-dubbo-client-asynchronous-interface-check><a href=/en/blog/2019/02/20/implementation-background-and-practice-of-dubbo-client-asynchronous-interface/ title="Implementation background and practice of Dubbo client asynchronous interface" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20190220implementation-background-and-practice-of-dubbo-client-asynchronous-interface><span>Dubbo Async Client</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20190220implementation-background-and-practice-of-dubbo-server-asynchronous-interface-li><input type=checkbox id=m-enblog20190220implementation-background-and-practice-of-dubbo-server-asynchronous-interface-check>
<label for=m-enblog20190220implementation-background-and-practice-of-dubbo-server-asynchronous-interface-check><a href=/en/blog/2019/02/20/implementation-background-and-practice-of-dubbo-server-asynchronous-interface/ title="Implementation background and practice of Dubbo server asynchronous interface" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20190220implementation-background-and-practice-of-dubbo-server-asynchronous-interface><span>Dubbo Async Server</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20190117how-to-use-seata-to-ensure-consistency-between-dubbo-microservices-li><input type=checkbox id=m-enblog20190117how-to-use-seata-to-ensure-consistency-between-dubbo-microservices-check>
<label for=m-enblog20190117how-to-use-seata-to-ensure-consistency-between-dubbo-microservices-check><a href=/en/blog/2019/01/17/how-to-use-seata-to-ensure-consistency-between-dubbo-microservices/ title="How to use Seata to ensure consistency between Dubbo Microservices" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20190117how-to-use-seata-to-ensure-consistency-between-dubbo-microservices><span>Use Seata in Dubbo</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20181210the-fifth-dubbo-meetup-has-been-held-in-hangzhou-li><input type=checkbox id=m-enblog20181210the-fifth-dubbo-meetup-has-been-held-in-hangzhou-check>
<label for=m-enblog20181210the-fifth-dubbo-meetup-has-been-held-in-hangzhou-check><a href=/en/blog/2018/12/10/the-fifth-dubbo-meetup-has-been-held-in-hangzhou/ title="The fifth Dubbo meetup has been held in Hangzhou" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20181210the-fifth-dubbo-meetup-has-been-held-in-hangzhou><span>The fifth Dubbo meetup</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20181107dubbo-integrates-with-nacos-to-become-a-registry-li><input type=checkbox id=m-enblog20181107dubbo-integrates-with-nacos-to-become-a-registry-check>
<label for=m-enblog20181107dubbo-integrates-with-nacos-to-become-a-registry-check><a href=/en/blog/2018/11/07/dubbo-integrates-with-nacos-to-become-a-registry/ title="Dubbo Integrates with Nacos to Become a Registry" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20181107dubbo-integrates-with-nacos-to-become-a-registry><span>Use Dubbo with Nacos</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20181005introduction-to-the-dubbo-protocol-li><input type=checkbox id=m-enblog20181005introduction-to-the-dubbo-protocol-check>
<label for=m-enblog20181005introduction-to-the-dubbo-protocol-check><a href=/en/blog/2018/10/05/introduction-to-the-dubbo-protocol/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20181005introduction-to-the-dubbo-protocol><span>Introduction to the Dubbo protocol</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20180930integrate-dubbo-with-kubernetes-li><input type=checkbox id=m-enblog20180930integrate-dubbo-with-kubernetes-check>
<label for=m-enblog20180930integrate-dubbo-with-kubernetes-check><a href=/en/blog/2018/09/30/integrate-dubbo-with-kubernetes/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20180930integrate-dubbo-with-kubernetes><span>Integrate Dubbo with Kubernetes</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20180902how-to-prepare-an-apache-release-li><input type=checkbox id=m-enblog20180902how-to-prepare-an-apache-release-check>
<label for=m-enblog20180902how-to-prepare-an-apache-release-check><a href=/en/blog/2018/09/02/how-to-prepare-an-apache-release/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20180902how-to-prepare-an-apache-release><span>How to prepare an Apache Release</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20180902how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo-li><input type=checkbox id=m-enblog20180902how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo-check>
<label for=m-enblog20180902how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo-check><a href=/en/blog/2018/09/02/how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo/ title="How to implement a fully asynchronous calls chain based on Dubbo" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20180902how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo><span>New Async Call</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20180826the-fourth-dubbo-meetup-has-been-held-in-chengdu-li><input type=checkbox id=m-enblog20180826the-fourth-dubbo-meetup-has-been-held-in-chengdu-check>
<label for=m-enblog20180826the-fourth-dubbo-meetup-has-been-held-in-chengdu-check><a href=/en/blog/2018/08/26/the-fourth-dubbo-meetup-has-been-held-in-chengdu/ title="The fourth Dubbo meetup has been held in Chengdu" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20180826the-fourth-dubbo-meetup-has-been-held-in-chengdu><span>The fourth Dubbo meetup</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20180814dubbo-basic-usage-dubbo-consumer-configuration-li><input type=checkbox id=m-enblog20180814dubbo-basic-usage-dubbo-consumer-configuration-check>
<label for=m-enblog20180814dubbo-basic-usage-dubbo-consumer-configuration-check><a href=/en/blog/2018/08/14/dubbo-basic-usage-dubbo-consumer-configuration/ title=" Dubbo Basic Usage - Dubbo Consumer Configuration" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20180814dubbo-basic-usage-dubbo-consumer-configuration><span>Dubbo Consumer Configuration</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20180814dubbo-several-ways-about-synchronousasynchronous-invoke-li><input type=checkbox id=m-enblog20180814dubbo-several-ways-about-synchronousasynchronous-invoke-check>
<label for=m-enblog20180814dubbo-several-ways-about-synchronousasynchronous-invoke-check><a href=/en/blog/2018/08/14/dubbo-several-ways-about-synchronous/asynchronous-invoke/ title="Dubbo: Several ways about synchronous/asynchronous invoke" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20180814dubbo-several-ways-about-synchronousasynchronous-invoke><span>Dubbo Invoke</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20180814dubbo-basic-usage--dubbo-provider-configuration-li><input type=checkbox id=m-enblog20180814dubbo-basic-usage--dubbo-provider-configuration-check>
<label for=m-enblog20180814dubbo-basic-usage--dubbo-provider-configuration-check><a href=/en/blog/2018/08/14/dubbo-basic-usage--dubbo-provider-configuration/ title="Dubbo Basic Usage -- Dubbo Provider Configuration" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20180814dubbo-basic-usage--dubbo-provider-configuration><span>Dubbo Provider Configuration</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20180814manipulating-services-dynamically-via-qos-li><input type=checkbox id=m-enblog20180814manipulating-services-dynamically-via-qos-check>
<label for=m-enblog20180814manipulating-services-dynamically-via-qos-check><a href=/en/blog/2018/08/14/manipulating-services-dynamically-via-qos/ title="Manipulating Services Dynamically via QoS" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20180814manipulating-services-dynamically-via-qos><span>Dubbo QoS Introduction</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20180814source-code-analysis-of-spring-boot-dubbo-app-start-and-stop-li><input type=checkbox id=m-enblog20180814source-code-analysis-of-spring-boot-dubbo-app-start-and-stop-check>
<label for=m-enblog20180814source-code-analysis-of-spring-boot-dubbo-app-start-and-stop-check><a href=/en/blog/2018/08/14/source-code-analysis-of-spring-boot-dubbo-app-start-and-stop/ title="Source code analysis of spring-boot+Dubbo App start and stop" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20180814source-code-analysis-of-spring-boot-dubbo-app-start-and-stop><span>Dubbo start/stop in spring boot</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20180814implementation-of-cross-language-calls-by-dubbo2js-li><input type=checkbox id=m-enblog20180814implementation-of-cross-language-calls-by-dubbo2js-check>
<label for=m-enblog20180814implementation-of-cross-language-calls-by-dubbo2js-check><a href=/en/blog/2018/08/14/implementation-of-cross-language-calls-by-dubbo2.js/ title="Implementation of cross-language calls by Dubbo2.js" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20180814implementation-of-cross-language-calls-by-dubbo2js><span>dubbo2.js introduction</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20180814generic-invoke-of-dubbo-li><input type=checkbox id=m-enblog20180814generic-invoke-of-dubbo-check>
<label for=m-enblog20180814generic-invoke-of-dubbo-check><a href=/en/blog/2018/08/14/generic-invoke-of-dubbo/ title="Generic invoke of Dubbo" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20180814generic-invoke-of-dubbo><span>Generic invoke</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20180814native-image-using-graalvm-li><input type=checkbox id=m-enblog20180814native-image-using-graalvm-check>
<label for=m-enblog20180814native-image-using-graalvm-check><a href=/en/blog/2018/08/14/native-image-using-graalvm/ title="Native Image using GraalVM" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20180814native-image-using-graalvm><span>Native Image</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20180810dubbos-load-balance-li><input type=checkbox id=m-enblog20180810dubbos-load-balance-check>
<label for=m-enblog20180810dubbos-load-balance-check><a href=/en/blog/2018/08/10/dubbos-load-balance/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20180810dubbos-load-balance><span>Dubbo's Load Balance</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20180807use-annotations-in-dubbo-li><input type=checkbox id=m-enblog20180807use-annotations-in-dubbo-check>
<label for=m-enblog20180807use-annotations-in-dubbo-check><a href=/en/blog/2018/08/07/use-annotations-in-dubbo/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20180807use-annotations-in-dubbo><span>Use Annotations In Dubbo</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20180807using-zookeeper-in-dubbo-li><input type=checkbox id=m-enblog20180807using-zookeeper-in-dubbo-check>
<label for=m-enblog20180807using-zookeeper-in-dubbo-check><a href=/en/blog/2018/08/07/using-zookeeper-in-dubbo/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20180807using-zookeeper-in-dubbo><span>Using Zookeeper in Dubbo</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20180807dubbo-101-li><input type=checkbox id=m-enblog20180807dubbo-101-check>
<label for=m-enblog20180807dubbo-101-check><a href=/en/blog/2018/08/07/dubbo-101/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20180807dubbo-101><span>Your First Dubbo Demo</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20180730the-third-dubbo-meetup-has-been-held-in-shenzhen-li><input type=checkbox id=m-enblog20180730the-third-dubbo-meetup-has-been-held-in-shenzhen-check>
<label for=m-enblog20180730the-third-dubbo-meetup-has-been-held-in-shenzhen-check><a href=/en/blog/2018/07/30/the-third-dubbo-meetup-has-been-held-in-shenzhen/ title="The third Dubbo meetup has been held in Shenzhen" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20180730the-third-dubbo-meetup-has-been-held-in-shenzhen><span>The third Dubbo meetup</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20180727sentinel-the-flow-sentinel-of-dubbo-services-li><input type=checkbox id=m-enblog20180727sentinel-the-flow-sentinel-of-dubbo-services-check>
<label for=m-enblog20180727sentinel-the-flow-sentinel-of-dubbo-services-check><a href=/en/blog/2018/07/27/sentinel-the-flow-sentinel-of-dubbo-services/ title="Sentinel: The flow sentinel of Dubbo services" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20180727sentinel-the-flow-sentinel-of-dubbo-services><span>Introduce sentinel</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20180712tracking-with-pinpoint-li><input type=checkbox id=m-enblog20180712tracking-with-pinpoint-check>
<label for=m-enblog20180712tracking-with-pinpoint-check><a href=/en/blog/2018/07/12/tracking-with-pinpoint/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20180712tracking-with-pinpoint><span>Tracking with Pinpoint</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20180701your-first-dubbo-filter-li><input type=checkbox id=m-enblog20180701your-first-dubbo-filter-check>
<label for=m-enblog20180701your-first-dubbo-filter-check><a href=/en/blog/2018/07/01/your-first-dubbo-filter/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20180701your-first-dubbo-filter><span>Your First Dubbo Filter</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20180623the-second-dubbo-shanghai-meetup-has-been-held-successfully-li><input type=checkbox id=m-enblog20180623the-second-dubbo-shanghai-meetup-has-been-held-successfully-check>
<label for=m-enblog20180623the-second-dubbo-shanghai-meetup-has-been-held-successfully-check><a href=/en/blog/2018/06/23/the-second-dubbo-shanghai-meetup-has-been-held-successfully/ title="The second Dubbo Shanghai meetup has been held successfully" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20180623the-second-dubbo-shanghai-meetup-has-been-held-successfully><span>The second Dubbo meetup</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20180512the-first-dubbo-meetup-has-been-held-in-beijing-li><input type=checkbox id=m-enblog20180512the-first-dubbo-meetup-has-been-held-in-beijing-check>
<label for=m-enblog20180512the-first-dubbo-meetup-has-been-held-in-beijing-check><a href=/en/blog/2018/05/12/the-first-dubbo-meetup-has-been-held-in-beijing/ title="The first Dubbo meetup has been held in Beijing" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20180512the-first-dubbo-meetup-has-been-held-in-beijing><span>The first Dubbo meetup</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20180502the-apachecon-na-schedule-has-been-announced-li><input type=checkbox id=m-enblog20180502the-apachecon-na-schedule-has-been-announced-check>
<label for=m-enblog20180502the-apachecon-na-schedule-has-been-announced-check><a href=/en/blog/2018/05/02/the-apachecon-na-schedule-has-been-announced/ title="The ApacheCon NA schedule has been announced" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20180502the-apachecon-na-schedule-has-been-announced><span>ApacheCon NA</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20180425the-gsocgoogle-summer-of-code-2018-li><input type=checkbox id=m-enblog20180425the-gsocgoogle-summer-of-code-2018-check>
<label for=m-enblog20180425the-gsocgoogle-summer-of-code-2018-check><a href=/en/blog/2018/04/25/the-gsocgoogle-summer-of-code-2018/ title="The GSoC(Google Summer of Code) 2018" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20180425the-gsocgoogle-summer-of-code-2018><span>GSoC 2018</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20180422dubbo-roadmap-is-announced-in-qcon-beijing-2018-li><input type=checkbox id=m-enblog20180422dubbo-roadmap-is-announced-in-qcon-beijing-2018-check>
<label for=m-enblog20180422dubbo-roadmap-is-announced-in-qcon-beijing-2018-check><a href=/en/blog/2018/04/22/dubbo-roadmap-is-announced-in-qcon-beijing-2018/ title="Dubbo roadmap is announced in QCon Beijing 2018" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20180422dubbo-roadmap-is-announced-in-qcon-beijing-2018><span>QCon Beijing 2018</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-enblogproposals-li><input type=checkbox id=m-enblogproposals-check>
<label for=m-enblogproposals-check><a href=/en/blog/proposals/ title="Proposals About Apache Dubbo" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enblogproposals><span>Proposals</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog10101application-level-service-discovery-li><input type=checkbox id=m-enblog10101application-level-service-discovery-check>
<label for=m-enblog10101application-level-service-discovery-check><a href=/en/blog/1/01/01/application-level-service-discovery/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog10101application-level-service-discovery><span>Application-Level Service Discovery</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-enblogreleases-li><input type=checkbox id=m-enblogreleases-check>
<label for=m-enblogreleases-check><a href=/en/blog/releases/ title="New Releases" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enblogreleases><span>Releases</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog202109202714-release-note-li><input type=checkbox id=m-enblog202109202714-release-note-check>
<label for=m-enblog202109202714-release-note-check><a href=/en/blog/2021/09/20/2.7.14-release-note/ title="2.7.14 Release Note" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog202109202714-release-note><span>2.7.14</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog202108233021-release-note-li><input type=checkbox id=m-enblog202108233021-release-note-check>
<label for=m-enblog202108233021-release-note-check><a href=/en/blog/2021/08/23/3.0.2.1-release-note/ title="3.0.2.1 Release Note" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog202108233021-release-note><span>3.0.2.1</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20210818302-release-note-li><input type=checkbox id=m-enblog20210818302-release-note-check>
<label for=m-enblog20210818302-release-note-check><a href=/en/blog/2021/08/18/3.0.2-release-note/ title="3.0.2 Release Note" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20210818302-release-note><span>3.0.2</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20210702301-release-note-li><input type=checkbox id=m-enblog20210702301-release-note-check>
<label for=m-enblog20210702301-release-note-check><a href=/en/blog/2021/07/02/3.0.1-release-note/ title="3.0.1 Release Note" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20210702301-release-note><span>3.0.1</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20200518past-releases-li><input type=checkbox id=m-enblog20200518past-releases-check>
<label for=m-enblog20200518past-releases-check><a href=/en/blog/2020/05/18/past-releases/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20200518past-releases><span>Past Releases</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-enblogsecurity-notices-li><input type=checkbox id=m-enblogsecurity-notices-check>
<label for=m-enblogsecurity-notices-check><a href=/en/blog/security-notices/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enblogsecurity-notices><span>Security notices</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog10101serialization-protocol-security-li><input type=checkbox id=m-enblog10101serialization-protocol-security-check>
<label for=m-enblog10101serialization-protocol-security-check><a href=/en/blog/1/01/01/serialization-protocol-security/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog10101serialization-protocol-security><span>Serialization Protocol Security</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog10101security-li><input type=checkbox id=m-enblog10101security-check>
<label for=m-enblog10101security-check><a href=/en/blog/1/01/01/security/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog10101security><span>Security</span></a></label></li></ul></li></ul></li></ul></nav></div></div><main class="col-12 col-md-9 col-xl-8 pl-md-5" role=main><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=https://dubbo.apache.org/en/blog/>Blog</a></li><li class=breadcrumb-item><a href=https://dubbo.apache.org/en/blog/news/>Articles</a></li><li class="breadcrumb-item active" aria-current=page><a href=https://dubbo.apache.org/en/blog/2018/11/07/dubbo-integrates-with-nacos-to-become-a-registry/ aria-disabled=true class="btn-link disabled">Use Dubbo with Nacos</a></li></ol></nav><section id=deprecation-warning><div class="content deprecation-warning pageinfo outdated-blog"><p>This article is more than one year old. Older articles may contain outdated content. Check that the information in the page has not become incorrect since its publication.</p></div></section><div class=td-content><h1>Dubbo Integrates with Nacos to Become a Registry</h1><div class=lead>This article introduces how to use Nacos in Dubbo application.</div><div class="td-byline mb-4"><time datetime=2018-11-07 class=text-muted>Wednesday, November 07, 2018</time></div><header class=article-meta></header><p>Nacos is an important registry in Dubbo ecosystem, and dubbo-registry-nacos is the implementation of Dubbo-integrated Nacos registry.</p><h2 id=preparation-works>Preparation Works</h2><p>Before you integrate dubbo-registry-nacos into your Dubbo project, make sure the Nacos service is started in the background. If you are not familiar with the basic use of Nacos, you can refer to the Quick Start for Nacos: <a href=https://nacos.io/en-us/docs/quick-start.html>https://nacos.io/en-us/docs/quick-start.html</a>. Nacos versions above 0.6.1 are recommended.</p><h2 id=get-started-quickly>Get Started Quickly</h2><p>The operation steps for Dubbo to integrate Nacos into a registry are simple, the general steps can be divided into &ldquo;add Maven dependency&rdquo; and &ldquo;configure the registry.&rdquo;</p><h2 id=increase-maven-dependency>Increase Maven Dependency</h2><p>First, you need to add the Maven dependency of dubbo-registry-nacos to your project&rsquo;s pom.xml file, and it is strongly recommended that you use Dubbo 2.6.5:</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-xml data-lang=xml><span style=display:flex><span><span style=color:#268bd2>&lt;dependencies&gt;</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> ...
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#586e75>&lt;!-- Dubbo Nacos registry dependency --&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;dependency&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;groupId&gt;</span>org.apache<span style=color:#268bd2>&lt;/groupId&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;artifactId&gt;</span>dubbo-registry-nacos<span style=color:#268bd2>&lt;/artifactId&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;version&gt;</span>0.0.2<span style=color:#268bd2>&lt;/version&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;/dependency&gt;</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#586e75>&lt;!-- Keep latest Nacos client version --&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;dependency&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;groupId&gt;</span>org.apache.nacos<span style=color:#268bd2>&lt;/groupId&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;artifactId&gt;</span>nacos-client<span style=color:#268bd2>&lt;/artifactId&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;version&gt;</span>[0.6.1,)<span style=color:#268bd2>&lt;/version&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;/dependency&gt;</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#586e75>&lt;!-- Dubbo dependency --&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;dependency&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;groupId&gt;</span>org.apache<span style=color:#268bd2>&lt;/groupId&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;artifactId&gt;</span>dubbo<span style=color:#268bd2>&lt;/artifactId&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;version&gt;</span>2.6.5<span style=color:#268bd2>&lt;/version&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;/dependency&gt;</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#586e75>&lt;!-- Alibaba Spring Context extension --&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;dependency&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;groupId&gt;</span>org.apache.spring<span style=color:#268bd2>&lt;/groupId&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;artifactId&gt;</span>spring-context-support<span style=color:#268bd2>&lt;/artifactId&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;version&gt;</span>1.0.2<span style=color:#268bd2>&lt;/version&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;/dependency&gt;</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> ...
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>&lt;/dependencies&gt;</span>
</span></span></code></pre></div><p>When you add dubbo-registry-nacos to your project, you don&rsquo;t need to programmatically implement the service discovery and registration logic, the actual implementation is provided by the third-party package, and then to configure the Naocs registry.</p><h2 id=configure-the-registry>Configure the Registry</h2><p>Assuming your Dubbo application is assembled by the Spring Framework, there are two configuration options: Dubbo Spring externalization configuration and Spring XML configuration files, I strongly recommend the former.</p><h2 id=dubbo-spring-externalization-configuration>Dubbo Spring Externalization Configuration</h2><p>Dubbo Spring externalization configuration is a new feature introduced by Dubbo 2.5.8, which automatically generates and binds Dubbo configuration Bean through the Spring Environment property, simplifying configuration and lowering the threshold for microservice development.</p><p>Assume your Dubbo application uses Zookeeper as the registry and its server IP address is 10.20.153.10, the registered address is also stored in the dubbo-config.properties file as a Dubbo externalization configuration attribute, as shown below:</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-properties data-lang=properties><span style=display:flex><span><span style=color:#586e75>## application</span>
</span></span><span style=display:flex><span>dubbo.application.name <span style=color:#719e07>=</span> <span style=color:#2aa198>your-dubbo-application</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#586e75>## Zookeeper registry address</span>
</span></span><span style=display:flex><span>dubbo.registry.address <span style=color:#719e07>=</span> <span style=color:#2aa198>zookeeper://10.20.153.10:2181</span>
</span></span><span style=display:flex><span>...
</span></span></code></pre></div><p>Assuming your Nacos Server is also running on server 10.20.153.10 and using the default Nacos service port 8848, you can simply adjust the dubbo.registry.address property as follows:</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-properties data-lang=properties><span style=display:flex><span><span style=color:#586e75>## 其他属性保持不变</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#586e75>## Nacos registry address</span>
</span></span><span style=display:flex><span>dubbo.registry.address <span style=color:#719e07>=</span> <span style=color:#2aa198>nacos://10.20.153.10:8848</span>
</span></span><span style=display:flex><span>...
</span></span></code></pre></div><p>Subsequently, restart your Dubbo application, and Dubbo&rsquo;s service delivery and consumption information can be displayed in the Nacos console:</p><p><img src=/imgs/blog/dubbo-registry-nacos-1.png alt=image-20181213103845976></p><p>As shown in the figure, the service name prefixed with providers: is the meta-information for the service provider, and consumers: represents the meta-information of the service consumer. Click &ldquo;Details&rdquo; to view service status details:</p><p><img src=/imgs/blog/dubbo-registry-nacos-2.png alt=image-20181213104145998></p><p>If you are using the Spring XML configuration file to assemble the Dubbo registry, refer to the next section.</p><h2 id=spring-xml-configuration-file>Spring XML Configuration File</h2><p>Also, assume your Dubbo application uses Zookeeper as the registry and its server IP address is 10.20.153.10 and assemble the Spring Bean in an XML file, as shown below:</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-xml data-lang=xml><span style=display:flex><span><span style=color:#719e07>&lt;?xml version=&#34;1.0&#34; encoding=&#34;UTF-8&#34;?&gt;</span>
</span></span><span style=display:flex><span><span style=color:#268bd2>&lt;beans</span> xmlns=<span style=color:#2aa198>&#34;http://www.springframework.org/schema/beans&#34;</span>
</span></span><span style=display:flex><span> xmlns:xsi=<span style=color:#2aa198>&#34;http://www.w3.org/2001/XMLSchema-instance&#34;</span>
</span></span><span style=display:flex><span> xmlns:dubbo=<span style=color:#2aa198>&#34;http://dubbo.apache.org/schema/dubbo&#34;</span>
</span></span><span style=display:flex><span> xsi:schemaLocation=<span style=color:#2aa198>&#34;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd&#34;</span><span style=color:#268bd2>&gt;</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#586e75>&lt;!-- Provider application information for dependency calculation --&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;dubbo:application</span> name=<span style=color:#2aa198>&#34;dubbo-provider-xml-demo&#34;</span> <span style=color:#268bd2>/&gt;</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#586e75>&lt;!-- Using the Zookeeper registry Zookeeper --&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;dubbo:registry</span> address=<span style=color:#2aa198>&#34;zookeeper://10.20.153.10:2181&#34;</span> <span style=color:#268bd2>/&gt;</span>
</span></span><span style=display:flex><span> ...
</span></span><span style=display:flex><span><span style=color:#268bd2>&lt;/beans&gt;</span>
</span></span></code></pre></div><p>Similar to the Dubbo Spring externalization configuration, simply adjust the address property configuration:</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-xml data-lang=xml><span style=display:flex><span><span style=color:#719e07>&lt;?xml version=&#34;1.0&#34; encoding=&#34;UTF-8&#34;?&gt;</span>
</span></span><span style=display:flex><span><span style=color:#268bd2>&lt;beans</span> xmlns=<span style=color:#2aa198>&#34;http://www.springframework.org/schema/beans&#34;</span>
</span></span><span style=display:flex><span> xmlns:xsi=<span style=color:#2aa198>&#34;http://www.w3.org/2001/XMLSchema-instance&#34;</span>
</span></span><span style=display:flex><span> xmlns:dubbo=<span style=color:#2aa198>&#34;http://dubbo.apache.org/schema/dubbo&#34;</span>
</span></span><span style=display:flex><span> xsi:schemaLocation=<span style=color:#2aa198>&#34;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd&#34;</span><span style=color:#268bd2>&gt;</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#586e75>&lt;!-- Provider application information for dependency calculation--&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;dubbo:application</span> name=<span style=color:#2aa198>&#34;dubbo-provider-xml-demo&#34;</span> <span style=color:#268bd2>/&gt;</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#586e75>&lt;!-- Using the Nacos registry --&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;dubbo:registry</span> address=<span style=color:#2aa198>&#34;nacos://10.20.153.10:8848&#34;</span> <span style=color:#268bd2>/&gt;</span>
</span></span><span style=display:flex><span> ...
</span></span><span style=display:flex><span><span style=color:#268bd2>&lt;/beans&gt;</span>
</span></span></code></pre></div><p>Once you restart the Dubbo application, you can also see that the registration meta-information for both service providers and consumers is presented in the Nacos console:</p><p><img src=/imgs/blog/dubbo-registry-nacos-3.png alt=image-20181213113049185></p><p>Do you absolutely configure or switch Nacos registry super Easy? If you want to get more or unclear, refer to the complete example below.</p><h2 id=complete-example>Complete Example</h2><p>The metadata in the above image is derived from the Dubbo Spring annotation-driven example and the Dubbo Spring XML configuration-driven example, both of which will be described below, you can choose your preferred programming model. Before we get into the formal discussion, let&rsquo;s look at the preparations for both, as they both rely on Java service interfaces and implementations. Also, ensure that the Nacos service is started in the local (127.0.0.1) environment.</p><h3 id=example-interfaces-and-implementations>Example Interfaces and Implementations</h3><p>First, define the sample interface, as follows:</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#719e07>package</span> org.apache.dubbo.demo.service;
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#586e75>/**
</span></span></span><span style=display:flex><span><span style=color:#586e75> * DemoService
</span></span></span><span style=display:flex><span><span style=color:#586e75> *
</span></span></span><span style=display:flex><span><span style=color:#586e75> * @since 2.7.4
</span></span></span><span style=display:flex><span><span style=color:#586e75> */</span>
</span></span><span style=display:flex><span><span style=color:#268bd2>public</span> <span style=color:#268bd2>interface</span> <span style=color:#268bd2>DemoService</span> {
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> String <span style=color:#268bd2>sayName</span>(String name);
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><p>Provide implementation classes for the above interfaces:</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#719e07>package</span> org.apache.dubbo.demo.service;
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#719e07>import</span> org.apache.dubbo.config.annotation.Service;
</span></span><span style=display:flex><span><span style=color:#719e07>import</span> org.apache.dubbo.rpc.RpcContext;
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#719e07>import</span> org.springframework.beans.factory.annotation.Value;
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#586e75>/**
</span></span></span><span style=display:flex><span><span style=color:#586e75> * Default {@link DemoService}
</span></span></span><span style=display:flex><span><span style=color:#586e75> *
</span></span></span><span style=display:flex><span><span style=color:#586e75> * @since 2.7.4
</span></span></span><span style=display:flex><span><span style=color:#586e75> */</span>
</span></span><span style=display:flex><span><span style=color:#268bd2>@Service</span>(version <span style=color:#719e07>=</span> <span style=color:#2aa198>&#34;${demo.service.version}&#34;</span>)
</span></span><span style=display:flex><span><span style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>DefaultService</span> <span style=color:#268bd2>implements</span> DemoService {
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>@Value</span>(<span style=color:#2aa198>&#34;${demo.service.name}&#34;</span>)
</span></span><span style=display:flex><span> <span style=color:#268bd2>private</span> String serviceName;
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>public</span> String <span style=color:#268bd2>sayName</span>(String name) {
</span></span><span style=display:flex><span> RpcContext rpcContext <span style=color:#719e07>=</span> RpcContext.getContext();
</span></span><span style=display:flex><span> <span style=color:#719e07>return</span> String.format(<span style=color:#2aa198>&#34;Service [name :%s , port : %d] %s(\&#34;%s\&#34;) : Hello,%s&#34;</span>,
</span></span><span style=display:flex><span> serviceName,
</span></span><span style=display:flex><span> rpcContext.getLocalPort(),
</span></span><span style=display:flex><span> rpcContext.getMethodName(),
</span></span><span style=display:flex><span> name,
</span></span><span style=display:flex><span> name);
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><p>Once the interface and implementation are ready, the annotation-driven and XML configuration-driven implementations will be used below.</p><h2 id=spring-annotation-driven-example>Spring Annotation-driven Example</h2><p>Dubbo 2.7.4 reconstructs the Spring annotation-driven programming model.</p><h3 id=service-provider-annotation-driven-implementation>Service Provider Annotation-driven Implementation</h3><ul><li>Define property source of Dubbo provider externalization configuration - provider-config.properties</li></ul><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-properties data-lang=properties><span style=display:flex><span><span style=color:#586e75>## application</span>
</span></span><span style=display:flex><span>dubbo.application.name <span style=color:#719e07>=</span> <span style=color:#2aa198>dubbo-provider-demo</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#586e75>## Nacos registry address</span>
</span></span><span style=display:flex><span>dubbo.registry.address <span style=color:#719e07>=</span> <span style=color:#2aa198>nacos://127.0.0.1:8848</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#586e75>## Dubbo Protocol</span>
</span></span><span style=display:flex><span>dubbo.protocol.name <span style=color:#719e07>=</span> <span style=color:#2aa198>dubbo</span>
</span></span><span style=display:flex><span>dubbo.protocol.port <span style=color:#719e07>=</span> <span style=color:#2aa198>-1</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#586e75># Provider @Service version</span>
</span></span><span style=display:flex><span>demo.service.version<span style=color:#719e07>=</span><span style=color:#2aa198>1.0.0</span>
</span></span><span style=display:flex><span>demo.service.name <span style=color:#719e07>=</span> <span style=color:#2aa198>demoService</span>
</span></span></code></pre></div><ul><li>Implement service provider bootstrap - DemoServiceProviderBootstrap</li></ul><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#719e07>package</span> org.apache.dubbo.demo.provider;
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#719e07>import</span> org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
</span></span><span style=display:flex><span><span style=color:#719e07>import</span> org.apache.dubbo.demo.service.DemoService;
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#719e07>import</span> org.springframework.context.annotation.AnnotationConfigApplicationContext;
</span></span><span style=display:flex><span><span style=color:#719e07>import</span> org.springframework.context.annotation.PropertySource;
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#719e07>import</span> java.io.IOException;
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#586e75>/**
</span></span></span><span style=display:flex><span><span style=color:#586e75> * {@link DemoService} provider demo
</span></span></span><span style=display:flex><span><span style=color:#586e75> */</span>
</span></span><span style=display:flex><span><span style=color:#268bd2>@EnableDubbo</span>(scanBasePackages <span style=color:#719e07>=</span> <span style=color:#2aa198>&#34;org.apache.dubbo.demo.service&#34;</span>)
</span></span><span style=display:flex><span><span style=color:#268bd2>@PropertySource</span>(value <span style=color:#719e07>=</span> <span style=color:#2aa198>&#34;classpath:/provider-config.properties&#34;</span>)
</span></span><span style=display:flex><span><span style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>DemoServiceProviderBootstrap</span> {
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>public</span> <span style=color:#268bd2>static</span> <span style=color:#dc322f>void</span> <span style=color:#268bd2>main</span>(String<span style=color:#719e07>[]</span> args) <span style=color:#268bd2>throws</span> IOException {
</span></span><span style=display:flex><span> AnnotationConfigApplicationContext context <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> AnnotationConfigApplicationContext();
</span></span><span style=display:flex><span> context.register(DemoServiceProviderBootstrap.class);
</span></span><span style=display:flex><span> context.refresh();
</span></span><span style=display:flex><span> System.out.println(<span style=color:#2aa198>&#34;DemoService provider is starting...&#34;</span>);
</span></span><span style=display:flex><span> System.in.read();
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><p>Wherein, the annotation @EnableDubbo activates the Dubbo annotation-driven and externalization configuration, its scanBasePackages property scans the specified Java package, exposes all service interface implementation classes labeled @Service as Spring Bean, and then exports the Dubbo service.</p><p>@PropertySource is the standard import property configuration resource annotation introduced by Spring Framework 3.1, which provides externalization configuration for Dubbo.</p><h2 id=service-consumer-annotation-driven-implementation>Service consumer annotation-driven implementation</h2><ul><li>Define property source of Dubbo consumer externalization configuration - consumer-config.properties</li></ul><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-properties data-lang=properties><span style=display:flex><span><span style=color:#586e75>## Dubbo Application info</span>
</span></span><span style=display:flex><span>dubbo.application.name <span style=color:#719e07>=</span> <span style=color:#2aa198>dubbo-consumer-demo</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#586e75>## Nacos registry address</span>
</span></span><span style=display:flex><span>dubbo.registry.address <span style=color:#719e07>=</span> <span style=color:#2aa198>nacos://127.0.0.1:8848</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#586e75># @Reference version</span>
</span></span><span style=display:flex><span>demo.service.version<span style=color:#719e07>=</span> <span style=color:#2aa198>1.0.0</span>
</span></span></code></pre></div><p>Similarly, the dubbo.registry.address property points to the Nacos registry, through which metadata about other Dubbo services is obtained.</p><ul><li>Implement service consumer bootstrap class - DemoServiceConsumerBootstrap</li></ul><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#719e07>package</span> org.apache.dubbo.demo.consumer;
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#719e07>import</span> org.apache.dubbo.config.annotation.Reference;
</span></span><span style=display:flex><span><span style=color:#719e07>import</span> org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
</span></span><span style=display:flex><span><span style=color:#719e07>import</span> org.apache.dubbo.demo.service.DemoService;
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#719e07>import</span> org.springframework.context.annotation.AnnotationConfigApplicationContext;
</span></span><span style=display:flex><span><span style=color:#719e07>import</span> org.springframework.context.annotation.PropertySource;
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#719e07>import</span> javax.annotation.PostConstruct;
</span></span><span style=display:flex><span><span style=color:#719e07>import</span> java.io.IOException;
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#586e75>/**
</span></span></span><span style=display:flex><span><span style=color:#586e75> * {@link DemoService} consumer demo
</span></span></span><span style=display:flex><span><span style=color:#586e75> */</span>
</span></span><span style=display:flex><span><span style=color:#268bd2>@EnableDubbo</span>
</span></span><span style=display:flex><span><span style=color:#268bd2>@PropertySource</span>(value <span style=color:#719e07>=</span> <span style=color:#2aa198>&#34;classpath:/consumer-config.properties&#34;</span>)
</span></span><span style=display:flex><span><span style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>DemoServiceConsumerBootstrap</span> {
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>@Reference</span>(version <span style=color:#719e07>=</span> <span style=color:#2aa198>&#34;${demo.service.version}&#34;</span>)
</span></span><span style=display:flex><span> <span style=color:#268bd2>private</span> DemoService demoService;
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>@PostConstruct</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>public</span> <span style=color:#dc322f>void</span> <span style=color:#268bd2>init</span>() {
</span></span><span style=display:flex><span> <span style=color:#719e07>for</span> (<span style=color:#dc322f>int</span> i <span style=color:#719e07>=</span> 0; i <span style=color:#719e07>&lt;</span> 10; i<span style=color:#719e07>++</span>) {
</span></span><span style=display:flex><span> System.out.println(demoService.sayName(<span style=color:#2aa198>&#34;小马哥(mercyblitz)&#34;</span>));
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>public</span> <span style=color:#268bd2>static</span> <span style=color:#dc322f>void</span> <span style=color:#268bd2>main</span>(String<span style=color:#719e07>[]</span> args) <span style=color:#268bd2>throws</span> IOException {
</span></span><span style=display:flex><span> AnnotationConfigApplicationContext context <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> AnnotationConfigApplicationContext();
</span></span><span style=display:flex><span> context.register(DemoServiceConsumerBootstrap.class);
</span></span><span style=display:flex><span> context.refresh();
</span></span><span style=display:flex><span> context.close();
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><p>Similarly, the @EnableDubbo annotation activates the Dubbo annotation-driven and externalization configuration, although it currently belongs to the service consumer and does not require the Java package name to scan the service implementation labeled @Service.</p><p>@Reference is a dependency injection annotation for Dubbo remote services that requires service provider and consumer contract interface, version, and group information. In the current service consumption example, the service version of DemoService is derived from the property configuration file consumer-config.properties.</p><p>The @PostConstruct code shows that when the DemoServiceConsumerBootstrap Bean is initialized, it executes ten Dubbo remote method invocation.</p><h3 id=run-the-annotation-driven-example>Run the Annotation-driven Example</h3><p>Start DemoServiceProviderBootstrap twice locally and the registry will have two health services:</p><p><img src=/imgs/blog/dubbo-registry-nacos-4.png alt=image-20181213123909636></p><p>Run DemoServiceConsumerBootstrap again and the results are as follows:</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-fallback data-lang=fallback><span style=display:flex><span>Service [name :demoService , port : 20880] sayName(&#34;小马哥(mercyblitz)&#34;) : Hello,小马哥(mercyblitz)
</span></span><span style=display:flex><span>Service [name :demoService , port : 20881] sayName(&#34;小马哥(mercyblitz)&#34;) : Hello,小马哥(mercyblitz)
</span></span><span style=display:flex><span>Service [name :demoService , port : 20880] sayName(&#34;小马哥(mercyblitz)&#34;) : Hello,小马哥(mercyblitz)
</span></span><span style=display:flex><span>Service [name :demoService , port : 20880] sayName(&#34;小马哥(mercyblitz)&#34;) : Hello,小马哥(mercyblitz)
</span></span><span style=display:flex><span>Service [name :demoService , port : 20881] sayName(&#34;小马哥(mercyblitz)&#34;) : Hello,小马哥(mercyblitz)
</span></span><span style=display:flex><span>Service [name :demoService , port : 20881] sayName(&#34;小马哥(mercyblitz)&#34;) : Hello,小马哥(mercyblitz)
</span></span><span style=display:flex><span>Service [name :demoService , port : 20880] sayName(&#34;小马哥(mercyblitz)&#34;) : Hello,小马哥(mercyblitz)
</span></span><span style=display:flex><span>Service [name :demoService , port : 20880] sayName(&#34;小马哥(mercyblitz)&#34;) : Hello,小马哥(mercyblitz)
</span></span><span style=display:flex><span>Service [name :demoService , port : 20881] sayName(&#34;小马哥(mercyblitz)&#34;) : Hello,小马哥(mercyblitz)
</span></span><span style=display:flex><span>Service [name :demoService , port : 20881] sayName(&#34;小马哥(mercyblitz)&#34;) : Hello,小马哥(mercyblitz)
</span></span></code></pre></div><p>Run correctly and the service consumer uses a load balancing strategy to allocate ten RPC calls equally to two Dubbo service provider instances.</p><h3 id=spring-xml-configuration-driven-example>Spring XML Configuration-driven Example</h3><p>Spring XML configuration-driven is the programming model of traditional Spring assembly components.</p><h4 id=service-provider-xml-configuration-driven>Service Provider XML Configuration-driven</h4><p>Define the service provider XML context configuration file - /META-INF/spring/dubbo-provider-context.xml</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-xml data-lang=xml><span style=display:flex><span><span style=color:#719e07>&lt;?xml version=&#34;1.0&#34; encoding=&#34;UTF-8&#34;?&gt;</span>
</span></span><span style=display:flex><span><span style=color:#268bd2>&lt;beans</span> xmlns=<span style=color:#2aa198>&#34;http://www.springframework.org/schema/beans&#34;</span>
</span></span><span style=display:flex><span> xmlns:xsi=<span style=color:#2aa198>&#34;http://www.w3.org/2001/XMLSchema-instance&#34;</span>
</span></span><span style=display:flex><span> xmlns:dubbo=<span style=color:#2aa198>&#34;http://dubbo.apache.org/schema/dubbo&#34;</span>
</span></span><span style=display:flex><span> xsi:schemaLocation=<span style=color:#2aa198>&#34;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd&#34;</span><span style=color:#268bd2>&gt;</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#586e75>&lt;!--
</span></span></span><span style=display:flex><span><span style=color:#586e75>
</span></span></span><span style=display:flex><span><span style=color:#586e75>Provider application information for dependency calculation
</span></span></span><span style=display:flex><span><span style=color:#586e75> --&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;dubbo:application</span> name=<span style=color:#2aa198>&#34;dubbo-provider-xml-demo&#34;</span><span style=color:#268bd2>/&gt;</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#586e75>&lt;!-- Using the Nacos registry --&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;dubbo:registry</span> address=<span style=color:#2aa198>&#34;nacos://127.0.0.1:8848&#34;</span><span style=color:#268bd2>/&gt;</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#586e75>&lt;!-- Using Dubbo protocol to expose services on random ports --&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;dubbo:protocol</span> name=<span style=color:#2aa198>&#34;dubbo&#34;</span> port=<span style=color:#2aa198>&#34;-1&#34;</span><span style=color:#268bd2>/&gt;</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#586e75>&lt;!-- Declare the service interface to be exposed --&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;dubbo:service</span> interface=<span style=color:#2aa198>&#34;org.apache.dubbo.demo.service.DemoService&#34;</span> ref=<span style=color:#2aa198>&#34;demoService&#34;</span> version=<span style=color:#2aa198>&#34;2.0.0&#34;</span><span style=color:#268bd2>/&gt;</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#586e75>&lt;!-- Implement services like local beans --&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;bean</span> id=<span style=color:#2aa198>&#34;demoService&#34;</span> class=<span style=color:#2aa198>&#34;org.apache.dubbo.demo.service.DefaultService&#34;</span><span style=color:#268bd2>/&gt;</span>
</span></span><span style=display:flex><span><span style=color:#268bd2>&lt;/beans&gt;</span>
</span></span></code></pre></div><ul><li>Implement service provider bootstrap class - DemoServiceProviderBootstrap</li></ul><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#719e07>package</span> org.apache.dubbo.demo.provider;
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#719e07>import</span> org.apache.dubbo.demo.service.DemoService;
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#719e07>import</span> org.springframework.context.support.ClassPathXmlApplicationContext;
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#719e07>import</span> java.io.IOException;
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#586e75>/**
</span></span></span><span style=display:flex><span><span style=color:#586e75> * {@link DemoService} provider demo XML bootstrap
</span></span></span><span style=display:flex><span><span style=color:#586e75> */</span>
</span></span><span style=display:flex><span><span style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>DemoServiceProviderXmlBootstrap</span> {
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>public</span> <span style=color:#268bd2>static</span> <span style=color:#dc322f>void</span> <span style=color:#268bd2>main</span>(String<span style=color:#719e07>[]</span> args) <span style=color:#268bd2>throws</span> IOException {
</span></span><span style=display:flex><span> ClassPathXmlApplicationContext context <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> ClassPathXmlApplicationContext();
</span></span><span style=display:flex><span> context.setConfigLocation(<span style=color:#2aa198>&#34;/META-INF/spring/dubbo-provider-context.xml&#34;</span>);
</span></span><span style=display:flex><span> context.refresh();
</span></span><span style=display:flex><span> System.out.println(<span style=color:#2aa198>&#34;DemoService provider (XML) is starting...&#34;</span>);
</span></span><span style=display:flex><span> System.in.read();
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><h4 id=service-consumer-xml-configuration-driven>Service Consumer XML Configuration-driven</h4><p>Define the consumer provider XML context configuration file - /META-INF/spring/dubbo- consumer-context.xml</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-xml data-lang=xml><span style=display:flex><span><span style=color:#719e07>&lt;?xml version=&#34;1.0&#34; encoding=&#34;UTF-8&#34;?&gt;</span>
</span></span><span style=display:flex><span><span style=color:#268bd2>&lt;beans</span> xmlns=<span style=color:#2aa198>&#34;http://www.springframework.org/schema/beans&#34;</span>
</span></span><span style=display:flex><span> xmlns:xsi=<span style=color:#2aa198>&#34;http://www.w3.org/2001/XMLSchema-instance&#34;</span>
</span></span><span style=display:flex><span> xmlns:dubbo=<span style=color:#2aa198>&#34;http://dubbo.apache.org/schema/dubbo&#34;</span>
</span></span><span style=display:flex><span> xsi:schemaLocation=<span style=color:#2aa198>&#34;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd&#34;</span><span style=color:#268bd2>&gt;</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#586e75>&lt;!--
</span></span></span><span style=display:flex><span><span style=color:#586e75>
</span></span></span><span style=display:flex><span><span style=color:#586e75>Provider application information for dependency calculation
</span></span></span><span style=display:flex><span><span style=color:#586e75> --&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;dubbo:application</span> name=<span style=color:#2aa198>&#34;dubbo-consumer-xml-demo&#34;</span><span style=color:#268bd2>/&gt;</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#586e75>&lt;!-- Using the Nacos registry--&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;dubbo:registry</span> address=<span style=color:#2aa198>&#34;nacos://127.0.0.1:8848&#34;</span><span style=color:#268bd2>/&gt;</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#586e75>&lt;!-- Reference service interface --&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;dubbo:reference</span> id=<span style=color:#2aa198>&#34;demoService&#34;</span> interface=<span style=color:#2aa198>&#34;org.apache.dubbo.demo.service.DemoService&#34;</span> version=<span style=color:#2aa198>&#34;2.0.0&#34;</span><span style=color:#268bd2>/&gt;</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#268bd2>&lt;/beans&gt;</span>
</span></span></code></pre></div><ul><li>Implement service consumer bootstrap class - DemoServiceConsumerBootstrap</li></ul><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#719e07>package</span> org.apache.dubbo.demo.consumer;
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#719e07>import</span> org.apache.dubbo.demo.service.DemoService;
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#719e07>import</span> org.springframework.context.support.ClassPathXmlApplicationContext;
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#719e07>import</span> java.io.IOException;
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#586e75>/**
</span></span></span><span style=display:flex><span><span style=color:#586e75> * {@link DemoService} consumer demo XML bootstrap
</span></span></span><span style=display:flex><span><span style=color:#586e75> */</span>
</span></span><span style=display:flex><span><span style=color:#268bd2>public</span> <span style=color:#268bd2>class</span> <span style=color:#268bd2>DemoServiceConsumerXmlBootstrap</span> {
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>public</span> <span style=color:#268bd2>static</span> <span style=color:#dc322f>void</span> <span style=color:#268bd2>main</span>(String<span style=color:#719e07>[]</span> args) <span style=color:#268bd2>throws</span> IOException {
</span></span><span style=display:flex><span> ClassPathXmlApplicationContext context <span style=color:#719e07>=</span> <span style=color:#719e07>new</span> ClassPathXmlApplicationContext();
</span></span><span style=display:flex><span> context.setConfigLocation(<span style=color:#2aa198>&#34;/META-INF/spring/dubbo-consumer-context.xml&#34;</span>);
</span></span><span style=display:flex><span> context.refresh();
</span></span><span style=display:flex><span> System.out.println(<span style=color:#2aa198>&#34;DemoService consumer (XML) is starting...&#34;</span>);
</span></span><span style=display:flex><span> DemoService demoService <span style=color:#719e07>=</span> context.getBean(<span style=color:#2aa198>&#34;demoService&#34;</span>, DemoService.class);
</span></span><span style=display:flex><span> <span style=color:#719e07>for</span> (<span style=color:#dc322f>int</span> i <span style=color:#719e07>=</span> 0; i <span style=color:#719e07>&lt;</span> 10; i<span style=color:#719e07>++</span>) {
</span></span><span style=display:flex><span> System.out.println(demoService.sayName(<span style=color:#2aa198>&#34;小马哥(mercyblitz)&#34;</span>));
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span> context.close();
</span></span><span style=display:flex><span> }
</span></span><span style=display:flex><span>}
</span></span></code></pre></div><h4 id=run-xml-configuration-driven-example>Run XML Configuration-driven Example</h4><p>As such, start two DemoServiceProviderXmlBootstrap bootstraps and observe the changes in the Nacos registry service provider:</p><p><img src=/imgs/blog/dubbo-registry-nacos-5.png alt=image-20181213125527201></p><p>The service version driven by the XML configuration is 2.0.0, so the registration service is correct.</p><p>Run the service consumer bootstrap DemoServiceConsumerXmlBootstrap again and observe the console output:</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-fallback data-lang=fallback><span style=display:flex><span>Service [name :null , port : 20882] sayName(&#34;小马哥(mercyblitz)&#34;) : Hello,小马哥(mercyblitz)
</span></span><span style=display:flex><span>Service [name :null , port : 20882] sayName(&#34;小马哥(mercyblitz)&#34;) : Hello,小马哥(mercyblitz)
</span></span><span style=display:flex><span>Service [name :null , port : 20883] sayName(&#34;小马哥(mercyblitz)&#34;) : Hello,小马哥(mercyblitz)
</span></span><span style=display:flex><span>Service [name :null , port : 20882] sayName(&#34;小马哥(mercyblitz)&#34;) : Hello,小马哥(mercyblitz)
</span></span><span style=display:flex><span>Service [name :null , port : 20882] sayName(&#34;小马哥(mercyblitz)&#34;) : Hello,小马哥(mercyblitz)
</span></span><span style=display:flex><span>Service [name :null , port : 20883] sayName(&#34;小马哥(mercyblitz)&#34;) : Hello,小马哥(mercyblitz)
</span></span><span style=display:flex><span>Service [name :null , port : 20882] sayName(&#34;小马哥(mercyblitz)&#34;) : Hello,小马哥(mercyblitz)
</span></span><span style=display:flex><span>Service [name :null , port : 20883] sayName(&#34;小马哥(mercyblitz)&#34;) : Hello,小马哥(mercyblitz)
</span></span><span style=display:flex><span>Service [name :null , port : 20883] sayName(&#34;小马哥(mercyblitz)&#34;) : Hello,小马哥(mercyblitz)
</span></span><span style=display:flex><span>Service [name :null , port : 20883] sayName(&#34;小马哥(mercyblitz)&#34;) : Hello,小马哥(mercyblitz)
</span></span></code></pre></div><p>As a result, both operation and load balancing are normal due to the property demo.service.name has not been added to the current example, the &ldquo;name&rdquo; information is output as null. For more information, please refer to: <a href=https://github.com/apache/dubbo/tree/master/dubbo-registry/dubbo-registry-nacos>https://github.com/apache/dubbo/tree/master/dubbo-registry/dubbo-registry-nacos</a>.</p><p>If you&rsquo;re interested in or fond of open source projects like Dubbo and Nacos, try clicking &ldquo;star&rdquo; to support them. The links are as follows:</p><ul><li>Apache Dubbo: <a href=https://github.com/apache/dubbo>https://github.com/apache/dubbo</a></li><li>Dubbo Nacos Registry: <a href=https://github.com/apache/dubbo/tree/master/dubbo-registry/dubbo-registry-nacos>https://github.com/apache/dubbo/tree/master/dubbo-registry/dubbo-registry-nacos</a></li><li>Alibaba Nacos: <a href=https://github.com/alibaba/nacos>https://github.com/alibaba/nacos</a></li></ul><ul class="list-unstyled d-flex justify-content-between align-items-center mb-0 pt-5"><li><a href=/en/blog/2018/10/05/introduction-to-the-dubbo-protocol/ aria-label="Previous - Introduction to the Dubbo protocol" class="btn btn-primary"><span class=mr-1></span>Previous</a></li><li><a href=/en/blog/2018/12/10/the-fifth-dubbo-meetup-has-been-held-in-hangzhou/ aria-label="Next - The fifth Dubbo meetup has been held in Hangzhou" class="btn btn-primary">Next<span class=ml-1></span></a></li></ul></div><div id=pre-footer><h2>Feedback</h2><p class=feedback--prompt>Was this page helpful?</p><button class="btn btn-primary mb-4 feedback--yes">Yes</button>
<button class="btn btn-primary mb-4 feedback--no">No</button></div><script>const yes=document.querySelector(".feedback--yes"),no=document.querySelector(".feedback--no");document.querySelectorAll(".feedback--link").forEach(e=>{e.href=e.href+window.location.pathname});const sendFeedback=e=>{gtag||console.log("!gtag"),gtag("event","click",{event_category:"Helpful",event_label:window.location.pathname,value:e})},disableButtons=()=>{yes.disabled=!0,yes.classList.add("feedback--button__disabled"),no.disabled=!0,no.classList.add("feedback--button__disabled")};yes.addEventListener("click",()=>{sendFeedback(1),disableButtons(),document.querySelector(".feedback--response").classList.remove("feedback--response__hidden")}),no.addEventListener("click",()=>{sendFeedback(0),disableButtons(),document.querySelector(".feedback--response").classList.remove("feedback--response__hidden")})</script></main><div class="d-none d-xl-block col-xl-2 td-toc d-print-none"><div class="td-page-meta ml-2 pb-1 pt-2 mb-0"><a href=https://github.com/apache/dubbo-website/edit/master/content/en/blog/news/dubbo-registry-nacos-integration.md target=_blank><i class="fa fa-edit fa-fw"></i> Edit this page</a>
<a href="https://github.com/apache/dubbo-website/new/master/content/en/blog/news/dubbo-registry-nacos-integration.md?filename=change-me.md&amp;value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22front+matter%22+section+at+the+top+of+the+page+%28weight+controls+how+its+ordered+amongst+other+pages+in+the+same+directory%3B+lowest+number+first%29.%0A%2A+Add+a+good+commit+message+at+the+bottom+of+the+page+%28%3C80+characters%3B+use+the+extended+description+field+for+more+detail%29.%0A%2A+Create+a+new+branch+so+you+can+preview+your+new+file+and+request+a+review+via+Pull+Request.%0A" target=_blank><i class="fa fa-edit fa-fw"></i> Create child page</a>
<a href="https://github.com/apache/dubbo-website/issues/new?title=Dubbo%20Integrates%20with%20Nacos%20to%20Become%20a%20Registry" target=_blank><i class="fab fa-github fa-fw"></i> Create an issue</a>
<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas fa-tasks fa-fw"></i> Create project issue</a></div><nav id=TableOfContents><ul><li><a href=#preparation-works>Preparation Works</a></li><li><a href=#get-started-quickly>Get Started Quickly</a></li><li><a href=#increase-maven-dependency>Increase Maven Dependency</a></li><li><a href=#configure-the-registry>Configure the Registry</a></li><li><a href=#dubbo-spring-externalization-configuration>Dubbo Spring Externalization Configuration</a></li><li><a href=#spring-xml-configuration-file>Spring XML Configuration File</a></li><li><a href=#complete-example>Complete Example</a><ul><li><a href=#example-interfaces-and-implementations>Example Interfaces and Implementations</a></li></ul></li><li><a href=#spring-annotation-driven-example>Spring Annotation-driven Example</a><ul><li><a href=#service-provider-annotation-driven-implementation>Service Provider Annotation-driven Implementation</a></li></ul></li><li><a href=#service-consumer-annotation-driven-implementation>Service consumer annotation-driven implementation</a><ul><li><a href=#run-the-annotation-driven-example>Run the Annotation-driven Example</a></li><li><a href=#spring-xml-configuration-driven-example>Spring XML Configuration-driven Example</a></li></ul></li></ul></nav><div class="taxonomy taxonomy-terms-cloud taxo-tags"><h5 class=taxonomy-title>Tags</h5><ul class=taxonomy-terms><li><a class=taxonomy-term href=https://dubbo.apache.org/en/tags/news/ data-taxonomy-term=news><span class=taxonomy-label>news</span><span class=taxonomy-count>1</span></a></li><li><a class=taxonomy-term href=https://dubbo.apache.org/en/tags/security-vulnerabilities/ data-taxonomy-term=security-vulnerabilities><span class=taxonomy-label>Security Vulnerabilities</span><span class=taxonomy-count>1</span></a></li></ul></div></div></div></div></div><footer class="bg-dark py-5 row d-print-none footer-margin-0"><div class="container-fluid mx-sm-5"><div class=row><div class="col-6 col-sm-4 text-xs-center order-sm-2"><ul class="list-inline mb-0"><li class="list-inline-item mx-2 h3" data-toggle=tooltip data-placement=top title="Dubbo mailing list archive" aria-label="Dubbo mailing list archive"><a class=text-white target=_blank rel="noopener noreferrer" href=https://lists.apache.org/list.html?dev@dubbo.apache.org><i class="fa fa-envelope"></i></a></li></ul></div><div class="col-6 col-sm-4 text-right text-xs-center order-sm-3"><ul class="list-inline mb-0"><li class="list-inline-item mx-2 h3" data-toggle=tooltip data-placement=top title=GitHub aria-label=GitHub><a class=text-white target=_blank rel="noopener noreferrer" href=https://github.com/apache/dubbo><i class="fab fa-github"></i></a></li><li class="list-inline-item mx-2 h3" data-toggle=tooltip data-placement=top title="Subscribe to mailing list" aria-label="Subscribe to mailing list"><a class=text-white target=_blank rel="noopener noreferrer" href=mailto:dev-subscribe@dubbo.apache.org><i class="fa fa-envelope"></i></a></li></ul></div><div class="col-12 col-sm-4 text-center py-2 order-sm-2"><small class=text-white>&copy; 2023 The Apache Software Foundation. Apache and the Apache feather logo are trademarks of The Apache Software Foundation. All Rights Reserved</small></div></div></div></footer><div class="row pt-2 pb-2 footer-margin-0"><div class="container-fluid mx-sm-5"><div class=text-center id=my-footer><img style=float:left alt=apache_logo src=/imgs/apache_logo.png><ul><li><a href=https://www.apache.org>Foundation</a></li><li><a href=https://www.apache.org/licenses/>License</a></li><li><a href=https://dubbo.apache.org/en/docs/notices/security/>Security</a></li><li><a href=https://www.apache.org/events/current-event>Events</a></li><li><a href=https://www.apache.org/foundation/sponsorship.html>Sponsorship</a></li><li><a href=https://privacy.apache.org/policies/privacy-policy-public.html>Privacy</a></li><li><a href=https://www.apache.org/foundation/thanks.html>Thanks</a></li></ul></div></div></div><script src=/js/popper.min.js integrity=sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49 crossorigin=anonymous></script><script src=/js/bootstrap.min.js integrity=sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy crossorigin=anonymous></script><script src=/js/main.min.a4534a01940be8c082c4c0e6777b61df9884f202b61c9519352adb6d1039d5aa.js integrity="sha256-pFNKAZQL6MCCxMDmd3th35iE8gK2HJUZNSrbbRA51ao=" crossorigin=anonymous></script><script src=https://cdn.jsdelivr.net/npm/@docsearch/js@3></script><script>docsearch({appId:"L5F4T9F0I1",apiKey:"364ae307e1da9d02b2335675e9db1eb1",indexName:"apache_dubbo",container:"#docsearch",debug:!1}),docsearch({appId:"L5F4T9F0I1",apiKey:"364ae307e1da9d02b2335675e9db1eb1",indexName:"apache_dubbo",container:"#docsearch_zh_home",debug:!1})</script></body></html>