목차
🎜" >Dubbo란 무엇인가요? 🎜 🎜
Dubbo의 6가지 핵심 기능
Registry
레지스트리
Provider
Consumer
Monitor
컨테이너:
流程说明
프로세스 설명
api
provider
consumer
데모 사례 2 " >데모 사례 2
pom依赖
provider端
consumer端
其他
Java java지도 시간 Dubbo 소스 코드 분석: 초보자 가이드

Dubbo 소스 코드 분석: 초보자 가이드

Aug 23, 2023 pm 02:44 PM
dubbo


이미 왼쪽: 2px; background-color: rgba(27, 31, 35, 0.05); ; word-break: break-all; color: rgb(239, 112, 96);">DubboDubbo熟练使用了,那这篇文章不太适合你,但如果想了解Dubbo,想学习Dubbo,那就非常适合你。

Dubbo 소스 코드 분석: 초보자 가이드

什么是Dubbo?

Dubbo一开始是由阿里巴巴开发,后面贡献给了Apache,所以后面我们称之为Apache Dubbo或者直接叫Dubbo

Dubbo 당신이 그것을 능숙하게 사용한다면 이 글은 당신에게 적합하지 않을 것입니다. 자세히 알아보기

Dubbo ><blockquote data-tool="mdnice编辑器" style="border-top: none;border-right: none;border-bottom: none;font-size: 0.9em;overflow: auto;color: rgb(106, 115, 125);padding: 10px 10px 10px 20px;margin-bottom: 20px;margin-top: 20px;border-left-color: rgb(239, 112, 96);background: rgb(255, 249, 249);">, 배우고 싶어요<p style="font-size: 16px;padding-top: 8px;padding-bottom: 8px;color: black;line-height: 26px;"><code style="letter-spacing: 0px;font-size: 14px ; padding: 2px 4px; border-radius: 4px; margin-right: 2px; margin-left: 2px; background-color : rgba(27, 31, 35, 0.05); 글꼴 계열: " operator mono consolas monaco menlo monospace word-break: break-all>

, 당신에게 딱이네요. 🎜🎜

Dubbo 소스 코드 분석: 초보자 가이드🎜

Dubbo란 무엇인가요? 🎜 🎜

🎜Dubbo는 처음에는 Alibaba에서 개발했으며 나중에 Apache이므로 Apache Dubbo또는 그냥 Dubbo. 🎜🎜Dubbo는 고성능, 경량 오픈 소스 서비스 프레임워크. 🎜🎜🎜먼저 발음을 교정하세요: 🎜

잘못된 발음: diubo, dubo

정확한 발음: |ˈdʌbəʊ|

