Dubbo+Dubbo-Admin+ZK+Boot-2.XX完美实现分布式治理

前言

这是本文的代码地址
https://github.com/Dylan-haiji/javayh-cloud/tree/javayh-dubbo/javayh-dubbo
欢迎各位star

Dubbo背景

随着Internet的快速发展,Web应用程序的规模不断扩大,最终我们发现传统的垂直架构(单片机)无法再处理这个问题。分布式服务架构和流量计算架构势在必行,迫切需要一个治理系统来确保架构的有序演进。
在这里插入图片描述

单片架构
当流量非常低时,只有一个应用程序,所有功能都部署在一起,以减少部署节点和成本。此时,数据访问框架(ORM)是简化CRUD工作负载的关键。

垂直建筑
当流量变大时,添加单片应用程序实例无法很好地加速访问,提高效率的一种方法是将单片机拆分为离散应用程序。此时,用于加速前端页面开发的Web框架(MVC)是关键。

分布式服务架构
当越来越多的垂直应用程序,应用程序之间的交互是不可避免的,一些核心业务被提取并作为独立服务,逐步形成一个稳定的服务中心,这样前端应用程序可以更多地响应市场需求的变化很快。此时,用于业务重用和集成的分布式服务框架(RPC)是关键。

流量计算架构
当服务越来越多时,容量评估变得困难,小规模的服务也经常导致资源浪费。为了解决这些问题,应该添加一个调度中心来管理基于流量的集群容量,并提高集群的利用率。此时,用于提高机器利用率的资源调度和治理中心(SOA)是关键。

以上来自官方介绍

Dubbo版本介绍

已发布最新版本

<dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>2.7.1</version>
</dependency>

历史版本
在这里插入图片描述
在最新版本的整合时会有些错误,还需要结合官方解决方案,本文采用的是历史版本

项目结构

在这里插入图片描述

相关依赖

父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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.javayh</groupId>
        <artifactId>javayh-cloud</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../</relativePath> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.javayh</groupId>
    <artifactId>javayh-dubbo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>javayh-dubbo</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <dubbo.version>0.2.0</dubbo.version>
        <zk.version>0.1</zk.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>com.javayh</groupId>
            <artifactId>javayh-commons</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

公用资源
<?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>
    <parent>
        <groupId>com.javayh</groupId>
        <artifactId>javayh-dubbo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../</relativePath> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.javayh</groupId>
    <artifactId>javayh-dubbo-api</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>javayh-dubbo-api</name>
    <packaging>jar</packaging>
    <description>javayh-dubbo-api</description>
    <dependencies>
        
    </dependencies>
</project>

生产者
<?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>
    <parent>
        <groupId>com.javayh</groupId>
        <artifactId>javayh-dubbo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../</relativePath> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.javayh</groupId>
    <artifactId>javayh-dubbo-server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>javayh-dubbo-server</name>
    <packaging>jar</packaging>
    <description>javayh-dubbo-server</description>
    <dependencies>
        <dependency>
            <groupId>com.javayh</groupId>
            <artifactId>javayh-dubbo-api</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <!-- springboot集成dubbo的起步依赖 -->
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>${dubbo.version}</version>
        </dependency>
        <!--引入zookeeper的客户端工具-->
        <!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>${zk.version}</version>
        </dependency>
    </dependencies>
</project>

消费者
<?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>
    <parent>
        <groupId>com.javayh</groupId>
        <artifactId>javayh-dubbo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../</relativePath> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.javayh</groupId>
    <artifactId>javayh-dubbo-client</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>javayh-dubbo-client</name>
    <packaging>jar</packaging>
    <description>javayh-dubbo-client</description>
    <dependencies>
        <dependency>
            <groupId>com.javayh</groupId>
            <artifactId>javayh-dubbo-api</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <!-- springboot集成dubbo的起步依赖 -->
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>${dubbo.version}</version>
        </dependency>
        <!--引入zookeeper的客户端工具-->
        <!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>${zk.version}</version>
        </dependency>
    </dependencies>

</project>

配置文件

消费者
spring:
  application:
    name: javayh-dubbo-client

server:
  port: 8022
dubbo:
  application:
    name: javayh-dubbo-client
  registry:
    address: zookeeper://127.0.0.1:2181
  monitor:
    protocol: registry
生产者
server:
  port: 8021

dubbo:
  application:
    name: javayh-dubbo-server
  registry:
    protocol: zookeeper
    address: 127.0.0.1:2181
  #通信规则(通信协议和接口)
  protocol:
    name: dubbo
    port: 20880
  monitor:
    protocol: registry
#开启包扫描,可替代 @EnableDubbo 注解
#  scan:
#    base-packages: com.javayh

