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依赖结构

在这里插入图片描述

10、代码地址

https://github.com/zhangtao8023/dubbo-demo

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值