dubbo+zookeeper的简单demo

dubbo+zookeeper的简单demo

首先放上dubbo官网 dubbo.apache.org ,官网的介绍还是比较全面的。

目录

1、分布式服务架构简介

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

Dubbo架构流程图


Provider:服务提供方
Consumer:服务消费者
Registry:注册中心
Monitor:统计服务调用次数调用间的监控中心
Container:容器管理服务的生命周期

调用流程
0.启动服务提供者。
1.服务提供者在启动时,向注册中心注册自己提供的服务。
2.服务消费者在启动时,向注册中心订阅自己所需的服务。
3.注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
4.服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用
5.服务消费者和提供者,在内存中累计调用次数调用时间,定时每分钟发送一次统计数据到监控中心。

注册中心
服务提供方:针对所提供的服务到注册中心发布。
服务消费方:到服务中心订阅所需的服务。
对于任何一方,不论服务提供方或者服务消费方都有可能同时兼具两种角色,即需要提供服务也需要消费服务。

2、安装zookeeper

官网下载zookeeper,下载好之后解压打开解压后的文件夹,新建data和log的文件夹。进入conf目录,拷贝zoo_sample.cfg,重命名为zoo.cfg。使用文本编辑器打开zoo.cfg,更改dataDir=/tmp/zookeeper为(data和log所在路径)

dataDir=H:\tools\apache-zookeeper-3.6.1-bin\conf
dataLogDir=H:\tools\apache-zookeeper-3.6.1-bin\log

进入bin目录,双击zkServer.cmd启动

在这里插入图片描述

3、安装dubbo-admin

下载dubbo-admin,解压并进入dubbo-admin文件夹,在空白处shift+右键,打开dos命令,执行

mvn package -Dmaven.skip.test=true

将打好的war包放入tomcat的webapps目录下,双击startup.bat启动tomcat,会在webapps下生成解压war包后文件夹,关掉tomcat启动窗口,进入webapps\dubbo-admin-2.6.0\WEB-INF,文本编辑器打开dubbo.properties,输入一下配置并保存。

dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.admin.root.password=root
dubbo.admin.guest.password=guest

在这里插入图片描述


删掉ROOT,将dubbo-admin-2.6.0文件重命名为ROOT。双击startup.bat启动tomcat。访问http://localhost:8080,账号密码都是root

在这里插入图片描述

4、创建父工程demo-dubbo

新建maven工程

在这里插入图片描述


修改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>

    <groupId>com.tao</groupId>
    <artifactId>demo-dubbo</artifactId>
    <packaging>pom</packaging>
    <version>1.0.0</version>
    <!-- module是该工程下的所有子模块-->
    <modules>
        <module>demo-dubbo-api</module>
        <module>demo-dubbo-provider</module>
        <module>demo-dubbo-consumer</module>
    </modules>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.1.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>com.alibaba.spring.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.10</version>
        </dependency>
    </dependencies>

</project>

5、父工程下创建子模块demo-dubbo-api

在demo-dubbo工程下新建子模块demo-dubbo-api,同样是maven项目,修改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">
    <parent>
        <artifactId>demo-dubbo</artifactId>
        <groupId>com.tao</groupId>
        <version>1.0.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>demo-dubbo-api</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.0.1.RELEASE</version>
        </dependency>
        <!--com.dubbo-springBoot依赖 -->
        <dependency>
            <groupId>com.alibaba.spring.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.10</version>
        </dependency>
    </dependencies>

</project>

新建接口TestService.java

在这里插入图片描述

package com.tao.service;

public interface TestService {
    String test();
}

6、父工程下创建子模块demo-dubbo-provider

在demo-dubbo工程下新建子模块demo-dubbo-provider,这次新建springboot项目。

在这里插入图片描述


修改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>
    <artifactId>demo-dubbo-provider</artifactId>
    <parent>
        <groupId>com.tao</groupId>
        <artifactId>demo-dubbo</artifactId>
        <version>1.0.0</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>com.tao</groupId>
            <artifactId>demo-dubbo-api</artifactId>
            <version>1.0.0</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

修改application.properties如下

server.port=8001
spring.dubbo.application.id=demo-dubbo-provider
spring.dubbo.application.name=demo-dubbo-provider
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
spring.dubbo.server=true
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=20880

新建TestService.java的实现类TestServiceImpl.java

在这里插入图片描述

package com.tao.demodubboprovider.service.impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.tao.service.TestService;
import org.springframework.stereotype.Component;

@Service(interfaceClass = TestService.class)
@Component
public class TestServiceImpl implements TestService {
    public String test() {
        return "Hello world";
    }
}

在启动类DemodubboProviderApplication.java上加上注解@EnabledubboConfiguration

package com.tao.demodubboprovider;

import com.alibaba.dubbo.spring.boot.annotation.EnabledubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnabledubboConfiguration
public class DemodubboProviderApplication {

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

}

7、父工程下创建子模块demo-dubbo-consumer

在demo-dubbo工程下新建子模块demo-dubbo-consumer,这次也是新建springboot项目。
修改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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <artifactId>demo-dubbo-consumer</artifactId>
    <parent>
        <groupId>com.tao</groupId>
        <artifactId>demo-dubbo</artifactId>
        <version>1.0.0</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>com.tao</groupId>
            <artifactId>demo-dubbo-api</artifactId>
            <version>1.0.0</version>
        </dependency>

    </dependencies>

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

</project>

修改application.properties如下

server.port=8002
#dubbo 服务消费者配置
spring.dubbo.application.name=demo-dubbo-consumer
spring.dubbo.application.id=demo-dubbo-consumer
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
spring.dubbo.protocol.port=20800
spring.dubbo.protocol.name=dubbo

新建TestController.java

在这里插入图片描述

package com.tao.demodubboconsumer.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import com.tao.service.TestService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class TestController {

    @Reference
    public TestService testService;

    @ResponseBody
    @RequestMapping("/")
    public String test(){
        return testService.test();
    }
}

在启动类DemodubboConsumerApplication.java上加上注解@EnabledubboConfiguration

8、启动项目

运行DemodubboProviderApplication.java和DemodubboConsumerApplication.java启动项目。观察dubbo-admin,访问localhost:8002。成功

在这里插入图片描述


在这里插入图片描述

9、各项目maven依赖结构

在这里插入图片描述

相关文章

在网络请求时,总会有各种异常情况出现,我们需要提前处理这...
作者:宇曾背景软件技术的发展历史,从单体的应用,逐渐演进...
hello,大家好呀,我是小楼。最近一个技术群有同学at我,问我...
 一个软件开发人员,工作到了一定的年限(一般是3、4年左右...
当一个服务调用另一个远程服务出现错误时的外观Dubbo提供了多...
最近在看阿里开源RPC框架Dubbo的源码,顺带梳理了一下其中用...