Spring 통합 Dubbo 프레임 워 크 과정 및 원리 분석

이 글 은 주로 Spring 통합 Dubbo 프레임 워 크 과정 과 원리 해석 을 소개 하 였 으 며,예시 코드 를 통 해 매우 상세 하 게 소개 하 였 으 며,여러분 의 학습 이나 업무 에 대해 어느 정도 참고 학습 가 치 를 가지 고 있 으 므 로 필요 한 분 들 은 참고 하 시기 바 랍 니 다.
Dubbo 는 RPC 프레임 워 크 로 서 가장 핵심 적 인 기능 은 네트워크 를 뛰 어 넘 는 원 격 호출 을 실현 하 는 것 이다.프레젠테이션 프로 세 스 는 서비스 제공 자로 서 서비스 소비자 로 서 두 개의 작은 프로젝트 를 만 듭 니 다.Dubbo 를 통 해 서비스 소비자 가 원 격 으로 서비스 제공 자 를 호출 하 는 방법 을 실현 한다.
dubbo 의 사용 은 등록 센터 가 필요 합 니 다.여 기 는 Zookeeper 를 예 로 들 어 보 여 줍 니 다.
1.Dubbo 구조
Dubbo 구조 도(Dubbo 공식 제공)는 다음 과 같다.


노드 캐릭터 설명:
노드
캐릭터 이름
Provider
노출 서비스 제공 자
Consumer
원 격 서비스 소비 자 를 호출 하 다.
Registry
서비스 등록 및 발 견 된 등록 센터
Monitor
서비스의 호출 횟수 와 호출 시간 을 통계 하 는 모니터링 센터
Container
서비스 실행 용기
호출 관계 설명:
서비스 용 기 는 시작,로드,서비스 제공 자 를 실행 합 니 다.
서비스 제공 자 는 시작 할 때 등록 센터 에 자신 이 제공 하 는 서 비 스 를 등록 합 니 다.
서비스 소비 자 는 시작 할 때 등록 센터 에 자신 이 필요 로 하 는 서 비 스 를 구독 한다.
등록 센터 는 서비스 제공 자의 주소 목록 을 소비자 에 게 되 돌려 주 고 변경 이 있 으 면 등록 센터 는 긴 연결 을 바탕 으로 변경 데 이 터 를 소비자 에 게 전송 할 것 이다.
서비스 소비 자 는 공급 자 주소 목록 에서 소프트 부하 균형 알고리즘 을 바탕 으로 공급 자 를 선택 하여 호출 하고 호출 에 실패 하면 다른 호출 을 선택 합 니 다.
서비스 소비자 와 공급 자 는 메모리 에 호출 횟수 와 호출 시간 을 누적 하고 정 해진 시간 에 1 분 에 한 번 씩 통계 데 이 터 를 모니터링 센터 로 보 냅 니 다.
2.서비스 제공 자 개발
(1)maven 프로젝트 만 들 기(포장 방식 은 war)dubbodemoprovider,의존 pom.xml 코드 를 추가 하면 다음 과 같 습 니 다.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  
  <modelVersion>4.0.0</modelVersion>
  <packaging>war</packaging>
  
  <artifactId>dubbodemo_provider</artifactId>
 <dependencys>
 <!-- dubbo   -->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>dubbo</artifactId>
      <version>2.6.6</version>
    </dependency>
    <!-- dubbo2.6.X        2.8.4    -->
    <dependency>
      <groupId>io.netty</groupId>
      <artifactId>netty-all</artifactId>
      <version>4.1.32.Final</version>
    </dependency>
    <dependency>
      <groupId>org.apache.curator</groupId>
      <artifactId>curator-framework</artifactId>
      <version>4.0.0</version>
      <exclusions>
        <exclusion>
          <groupId>org.apache.zookeeper</groupId>
          <artifactId>zookeeper</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.apache.zookeeper</groupId>
      <artifactId>zookeeper</artifactId>
      <version>3.4.7</version>
    </dependency>
    <dependency>
      <groupId>com.github.sgroschupf</groupId>
      <artifactId>zkclient</artifactId>
      <version>0.1</version>
    </dependency>
    <dependency>
      <groupId>javassist</groupId>
      <artifactId>javassist</artifactId>
      <version>3.12.1.GA</version>
    </dependency>
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.47</version>
    </dependency>
  </dependencys>
 
</project>
(2)웹.xml 파일 설정

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns="http://java.sun.com/xml/ns/javaee"
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
     version="2.5">

 <!--         spring     -->
 <context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath:spring/applicationContext-provider.xml</param-value>
 </context-param>
 <listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener>

