Dubbo【Dubbo高级特性(服务限流实现) 、Dubbo实战(项目介绍、创建dubbo_parent父项目、创建user_api项目) 】(四)-全面详解(学习总结---从入门到深化)

 

目录

Dubbo高级特性_服务限流实现

Dubbo实战_项目介绍 

Dubbo实战_创建dubbo_parent父项目 

Dubbo实战_创建user_api项目

Dubbo实战_创建user_consumer项目

Dubbo实战_创建user_provider项目模块

 Dubbo实战_用户实体类构建


Dubbo高级特性_服务限流实现

为了防止某个消费者的QPS或是所有消费者的QPS总和突然飙升而导致的重要服务的失效,系统可以对访问流量进行控制,这种对集群的保护措施称为服务限流。

并发控制

@Service(executes = 10)

注意:

服务端并发执行(或占用线程池线程数)不能超过10个

连接控制 

@Service(actives= 10)

注意:

占用连接的请求的数不能超过10个。

Dubbo实战_项目介绍 

需求

完成用户表的CRUD操作。

技术架构

项目结构设计 

本项目采用maven分模块开发方式,即对整个项目拆分为几个maven工程,每个maven工程存放特定的一类代码。

解释:

  • user_api:公共接口
  • user_consumer:服务消费者
  • user_provider:服务生产者 

Dubbo实战_创建dubbo_parent父项目 

创建Maven项目

项目名和地址设置

 修改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实战_创建user_api项目

创建user_api子项目

创建Maven项目 

创建子项目

修改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实战_创建user_consumer项目

创建SpringBoot项目 

修改项目标记 

 观察项目出现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实战_创建user_provider项目模块

创建逻辑工程 

创建完成 

修改为逻辑工程

创建pojo,mapper,provider工程

 目录结构如

 Dubbo实战_用户实体类构建

 Docker构建Mysql数据库

docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

 创建数据库

create database test;

 创建用户表

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;
}

mapper工程引入pojo工程

    <dependencies>
        <dependency>
            <groupId>com.tong</groupId>
            <artifactId>pojo</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

猜你喜欢

转载自blog.csdn.net/m0_58719994/article/details/131426244