Dubbo의 6가지 핵심 기능

  • 인터페이스 에이전트를 위한 고성능RPC 호출
  • RPC调用
  • 智能容错和负载均衡
  • 服务自动注册和发现
  • 高度可扩展能力
  • 运行期流量调度
  • 可视化的服务治理与运维。
  • 开发中,我们都喜欢把Dubbo简称为RPC开源框架。

    什么是RPC?

    RPCRemote Procedure Call的简称,翻译过来就是:远程过程调用

    지능형 내결함성 및 로드 밸런싱 li>

    서비스 자동 등록 및 검색

    확장성이 뛰어난 기능

    런타임 트래픽 스케줄링🎜🎜시각화된 서비스 거버넌스 및 운영. 🎜개발 중에 우리 모두는 DubboRPC오픈 소스 프레임워크입니다. 🎜

    RPC란 무엇입니까?

    🎜RPC는 Remote Procedure Call의 약어, 다음과 같이 번역됨: 원격 프로시저 호출. 🎜🎜🎜간단히 이해하자면 한 노드가 다른 노드에서 제공하는 서비스를 요청한다는 것입니다. 🎜🎜🎜일반인의 용어로:🎜

    두 개의 서버 A와 B가 서버 A에 애플리케이션 serverA,在服务器B上部署一个应用程序serverB。此时,serverA想调用serverB을 배포합니다. 특정 메서드는 동일한 서버에 있지 않기 때문에 직접 호출할 수 없습니다. 호출의 의미와 호출의 데이터는 네트워크를 통해 전송되어야 합니다.

    로컬 메서드를 호출하는 것처럼 원격 메서드도 호출하세요.

    Dubbo 소스 코드 분석: 초보자 가이드

    개발 과정에서 두 서비스(서로 다른 서버의 서비스) 간의 호출은 일반적으로 HTTP REST를 사용합니다.

    RPC 프레임워크

    사실 시중에는 수많은 RPC 프레임워크가 있으며, Dubbo는 그 중 하나일 뿐입니다. 예:

    • gRPC는 Google에서 개발한 고성능 범용 오픈 소스 RPC 프레임워크입니다. gRPC는 ProtoBuf를 사용하여 서비스를 정의합니다. ProtoBuf는 Google에서 개발한 데이터 직렬화 프로토콜로 상대적으로 높은 성능과 높은 압축률 및 전송 효율성을 자랑합니다. 간단한 구문. 또한 gRPC는 다국어를 지원하며 언어 기반으로 클라이언트 및 서버 기능 라이브러리를 자동으로 생성할 수 있습니다.
    • Thrift는 Facebook에서 시작되었으며 Dubbo와 마찬가지로 나중에 Thrift를 오픈 소스 프로젝트로 만들기 위해 Apache Foundation에 제출되었습니다. Facebook은 Facebook 시스템 간의 대량 데이터 전송 및 통신 문제와 크로스 플랫폼 문제가 필요한 시스템 간의 서로 다른 언어 환경 문제를 해결하기 위해 Thrift를 만들었습니다.
    • Motan은 Sina Weibo가 오픈 소스로 제공하는 Java RPC 프레임워크입니다. 공식 문서에 따르면 Weibo 플랫폼에서 널리 사용되어 매일 수백 개의 서비스에 대해 거의 1000억 건의 호출을 완료했습니다.
    • ...

    Dubbo 핵심 캐릭터

    한 번 살펴보겠습니다Dubbo의 핵심 역할 아키텍처: Dubbo架构中的核心角色:

    Dubbo 소스 코드 분석: 초보자 가이드

    该图来自于官网,下面我们对图做一个简单介绍:

    Registry

    注册中心。负责服务地址的注册与查找,服务的 ProviderConsumer 只在启动时与注册中心交互。注册中心通过长连接感知 Provider 的存在,在 Provider 出现宕机的时候,注册中心会立即推送相关事件通知 Consumer

    Dubbo 소스 코드 분석: 초보자 가이드

    🎜이 사진은 공식 홈페이지에서 가져온 것입니다. 아래 사진에 대한 간략한 소개를 해보겠습니다:🎜

    레지스트리

    🎜등록 센터. 서비스 주소 등록 및 검색을 담당하는 서비스 공급자 및 <code style="font-size: 14px;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px; background-color: rgba(27, 31, 35, 0.05 );font-family: " operator mono consolas monaco menlo monospace break-all rgb>소비자는 등록에서만 작동합니다. 센터 상호 작용. 등록 센터는 긴 연결을 감지합니다공급자 존재 , 공급자 다운타임이 있는 경우, 등록 센터는 관련 이벤트 알림을 즉시 푸시합니다소비자 . 🎜

    Provider

    서비스 제공자. 시작되면 레지스트리에 등록하고 서비스 주소와 관련 구성 정보를 URL로 캡슐화하여 ZooKeeper에 추가합니다.

    Consumer

    소비자에게 서비스를 제공하세요. 시작되면 레지스트리를 구독하게 됩니다. 구독 작업은 ZooKeeper 中获取 Provider 注册的 URL,并在 ZooKeeper 中添加相应的监听器。获取到 Provider URL 之后,Consumer 会根据负载均衡算法从多个 Provider 中选择一个 Provider 并与其建立连接,最后发起对 ProviderRPC 调用。如果 Provider URL 发生变更,Consumer 将会通过之前订阅过程中在注册中心添加的监听器,获取到最新的 Provider URL 信息,进行相应的调整,比如断开与宕机 Provider 的连接,并与新的 Provider에서 연결을 설정합니다.Consumer 및 Provider 建立的是长连接,且 Consumer 会缓存 Provider 信息,所以一旦连接建立,即使注册中心宕机,也不会影响已运行的 ProviderConsumer

    Monitor

    监控中心。用于统计服务的调用次数和调用时间。ProviderConsumer 在运行过程中,会在内存中统计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。监控中心在上面的架构图中并不是必要角色,监控中心宕机不会影响 ProviderConsumer 以及 Registry 기능은 모니터링 데이터만 손실됩니다.

    음란하게 전개되어 후기에 폭발합니다(초기에는 크게 신경쓰지 않으셔도 되지만 후기에 특히 향이 강합니다)

    컨테이너:

    컨테이너를 실행하는 서비스입니다. 서비스는 일반적으로 필요하지 않기 때문에 별도의 컨테이너입니다(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb (239, 112, 96);">Tomcat、JBoss 및 기타 웹 컨테이너 기능을 사용하면 서비스를 로드하기 위해 웹 컨테이너를 사용할 필요가 없습니다. 서비스 컨테이너는 단순한 기본 메소드일 뿐이며 간단한 Spring 컨테이너를 로드하여 서비스를 노출합니다. TomcatJBoss等Web容器的特性,没必要用Web容器去加载服务。服务容器只是一个简单的main方法,并加载一个简单的Spring容器,用于暴露服务。

    流程说明

    在上面这张图中,有几个角色,并且还画了很多线条,下面我们对此做一个简单说明。

    • 服务容器负责启动,加载,运行服务提供者。
    • 服务提供者在启动时,向注册中心注册自己提供的服务。
    • 服务消费者在启动时,向注册中心订阅自己所需的服务。
    • 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
    • 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
    • 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

    Dubbo官网

    Dubbo的官网:https://dubbo.apache.org/

    Dubbo 소스 코드 분석: 초보자 가이드

    由于Dubbo

    프로세스 설명

    위 내용 그림에는 여러 문자가 있고 많은 선이 그려져 있습니다. 이에 대해 간단히 설명하겠습니다. 🎜
    • 서비스 컨테이너는 서비스 공급자의 시작, 로드 및 실행을 담당합니다.
    • 서비스 제공업체 시작하려면 등록 센터에 제공하는 서비스를 등록하세요.
    • 서비스 소비자 스타트업, 필요한 서비스를 위해 등록 센터에 가입하세요.
    • 등록 센터 반환 서비스 제공업체 주소 목록이 소비자에게 제공됩니다. 변경 사항이 있는 경우 등록 센터는 오랜 연결을 기반으로 변경 데이터를 소비자에게 푸시합니다.
    • 서비스 소비자 , 소프트 로드 밸런싱 알고리즘을 기반으로 공급자 주소 목록에서 호출할 공급자를 선택합니다. 호출이 실패하면 호출할 다른 공급자를 선택합니다.
    • 서비스 소비자 및 통화횟수와 통화시간을 메모리에 축적하고, 1분마다 정기적으로 모니터링 센터에 통계자료를 전송합니다.

    Dubbo 공식 웹사이트

    🎜Dubbo 공식 웹사이트: https://dubbo.apache.org/🎜

    Dubbo 소스 코드 분석: 초보자 가이드🎜

    🎜Dubbo는 Alibaba 기술팀에서 개발했기 때문에 문서화가 매우 중요합니다. 중국에 있는 우리에게 인간적인 관점에서 보면 한 마디로 매우 친절합니다. 🎜

    또한 Dubbo에는 많은 내용이 있습니다. 여기서는 하나씩 소개하지 않겠습니다. Dubbo官网上很多东西,我们就不在这里一一介绍了。

    建议大家都去官网逛逛。

    话不多说,咱们先来嗨一把!

    demo案例1

    我们先来搞一个没有注册中心的案例。

    我们搭建一个项目,并创建三个module

    • dubbo-demo
    • dubbo-demo-api
    • dubbo-demo-provider
    • dubbo-demo-consumer
      모두가 공식 웹 사이트를 방문하는 것이 좋습니다.
    • 더 이상 고민할 필요 없이 먼저 즐거운 시간을 보내세요!

    데모 사례 1

    등록 센터가 없는 경우부터 시작해 보겠습니다.

    우리는 프로젝트를 빌드하고 3개의 모듈:<p style="text-align: center;padding: 0px 0.5em;"></p> <ul class="list-paddingleft-2" data-tool="mdnice editor" style="margin-top: 8px;margin-bottom: 8px;padding-left: 25px;"><li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);"><code style="font-size: 14px;padding: 2px 4px; 테두리 반경: 4px; 여백 오른쪽: 2px; 여백 왼쪽: 2px; 배경색: rgba(27, 31, 35, 0.05); 글꼴 계열: " operator mono consolas monaco menlo word-break: break-all rgb>dubbo-demoDubbo 소스 코드 분석: 초보자 가이드
  • dubbo-demo-api
  • dubbo-demo- 제공자 code>🎜<li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);"><code style="font- 크기: 14px; 패딩: 2px 4px; 테두리 반경: 4px; 여백 오른쪽: 2px; 여백 왼쪽: 2px; 배경색: rgba(27, 31, 35, 0.05); 글꼴 계열: " consolas monaco menlo monospace break-all rgb>dubbo-demo-consumer🎜🎜🎜🎜프로젝트의 전체 구조는 다음과 같습니다. 🎜🎜🎜🎜🎜🎜🎜이제 코드에 대해 간략하게 설명하겠습니다. 🎜

    첫 번째는 pom종속성: pom依赖:

    <!--dubbo的依赖-->
    <dependency>
         <groupId>org.apache.dubbo</groupId>
         <artifactId>dubbo</artifactId>
         <version>3.0.4</version>
    </dependency>
    <!-- provider和consumer共用类-->
    <dependency>
         <groupId>com.tian.dubbo</groupId>
         <artifactId>dubbo-demo-api</artifactId>
         <version>1.0-SNAPSHOT</version>
    </dependency>
    로그인 후 복사

    consumer和provider项目都需要添加这两个依赖。

    api

    api主要是定义服务接口以及一些工具类,主要是供consumer和provider共用。

    在api中我们只定义了一个服务接口:DemoService

    package com.tian.dubbo.service;
    
    public interface DemoService {
        String sayHello(String msg);
    }
    로그인 후 복사

    然后打成jar,在consumer和provider项目中添加到pom.xml依赖里,最后两遍都可以使用了。

    provider

    在resources目录下创建一个目录META-INF.spring,然后在目录下创建一个application.xml,内容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
           xsi:schemaLocation="http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans.xsd        http://code.alibabatech.com/schema/dubbo        http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
        <!--Dubbo服务名称--> 
        <dubbo:application name="dubbo-provider"/>
        <!--不需要注册到服务注册中心--> 
        <dubbo:registry address="N/A"/>
        <!--端口和协议--> 
        <dubbo:protocol name="dubbo" port="20880"/>
        <!--我们的服务--> 
        <dubbo:service interface="com.tian.dubbo.service.DemoService" ref="demoService"/>
        <bean id="demoService" class="com.tian.dubbo.service.DemoServiceImpl"/>
    </beans>
    로그인 후 복사

    再在resources目录下创建一个日志打印的配置文件:log4j.properties

    ###set log levels###
    log4j.rootLogger=debug, stdout
    ###output to the console###
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.Target=System.out
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=[%d{dd/MM/yy HH:mm:ss:SSS z}] %t %5p %c{2}: %m%n
    로그인 후 복사

    在定义一个业务实现类:DemoServiceImpl

    package com.tian.dubbo.service;
    
    public class DemoServiceImpl implements DemoService {
        public String sayHello(String msg) {
            System.out.println("msg= " + msg);
            return "SUCCESS";
        }
    }
    로그인 후 복사

    再就是定义一个provider的启动类:ProviderMain

    package com.tian.dubbo;
    
    import org.apache.dubbo.container.Main;
    
    public class ProviderMain {
        public static void main(String[] args) {
            Main.main(args);
        }
    }
    로그인 후 복사
    로그인 후 복사
    < blockquote data-tool="mdnice editor" style="border-top: none;border-right: none;border-bottom: none;font-size: 0.9em;overflow: auto;color: rgb(106, 115, 125 ); 패딩: 10px 10px 10px 20px; 여백 하단: 20px; 여백 상단: 20px; 테두리 왼쪽 색상: rgb(239, 112, 96); 배경: rgb(255, 249, 249);"> < p style="font-size: 16px;padding-top: 8px;padding-bottom: 8px;color: black;line-height: 26px;">소비자 프로젝트와 공급자 프로젝트 모두 이 두 가지 종속성을 추가해야 합니다.

    api

    🎜 API는 주로 소비자와 공급자가 공유하는 서비스 인터페이스와 일부 도구 클래스를 정의합니다. 🎜🎜API에서는 하나의 서비스 인터페이스만 정의합니다: DemoService 🎜
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
           xsi:schemaLocation="http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans.xsd        http://code.alibabatech.com/schema/dubbo        http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
        <!-- 服务名称-->
        <dubbo:application name="dubbo-consumer"/>
        <!--不需要注册到服务注册中心--> 
        <!-- 通过url直接调用-->
        <dubbo:reference id="demoService"
                         interface="com.tian.dubbo.service.DemoService"
         url="dubbo://127.0.0.1:20880/com.tian.dubbo.service.DemoService"/>
    </beans>
    로그인 후 복사
    로그인 후 복사
    🎜 그런 다음 항아리에 넣고 소비자의 pom.xml 종속성, 마지막 두 번을 사용할 수 있습니다. 🎜

    provider

    🎜리소스 디렉토리 META-INF.spring , 그런 다음 application.xml</code >, 내용은 다음과 같습니다. 🎜<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>package com.tian.dubbo; import com.tian.dubbo.service.DemoService; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class ConsumerMain { public static void main(String[] args) { DemoService demoService = null; ApplicationContext context = new ClassPathXmlApplicationContext (&quot;classpath:META-INF/spring/application.xml&quot;); demoService = context.getBean(DemoService.class); //调用服务 System.out.println(demoService.sayHello(&quot;tian&quot;)); } }</pre><div class="contentsignin">로그인 후 복사</div></div><div class="contentsignin">로그인 후 복사</div></div>🎜리소스 디렉터리에 로그 인쇄 구성 파일을 생성합니다: <code style="font-size: 14px;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin - 왼쪽: 2px;배경 색상: rgba(27, 31, 35, 0.05); 글꼴 계열: "Operator Mono", Consolas, Monaco, Menlo, monospace; 단어 나누기: break-all; 색상: rgb(239 , 112, 96);">log4j.properties🎜
    <dependency>
         <groupId>org.apache.dubbo</groupId>
         <artifactId>dubbo-dependencies-zookeeper</artifactId>
         <version>3.0.4</version>
         <type>pom</type>
    </dependency>
    로그인 후 복사
    로그인 후 복사
    🎜는 비즈니스 구현 클래스를 정의합니다: DemoServiceImpl🎜
    <dubbo:registry address="N/A"/>
    로그인 후 복사
    로그인 후 복사
    🎜그런 다음 공급자 시작 클래스를 정의합니다: ProviderMain🎜
    package com.tian.dubbo;
    
    import org.apache.dubbo.container.Main;
    
    public class ProviderMain {
        public static void main(String[] args) {
            Main.main(args);
        }
    }
    로그인 후 복사
    로그인 후 복사

    注意:这里的Main类是Dubbo

    最后,我们启动ProviderMain类,日志输出:

    Dubbo 소스 코드 분석: 초보자 가이드

    好了,已经启动成功了。

    我们继续来看看consumer项目,在项目中,也就是调用我们服务的项目。

    consumer

    在consumer项目中application.xml配置文件和provider有所区别。

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
           xsi:schemaLocation="http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans.xsd        http://code.alibabatech.com/schema/dubbo        http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
        <!-- 服务名称-->
        <dubbo:application name="dubbo-consumer"/>
        <!--不需要注册到服务注册中心--> 
        <!-- 通过url直接调用-->
        <dubbo:reference id="demoService"
                         interface="com.tian.dubbo.service.DemoService"
         url="dubbo://127.0.0.1:20880/com.tian.dubbo.service.DemoService"/>
    </beans>
    로그인 후 복사
    로그인 후 복사

    这个url地址,我们在provider启动的时候,可以从日志中找到。

    日志文件和provider一样,然后就是ConsumerMain启动类了。

    package com.tian.dubbo;
    
    import com.tian.dubbo.service.DemoService;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class ConsumerMain {
        public static void main(String[] args) {
            DemoService demoService = null;
            ApplicationContext context = new ClassPathXmlApplicationContext
                    ("classpath:META-INF/spring/application.xml");
            demoService = context.getBean(DemoService.class);
            //调用服务
            System.out.println(demoService.sayHello("tian"));
        }
    }
    로그인 후 복사
    로그인 후 복사

    前面,我们已经把provider成功启动了,下面我们就来启动ConsumerMain

    Dubbo 소스 코드 분석: 초보자 가이드

    从日志可以看出我们已经成功调用了provider,我们再来看看provider的日志输出:

    Dubbo 소스 코드 분석: 초보자 가이드

    也成功的输出了我们想要的。

    到此,一个简单的入门无注册中心(通过url直接调用)的方式就完成了。

    url은 등록 센터에 대한 의존성을 없애기 때문에 공동 디버깅을 개발할 때 여전히 매우 유용합니다.

    데모 사례 2

    이전에 등록 센터 없이 시연했지만 이제는 등록 센터를 사용하여 시연하겠습니다.

    <코드 스타일="글꼴 크기: 14px;패딩: 2px 4px;국경 반경: 4px;마진-오른쪽: 2px;마진-왼쪽: 2px;배경-색상: rgba(27, 31, 35, 0.05) ;font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(239, 112, 96);">Dubbo는 현재 거의 모든 것을 지원합니다. 시장 모든 등록 센터: Dubbo目前差不多能支持市面上所有的注册中心:

    • consul
    • zookeeper
    • eureka
    • redis
    • etcd
    • nacos
    • ....

    我们在实际开发中,Dubbo注册中心大部分都是使用ZookeeperNacos

    下面们基于Zookeeper

      < li>
      consul
    • 사육사
    • 유레카
    • redis
    • etcd
    • nacos
    • ....

    실제 개발에서는 < 코드 스타일 ="글꼴 크기: 14px; 패딩: 2px 4px; 테두리 반경: 4px; 여백 오른쪽: 2px; 여백 왼쪽: 2px; 배경 색상: rgba(27, 31, 35, 0.05); 글꼴 계열: "Operator Mono", Consolas, Monaco, Menlo, monospace; word-break: break-all; color: rgb(239, 112, 96);">Dubbo 대부분의 등록 센터에서는 ZookeeperNacos.

    다음은 Zookeeper 시연합니다(Nacos도 유사하며 아래에서 언급됩니다).

    코드레벨🎜🎜이전 사례를 토대로 수정했습니다. 변환은 두 곳만 조정하면 됩니다: 🎜
    • consumer和provider中添加pom依赖
    • application.xml中添加注册中心
    pom依赖

    我们需要在前面demo中consumer和provider的pom.xml中添加Zookeeper的依赖:

    <dependency>
         <groupId>org.apache.dubbo</groupId>
         <artifactId>dubbo-dependencies-zookeeper</artifactId>
         <version>3.0.4</version>
         <type>pom</type>
    </dependency>
    로그인 후 복사
    로그인 후 복사
    provider端

    在provider项目中我们需要调整:

    <dubbo:registry address="N/A"/>
    로그인 후 복사
    로그인 후 복사

    改成:

    <dubbo:registry address="zookeeper://127.0.0.1:2181" timeout="10000"/>
    로그인 후 복사
    로그인 후 복사

    这个timeout建议配上,我这里其实没必要配,因为dubbo服务和Zookeeper都在我本地。

    然后我们启动provider项目:

    Dubbo 소스 코드 분석: 초보자 가이드

    看到我们的项目已经启动成功,并且已经注册到Zookeeper上了。

    我们可以使用Zookeeper的可视化工具,看看注册上去的信息。

    Dubbo 소스 코드 분석: 초보자 가이드

    我们再看看consumer端的调整。

    consumer端

    我们需要在application.xml中添加

    <dubbo:registry address="zookeeper://127.0.0.1:2181" timeout="10000"/>
    로그인 후 복사
    로그인 후 복사

    同时,去掉reference中的url:

    <dubbo:reference id="demoService"
                         interface="com.tian.dubbo.service.DemoService"
         url="dubbo://127.0.0.1:20880/com.tian.dubbo.service.DemoService"/>
    로그인 후 복사

    因为是通过Zookeeper注册中心拿到地址,所以这里的url就可以去掉了。

    最后,启动ConsumerMain类:

    Dubbo 소스 코드 분석: 초보자 가이드

    可以看到我们也成功调用服务,另外也有大量的Zookeeper日志。

    到此,说明,我们的Zookeeper为注册中心的demo案例也成功了。

    注意:provider和consumer项目都需要依赖相关jar包(api、zookeeper、dubbo)

    其他

    关于Nacos,我们这里就不演示了,因为太简单了,如果你把Nacos搭建好了后,直接配置就好了。

    <dubbo:registry address="nacos://127.0.0.1:8848" timeout="10000"/>
    로그인 후 복사

    就是把address地址改一下就可以了。

    Nacos 的演示,我们下一篇文章中见。

    总结

    本文分享了Dubbo入门案例的两个版本:无注册中心和Zookeeper注册中心。

  • 위 내용은 Dubbo 소스 코드 분석: 초보자 가이드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    본 웹사이트의 성명
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

    핫 AI 도구

    Undresser.AI Undress

    Undresser.AI Undress

    사실적인 누드 사진을 만들기 위한 AI 기반 앱

    AI Clothes Remover

    AI Clothes Remover

    사진에서 옷을 제거하는 온라인 AI 도구입니다.

    Undress AI Tool

    Undress AI Tool

    무료로 이미지를 벗다

    Clothoff.io

    Clothoff.io

    AI 옷 제거제

    AI Hentai Generator

    AI Hentai Generator

    AI Hentai를 무료로 생성하십시오.

    인기 기사

    R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
    1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. 최고의 그래픽 설정
    1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
    Will R.E.P.O. 크로스 플레이가 있습니까?
    1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

    뜨거운 도구

    메모장++7.3.1

    메모장++7.3.1

    사용하기 쉬운 무료 코드 편집기

    SublimeText3 중국어 버전

    SublimeText3 중국어 버전

    중국어 버전, 사용하기 매우 쉽습니다.

    스튜디오 13.0.1 보내기

    스튜디오 13.0.1 보내기

    강력한 PHP 통합 개발 환경

    드림위버 CS6

    드림위버 CS6

    시각적 웹 개발 도구

    SublimeText3 Mac 버전

    SublimeText3 Mac 버전

    신 수준의 코드 편집 소프트웨어(SublimeText3)

    SpringBoot+Dubbo+Nacos 개발 실습 튜토리얼 SpringBoot+Dubbo+Nacos 개발 실습 튜토리얼 Aug 15, 2023 pm 04:49 PM

    이 글에서는 dubbo+nacos+Spring Boot의 실제 개발에 대해 이야기하기 위해 자세한 예제를 작성하겠습니다. 이 기사에서는 이론적 지식을 너무 많이 다루지는 않지만 dubbo를 nacos와 통합하여 개발 환경을 신속하게 구축하는 방법을 설명하는 가장 간단한 예를 작성합니다.

    Dubbo가 Go로 다시 작성된 이유는 무엇입니까? Dubbo가 Go로 다시 작성된 이유는 무엇입니까? Apr 10, 2023 pm 12:51 PM

    몇 마디로 시작하겠습니다. 저는 걸을 때 가끔 한 가지 질문에 대해 오랫동안 생각하다가 납득할 수 있을 때까지 끝나지 않는 경우가 많습니다. 질문의 모든 점에 대해 나 자신입니다. 그래서 나는 이러한 생각들을 기록하여 새로운 시리즈로 활용할 수 있는 기사를 만들고 싶습니다. 이 기사에서는 코드를 볼 수 없을 수도 있지만 쉽게 간과되는 몇 가지 문제와 문제의 더 깊은 "이유"를 엿볼 수 있습니다. 오늘은 첫 번째 글, 왜 Dubbo를 Go로 다시 작성해야 할까요? Alibaba에서 탄생하여 2011년에 오픈 소스로 출시된 Dubbo가 10년의 세월을 거쳤습니다. 2019년에 Go로 다시 작성되어 오픈소스화되었으며, 이제 2년이 지나서 원래 V1.0.0 버전에서 V3.0.0으로 개발되었습니다.

    Java 기반 분산 서비스 프레임워크 Dubbo의 원리 및 사례 분석 Java 기반 분산 서비스 프레임워크 Dubbo의 원리 및 사례 분석 Apr 24, 2023 pm 08:13 PM

    서문 Dubbo를 소개하기 전에 먼저 기본 개념을 이해하겠습니다. Dubbo는 RPC 프레임워크입니다. RPC는 원격 프로시저 호출(Remote Procedure Call)이며, 그 반대는 단일 애플리케이션 아키텍처와 분산 아키텍처 이전의 수직 애플리케이션 아키텍처에서 사용됩니다. . 모두 로컬 프로시저 호출입니다. 이를 통해 프로그래머는 원격 호출의 세부 사항을 명시적으로 코딩하지 않고도 프로그램이 다른 주소 공간(일반적으로 네트워크에서 공유되는 다른 시스템)의 프로시저나 함수를 호출할 수 있습니다. 분산 아키텍처 애플리케이션 간의 원격 호출에는 원격 호출을 로컬 호출만큼 간단하게 만들기 위한 RPC 프레임워크가 필요합니다. Dubbo 프레임워크에는 원격 서비스를 호출하는 다음 구성요소인 Consumer가 있습니다.

    Dubbo 소스 코드 분석: 초보자 가이드 Dubbo 소스 코드 분석: 초보자 가이드 Aug 23, 2023 pm 02:44 PM

    이미 Dubbo를 능숙하게 사용하고 계신다면 이 글은 적합하지 않지만, Dubbo를 이해하고 Dubbo를 배우고 싶다면 매우 적합할 것입니다.

    Apache Dubbo 역직렬화 취약점을 분석하는 방법 Apache Dubbo 역직렬화 취약점을 분석하는 방법 May 17, 2023 pm 04:01 PM

    소개 Dubbo는 Alibaba가 오픈소스로 제공하는 고성능, 우수한 서비스 프레임워크로, 애플리케이션이 고성능 RPC를 통해 서비스 출력 및 입력 기능을 실현할 수 있도록 하며 Spring 프레임워크와 원활하게 통합될 수 있습니다. 인터페이스 지향 원격 메소드 호출, 지능형 내결함성 및 로드 밸런싱, 자동 서비스 등록 및 검색이라는 세 가지 핵심 기능을 제공합니다. 개요 2020년 6월 23일, ApacheDubbo는 ApacheDubbo 원격 코드 실행에 대한 위험 공지를 공식적으로 발표했습니다. 취약점 번호는 CVE-2020-1948이며 취약점 수준은 높음입니다. ApacheDubbo는 고성능 경량 오픈 소스 JavaRPC 프레임워크로 인터페이스 지향 원격이라는 세 가지 핵심 기능을 제공합니다.

    Java Spring Dubbo의 세 가지 SPI 메커니즘 간의 차이점은 무엇입니까? Java Spring Dubbo의 세 가지 SPI 메커니즘 간의 차이점은 무엇입니까? May 16, 2023 am 08:34 AM

    SPI는 어디에 사용되나요? 예를 들어, 이제 우리는 "슈퍼로거"라는 새로운 로깅 프레임워크를 설계했습니다. 기본적으로 XML 파일은 로그의 구성 파일로 사용되며 구성 파일 구문 분석을 위한 인터페이스가 설계되었습니다. packagecom.github.kongwu.spisamples; publicinterfaceSuperLoggerConfiguration{voidconfigure(StringconfigFile);} 그런 다음 기본 XML 구현이 있습니다. .github .kongwu.spisamples;publiccl

    더보의 원리와 메커니즘은 무엇인가요? 더보의 원리와 메커니즘은 무엇인가요? Jan 17, 2024 pm 03:25 PM

    Dubbo 원칙 및 메커니즘 설명: 1. 핵심 구성 요소 3. 클러스터 오류 허용 5. 로드 밸런싱 및 라우팅 7. 모니터링 , 확장성 9. 보안 10. Spring과의 통합 11. 다른 기술과의 통합. 자세한 소개: 1. 등록 센터, 모니터링 센터, 서비스 소비자 및 서비스 제공자를 포함한 핵심 구성 요소 Dubbo는 네트워크 통신 프레임워크를 사용하여 다양한 장기 연결을 제공합니다.

    Java Dubbo 아키텍처의 전반적인 설계 방식은 무엇입니까? Java Dubbo 아키텍처의 전반적인 설계 방식은 무엇입니까? Apr 27, 2023 pm 09:52 PM

    1. Dubbo 통화 관계 설명 1.1 여기의 구성 요소는 주로 네 부분으로 구성됩니다: 공급자: 서비스를 노출하는 서비스 공급자 프로토콜: 공급자와 소비자 간의 프로토콜 상호 작용 데이터를 담당합니다. 인터페이스 및 구현 컨테이너 : Dubbo의 운영 환경 컨슈머 : 원격 서비스를 호출하는 서비스 컨슈머 프로토콜 : 프로바이더와 컨슈머 사이의 프로토콜 상호작용 데이터를 담당 클러스터 : 프로바이더 측에서 목록 정보를 인지함 프록시 : 가능 Consumer의 인터페이스 호출 로직을 대신하는 공급자의 서비스 호출 에이전트로 이해됩니다. ●Register: 등록

    See all articles