</web-app>
(3)서비스 인터페이스 만 들 기

package com.test.dubbo.api;
public interface HelloService {
  public String sayHello(String name);
}
(4)서비스 구현 클래스 만 들 기

package com.test.service.impl;

import com.test.dubbo.api.HelloService;
//  service   spring   , dubbo service   
import com.alibaba.dubbo.config.annotation.Service;

@Service //       zookeeper
public class HelloServiceImpl implements HelloService {
  public String sayHello(String name) {
   return "hello " + name;
  }
}
==주의==:서비스 구현 클래스 에서 사용 하 는 Service 주 해 는 Dubbo 가 제공 하 는 것 으로 대외 발표 서비스 에 사 용 됩 니 다.
(5)src/main/resources 에서 applicationContext-provider.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:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans.xsd
     http://www.springframework.org/schema/mvc
     http://www.springframework.org/schema/mvc/spring-mvc.xsd
     http://code.alibabatech.com/schema/dubbo
     http://code.alibabatech.com/schema/dubbo/dubbo.xsd
     http://www.springframework.org/schema/context
     http://www.springframework.org/schema/context/spring-context.xsd">
  <!--       ,               ,  :               -->
  <dubbo:application name="dubbodemo_provider" />
  <!--         zookeeper ip zookeeper      ip  -->
  <dubbo:registry address="zookeeper://127.0.0.1:2181"/>
  <!--       port       20880 -->
  <dubbo:protocol name="dubbo" port="20881"></dubbo:protocol>
  <!--      ,  @Service            -->
  <dubbo:annotation package="com.test.service.impl" />

</beans>
6)서 비 스 를 시작 하면 스프링 용 기 를 시작 하면 된다
tomcat 로 프로젝트 시작 가능
spring 프로필 을 main 방법 으로 불 러 올 수도 있 습 니 다.즉,spring 용 기 를 시작 한 것 입 니 다.
com.itheima 패키지 아래 DemoProvider 클래스 를 만들어 서 spring 용 기 를 시작 합 니 다.코드 는 다음 과 같 습 니 다.

package com.test;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.io.IOException;

public class DemoProvider {

  public static void main(String[] args) throws IOException {
//          ,    
    ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-provider.xml");
    app.start();
    System.in.read(); //       。              
  }
}
3.서비스 소비자 개발
개발 절차:
(1)maven 프로젝트 만 들 기(포장 방식 은 war)dubbodemoconsumer,pom.xml 설정 은 위 서비스 제공 자 와 같 습 니 다.
(2)웹.xml 파일 설정

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns="http://java.sun.com/xml/ns/javaee"
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
     version="2.5">

 <servlet>
  <servlet-name>springmvc</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <!--           ,    contextConfigLocation  -->
  <init-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>classpath:spring/springmvc.xml</param-value>
  </init-param>
 </servlet>

 <servlet-mapping>
  <servlet-name>springmvc</servlet-name>
  <url-pattern>*.do</url-pattern>
 </servlet-mapping>

</web-app>
(3)서비스 제공 자 프로젝트 의 HelloService 인 터 페 이 스 를 현재 프로젝트 로 복사
(4)작성 컨트롤 러

package com.test.controller;
import com.alibaba.dubbo.config.annotation.Reference;
import com.itheima.dubbo.api.HelloService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("/demo")
public class HelloController {
  @Reference//    dubbo   ,    @Autowired     
  private HelloService helloService;

  @RequestMapping("/hello")
  @ResponseBody
  public String getName(String name){
   //    
   String result = helloService.sayHello(name);
   System.out.println(result);
   return result;
  }
}
==주의==:Controller 에 HelloService 를 주입 하 는 것 은 Dubbo 가 제공 하 는@Reference 주석 을 사용 합 니 다.
(5)src/main/resources 에서 spring 폴 더 를 만 들 고 springmvc.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:aop="http://www.springframework.org/schema/aop"
    xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
    http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <!--spring    ,    spring   -->
  <context:component-scan base-package="cn.test"/>

  <!--  zookeeper        -->
  <dubbo:application name="dubbodemo_consumer"/>
  <!--      -->
  <dubbo:registry address="zookeeper://127.0.0.1:2181"/>
  <!--         dubbo  @Reference  -->
  <dubbo:annotation package="cn.test"/>

  <!--  timeout:        3  retries       -->
  <dubbo:consumer timeout="3000" retries="0"/>


</beans>
dubbo 의 사용 데모 가 완료 되 었 습 니 다.한번 해 보 세 요.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기