목차
action_Create dubbo_parent 상위 프로젝트의 Dubbo
Dubbo 실제 전투_create user_api 프로젝트
Dubbo 실제 전투_create user_consumer 프로젝트
Dubbo 실제 전투_create user_provider 프로젝트 모듈
Dubbo 고급 기능_ 서비스 전류 제한 구현
특정 소비자의 QPS나 모든 소비자의 QPS 합이 갑자기 급증하여 중요한 서비스에 장애가 발생하는 것을 방지하기 위해 시스템에서 접근 트래픽을 제어할 수 있으며, 이러한 클러스터에 대한 보호 조치를 서비스 흐름 제한이라고 합니다. .
동시성 제어
@Service(executes = 10)
알아채다:
서버의 동시 실행(또는 스레드 풀의 스레드 수)은 10을 초과할 수 없습니다.
연결 제어
@Service(actives= 10)
알아채다:
연결을 점유하는 요청 수는 10을 초과할 수 없습니다.
Dubbo in Action_프로젝트 소개
필요
사용자 테이블의 CRUD 작업을 완료합니다.
기술 아키텍처
프로젝트 구조 설계
이 프로젝트는 maven 하위 모듈 개발 방법을 채택합니다. 즉, 전체 프로젝트를 여러 maven 프로젝트로 나누고 각 maven 프로젝트는 특정 유형의 코드를 저장합니다.
설명하다:
- user_api: 공용 인터페이스
- user_consumer: 서비스 소비자
- user_provider: 서비스 제작자
action_Create dubbo_parent 상위 프로젝트의 Dubbo
메이븐 프로젝트 만들기
프로젝트 이름 및 주소 설정
pom 파일 수정
하위 프로젝트 버전 설정
<properties>
<dubbo.spring.starter.version>2.7.6</dubbo.spring.starter.version>
<dubbo.registry.zookeeper.version>2.7.6</dubbo.registry.zookeeper.version>
<mybatisplus.spring.starter.version>3.5.0</mybatisplus.spring.starter.version>
<mysql.connector.version>5.1.49</mysql.connector.version>
</properties>
<dependencyManagement>
<dependencies>
<!-- Dubbo 依赖 -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>${dubbo.spring.starter.version}</version>
</dependency>
<!-- zookeeper 注册中心 依赖 -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-zookeeper</artifactId>
<version>${dubbo.registry.zookeeper.version}</version>
</dependency>
<!-- Mybatis plus 依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatisplus.spring.starter.version}</version>
</dependency>
<!--MySQL 数据库依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.connector.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
JDK 버전 설정
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
Dubbo 실제 전투_create user_api 프로젝트
user_api 하위 프로젝트 만들기
메이븐 프로젝트 만들기
하위 프로젝트 생성
pom 파일 수정
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-zookeeper</artifactId>
<exclusions>
<exclusion>
<artifactId>slf4j-log4j12</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<!--Dubbo Starter Dependency-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
</dependency>
Dubbo 실제 전투_create user_consumer 프로젝트
스프링부트 프로젝트 생성
항목 태그 편집
프로젝트에 2개의 상위 프로젝트가 있는지 확인합니다.
구성:
<dependencyManagement>
<!-- 引入父工程 dubbo_parent -->
<dependencies>
<dependency>
<groupId>com.tong</groupId>
<artifactId>dubbo_parent</artifactId>
<version>1.0-SNAPSHOT</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
pom 파일 수정
<?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
https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.tong</groupId>
<artifactId>user_consumer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>user_consumer</name>
<description>Demo project for SpringBoot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- 引入web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 引入 user_api 工程 -->
<dependency>
<groupId>com.tong</groupId>
<artifactId>user_api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<!-- 引入父工程 dubbo_parent -->
<dependencies>
<dependency>
<groupId>com.tong</groupId>
<artifactId>dubbo_parent</artifactId>
<version>1.0-SNAPSHOT</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Dubbo 실제 전투_create user_provider 프로젝트 모듈
논리 프로젝트 만들기
만들어진
로직 엔지니어링을 위해 수정됨
포조, 매퍼, 프로바이더 프로젝트 생성
다음과 같은 디렉토리 구조
Dubbo 실제 전투_사용자 엔터티 클래스 구성
Docker는 Mysql 데이터베이스를 구축합니다.
도커 실행 -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
데이터베이스 생성
데이터베이스 테스트 생성;
사용자 테이블 생성
CREATE TABLE user
(
id BIGINT(20) NOT NULL COMMENT '主键ID',
name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
age INT(11) NULL DEFAULT NULL COMMENT '年龄',
PRIMARY KEY (id)
);
사용자 엔터티 클래스 만들기
@Data
public class User implements Serializable {
// 用户id
private Long id;
// 用户名字
private String name;
// 用户年纪
private Integer age;
}
매퍼 프로젝트는 포조 프로젝트를 소개합니다
<dependencies>
<dependency>
<groupId>com.tong</groupId>
<artifactId>pojo</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>