RPC流程

1.在公用资源内声明接口
2.在生产者内实现
3.在消费者内调用
注:采用ZK注册中心

公用API
public interface  ApiService {

    ApiDubbo save();

    String findProt(String prot);

}
生产者
//这里的@Service注解是Dubbo内的,一定要引用对,
//关于版本号,如果生产者定义,消费者也必须采用相同的版本号
@Service(version = "javayh-0.1",interfaceClass = ApiService.class)
public class ApiServer implements ApiService{

    @Override
    public ApiDubbo save() {
        ApiDubbo apiDubbo = new ApiDubbo.ApiDubboBuilder().
                setApiName("javayh-dubbo-api").
                setApiType("AipDubbo.class").
                setApiUrl("javayh/dubbo/api/save").build();
        return apiDubbo;
    }

    @Override
    public String findProt(String prot) {
        return prot;
    }
}

消费者
@RestController
@RequestMapping(value = "/javayh/dubbo/api/")
public class AipController {

    @Reference(version = "javayh-0.1")
    private ApiService apiService;

    @GetMapping(value = "save")
    public Result save(){
        ApiDubbo apiDubbo1 = apiService.save();
        return Result.javaYhInsertSuccess(apiDubbo1);
    }

    @GetMapping(value = "ip/{prot}")
    public Result findProt(@PathVariable String prot){
        return Result.javaYhInsertSuccess(apiService.findProt(prot));
    }
}

启动类

@EnableDubbo  //也可以在配置文件内配置,生产者、消费者都需要配置
@SpringBootApplication
public class ServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ServerApplication.class, args);
    }

}
服务访问

在这里插入图片描述
此时服务已经调通

Dubbo-Admin

启动admin后可以观察到,我们现在的服务,说明配置正确
在这里插入图片描述

安装Admin方式:
方式一

最新的Admin采用的是前后端分离技术,需要单独部署

生产环境配置
  1. 下载代码: git clone https://github.com/apache/dubbo-admin.git

  2. dubbo-admin-server/src/main/resources/application.properties中指定注册中心地址

  3. 构建

    • mvn clean package
  4. 启动

    • mvn --projects dubbo-admin-server spring-boot:run
      或者
    • cd dubbo-admin-distribution/target; java -jar dubbo-admin-0.1.jar
  5. 访问 http://localhost:8080


开发环境配置
  • 运行dubbo admin server
    dubbo admin server是一个标准的spring boot项目, 可以在任何java IDE中运行它
  • 运行dubbo admin ui
    dubbo admin ui由npm管理和构建,在开发环境中,可以单独运行: npm run dev
  • 页面访问
    访问 http://localhost:8081, 由于前后端分开部署,前端支持热加载,任何页面的修改都可以实时反馈,不需要重启应用。
  • 跨域问题
    为了方便开发,我们提供了这种前后端分离的部署模式,主要的好处是支持前端热部署,在这种模式下,前端会通过8080端口访问后端的restful api接口,获取数据, 这将导致跨域访问的问题。因此我们在dubbo-admin-ui/config/index.js添加了支持跨域访问的配置,当前端通过npm run dev单独启动时,这些配置将被激活,允许跨域访问
Swagger 支持

部署完成后,可以访问 http://localhost:8080/swagger-ui.html 来查看所有的restful api

方式二

方式二安装简单,前后端没有分离,直接启动即可

  • 步骤1:
    git clone https://github.com/apache/incubator-dubbo-ops
  • 第2步:
    cd incubator-dubbo-ops && mvn package

这里只需要将Admin的配置内的ZK改成自己的即可

server.port=7001
spring.velocity.cache=false
spring.velocity.charset=UTF-8
spring.velocity.layout-url=/templates/default.vm
spring.messages.fallback-to-system-locale=false
spring.messages.basename=i18n/message
spring.root.password=root
spring.guest.password=guest

dubbo.registry.address=zookeeper://127.0.0.1:2181

希望对大家有所帮助,欢迎点赞转发!

关注 Java有货领取更多资料

联系小编。微信:372787553,带您进群互相学习
左侧小编微信,右侧获取免费资料
在这里插入图片描述

技术博客:https://blog.csdn.net/weixin_38937840

SpringCloud学习代码: https://github.com/Dylan-haiji/javayh-cloud

Redis、Mongo、Rabbitmq、Kafka学习代码: https://github.com/Dylan-haiji/javayh-middleware

AlibabaCloud学习代码:https://github.com/Dylan-haiji/javayh-cloud-nacos

SpringBoot+SpringSecurity实现自定义登录学习代码:https://github.com/Dylan-haiji/javayh-distribution

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小杨同学~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值