Win10下springboot2.2.1+dubbo2.7.4.1+zookeeper3.5.6快速搭建

风流意气都作罢 提交于 2019-12-16 05:37:00

本文记录了博主在Win10下搭建springboot2.2.1+dubbo2.7.4.1+zookeeper3.5.6的全过程,旨在帮助开发者快速搭建最新版的springboot+dubbo项目,文末附有本文demo项目源码,方便开发者快速投入开发。

dubbo原理不在累赘,请移步至此。 dubbo基本概念

安装Zookeeper

1. 下载bin结尾的tar

下载Zookeeper1
下载Zookeeper2

2. 解压文件,在根目录下打开conf文件夹,复制zoo_sample.log为zoo.log

修改配置文件

3. 启动Zookeeper

2.1 打开 /根目录/bin
2.2 运行 zkServer.cmd

3. 常见错误:

3.1 找不到或无法加载主类 org.apache.zookeeper.server.quorum.QuorumPeerMain

带有bin名称的包才是我们需要的变异后的二进制包,下载时选择-bin结尾的包即可。
参考这篇博客

3.2 运行zkServer.cmd闪退,无任何错误信息

Windows下Zookeeper启动zkServer.cmd闪退问题的解决方案
在zkServer.cmd倒数第二行加入

pause

如图所示:
在zkServer.cmd加入pause

3.3 JAVA_HOME is incorrectly set

错误信息如图所示:
JAVA_HOME不正确
查看bin文件夹的几个.cmd文件,博主发现zkEnv.cmd有关于JAVA_HOME的检测,如图所示:
查看zkEnv.cmd
打开cmd,输入以下命令,查看JAVA_HOME

    set  

正确的JAVA_HOME配置应如图所示
cmd set 查看环境变量
win10配置JAVA_HOME环境变量

安装Dubbo

Dubbo Admin官方说明

安装

1. 使用git clone源码
git clone https://github.com/apache/dubbo-admin.git
cd dubbo-admin
mvn clean package
cd dubbo-admin-distribution/target
java -jar dubbo-admin-0.1.jar
或者在github apache/dubbo-admin下载源码编译

在根目录打开cmd,输入指令:

mvn -s "C:\Users\developer\.m2\setting_aliyun.xml" -DskipTests clean package
cd dubbo-admin-distribution/target
java -jar dubbo-admin-0.1.jar

在当前目录打开cmd

查看Dubbo Admin

http://localhost:8080

博主将端口修改为8081 修改端口。运行效果如图:
Dubbo Admin

创建dubbo配置项
dubbo配置项详情

无元数据信息,请升级至Dubbo2.7及以上版本,或者查看application.properties中关于config center的配置,详见这里

应用名

global

配置内容

dubbo.registry.address=zookeeper://127.0.0.1:2181 
dubbo.metadata-report.address=zookeeper://127.0.0.1:2181

SpringBoot整合dubbo示例

一、创建父项目

<?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>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.1.RELEASE</version>
        <relativePath/>
    </parent>

    <groupId>per.vastzhang</groupId>
    <artifactId>springboot_dubbo_demo</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>api</module>
        <module>provider</module>
        <module>consumer</module>
    </modules>

    <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>
    </dependencies>

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

二、定义API(API模块)

1. 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>springboot_dubbo_demo</artifactId>
        <groupId>per.vastzhang</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>api</artifactId>

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

</project>

2. 定义api

public interface TestService {
    String sayHello();

    String getName(String name);
}

3.springboot启动类

@SpringBootApplication
public class DubboApiApplication {

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

}

二、服务提供者(provider模块)

1. 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>springboot_dubbo_demo</artifactId>
        <groupId>per.vastzhang</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>provider</artifactId>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <!--zookeeper 注册中心客户端引入 使用的是curator客户端 -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-dependencies-zookeeper</artifactId>
            <version>2.7.4.1</version>
            <type>pom</type>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- dubbo 2.7.x引入-->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.4.1</version>
        </dependency>
        <dependency>
            <groupId>per.vastzhang</groupId>
            <artifactId>api</artifactId>
            <version>1.0-SNAPSHOT</version>
            <scope>compile</scope>
        </dependency>

    </dependencies>

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

2. 实现API接口

@Service(version = "1.0.0")
public class TestServiceImpl implements TestService {
    @Override
    public String sayHello() {
        return "Hello Dubbo!";
    }

    @Override
    public String getName(String name) {
        return name;
    }
}

3. springboot配置文件 - application.properties

# Spring boot application
spring.application.name=springboot-dubbo-provider-demo
# Base packages to scan Dubbo Component: @org.apache.dubbo.config.annotation.Service
dubbo.scan.base-packages=com.demo.dubbo_provider.impl
# Dubbo Application
## The default value of dubbo.application.name is ${spring.application.name}
dubbo.application.name=${spring.application.name}
# Dubbo Protocol
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
## Dubbo Registry
dubbo.registry.address=zookeeper://127.0.0.1:2181
server.port=8083
#如果有Can't assign address异常需要加vm参数:
#-Djava.net.preferIPv4Stack=true

4.springboot启动类

@SpringBootApplication
public class DubboProviderApplication {

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

}

三、服务消费者(consumer模块)

1. 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>springboot_dubbo_demo</artifactId>
        <groupId>per.vastzhang</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>consumer</artifactId>

    <dependencies>
        <dependency>
            <groupId>per.vastzhang</groupId>
            <artifactId>api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <!--zookeeper 注册中心客户端引入 使用的是curator客户端 -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-dependencies-zookeeper</artifactId>
            <version>2.7.4.1</version>
            <type>pom</type>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- dubbo 2.7.x引入-->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.4.1</version>
        </dependency>
    </dependencies>

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

</project>

2. 实现controller

@RestController
public class TestDubboController {
    @Reference(version = "1.0.0")
    private TestService service;

    @GetMapping("sayHello")
    public String sayHello() {
        return service.sayHello();
    }
    @GetMapping("getName")
    public String getName(@RequestParam("name") String name) {
        return service.getName(name);
    }
}

3. springboot配置文件 - application.properties

spring.application.name=dubbo-consumer-demo
dubbo.registry.address=zookeeper://127.0.0.1:2181
server.port=8082
#如果有Can't assign address异常需要加vm参数:
#-Djava.net.preferIPv4Stack=true

4.springboot启动类

@SpringBootApplication
public class DubboConsumerApplication {

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

}

测试效果

访问dubbo管理后台

http://127.0.0.1:8081/
管理控制台

测试provider

http://127.0.0.1:8082/sayHello
sayHellog
http://127.0.0.1:8082/getName?name=MyName
MyName

github演示demo源码下载

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!