分布式系列~07.使用Maven统一管理RPC项目的资源,负载均衡

分布式系列~07.使用Maven统一管理RPC项目的资源,负载均衡

本文是上一篇文章的后续,详情点击该链接~

使用Maven统一管理RPC项目的资源

       一个RPC项目包含服务提供者和服务消费者项目。使用Maven作为RPC项目的资源管理工具,对RPC项目的资源进行统一管 理。

Maven项目之间的关系:

依赖关系:

       作用:

              告诉Maven帮助我们导入第三方的资源

       使用:

              在当前项目的pom.xml文件中配置资源坐标

Maven项目之间的关系:

依赖关系:

       作用:

              告诉Maven帮助我们导入第三方的资源

       使用:

              创建pom类型的项目,在其pom.xml文件中声明公共资源坐 标。其他项目继承即可。

继承关系:

       作用:

              统一管理不同的项目之间的公共资源

       使用:

              在当前项目的pom.xml文件中配置资源坐标

聚合关系:

       作用:

              将一个功能拆分为不同的Maven的moudle项目,便于分别打 包,而不 是整个项目打包

       使用:

              创建一个pom类型的项目,并创建子Moudle

建立父子项目

在这里插入图片描述

父项目依赖

<?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>

    <groupId>com.alvin</groupId>
    <artifactId>parent</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>api</module>
        <module>provide</module>
        <module>customer</module>
    </modules>

    <!--继承SpringBoot项目-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.10.RELEASE</version>
    </parent>
    <!--配置要被管理的依赖-->
    <dependencyManagement>
        <dependencies>
            <!--SpringBoot的启动器依赖-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
                <version>2.1.10.RELEASE</version>
            </dependency>
            <!--web启动器的依赖-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <version>2.1.10.RELEASE</version>
            </dependency>
            <!--dubbo的依赖-->
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-spring-boot-starter</artifactId>
                <version>2.7.3</version>
            </dependency>
            <!--zk的依赖-->
            <dependency>
                <groupId>org.apache.curator</groupId>
                <artifactId>curator-recipes</artifactId>
                <version>4.2.0</version>
            </dependency>
            <dependency>
                <groupId>org.apache.curator</groupId>
                <artifactId>curator-framework</artifactId>
                <version>4.2.0</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

</project>

子项目继承父项目,导入所需依赖以及公共资源

在这里插入图片描述

公共资源:UserService

public interface UserService {
    String showMsg(String str);
}
application.yml配置文件(提供者和消费者)
##配置Zookeeper的连接信息
dubbo:
  application:
    name: dubbo-provider
  registry:
    address: zookeeper://192.168.147.128:2181
  ##配置服务提供者的端口号
  protocol:
    port: 20880
提供者:UserServiceImpl

       注意:service要导入dubbo而不是spring

import com.alvin.dubbo.service.UserService;
import org.apache.dubbo.config.annotation.Service;

@Service
public class UserServiceImpl implements UserService {
    @Override
    public String showMsg(String str) {
        return "hello : " + str ;
    }
}
消费者:Controller
import com.alvin.dubbo.service.UserService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class CustomerController {
    @Reference
    private UserService userService;
    @RequestMapping("demo")
    @ResponseBody
    public String showMsg(String show){
        String s = userService.showMsg(show);
        return s;
    }
}
启动类

       别忘了这个注释 : @EnableDubbo

@SpringBootApplication
@EnableDubbo
public class Customer {
    public static void main(String[] args) {
        SpringApplication.run(Customer.class,args);
    }
}
启动的时候先启动提供者,再启动消费者

Dubbo内置的负载均衡策略

       集群:一个服务,部署多次,形成的整体称为集群。集群中每个个体应该部署到不同的服务器上。并且链接集群中的任意节点都能获取到相同的服务。

       伪集群:没有真实的电脑主机,通过模拟集群的特点来完成集群服务。

zookeeper集群

       负载均衡是在集群前提下,当访问整个集群时,集群中每个节点被访问次数或频率的规则。

       Dubbo 内置了四个负载均衡策略。默认为Random

内置策略

Random

       随机。随机访问集群中节点。访问概率和权重有关。

RoundRobin

       轮询。访问频率和权重有关。
       权重(weight):占有比例。集群中每个项目部署的服务器的性能可能是不同,性能好的服务器权重应该高一些。

LeastActive

       活跃数相同的随机,不同的活跃数高的放前面。

ConsistentHash

       一致性Hash。相同参数请求总是发到一个提供者。

Provider集群

       新建四个启动类。每次启动启动类修改配置文件dubbo.protocal.port

设置负载均衡

我们直接从刚刚的代码基础上来做修改
配置文件
dubbo:
  application:
    name: dubbo-provider
  registry:
    address: zookeeper://192.168.147.128:2181
  protocol:
    port: 20884
  provider:
    loadbalance: random
  consumer:
    loadbalance: random
@Reference

       调用的服务采用的负载均衡

@Controller
public class CustomerController {
    @Reference(loadbalance = "roundrobin")
    private UserService userService;
@Service

       当前服务采用的负载均衡算法

@Service(loadbalance = "random")
public class UserServiceImpl implements UserService {

猜你喜欢

转载自blog.csdn.net/qq_41424688/article/details/107749356
今日推荐