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 의 사용 데모 가 완료 되 었 습 니 다.한번 해 보 세 요.이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[MeU] Hashtag 기능 개발➡️ 기존 Tag 테이블에 존재하지 않는 해시태그라면 Tag , tagPostMapping 테이블에 모두 추가 ➡️ 기존에 존재하는 해시태그라면, tagPostMapping 테이블에만 추가 이후에 개발할 태그 기반 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.