Spring Boot整合Dubbo搭建实例

目录

1 API模块

1.1 pom.xml

1.2 UserService

2 服务提供者模块

2.1 pom.xml

2.2 application.properties

2.3 启动类

2.4 UserServiceImpl

3 服务消费者模块

3.1 pom.xml

3.2 application.properties

3.3 启动类

3.4 UserController

4 运行及结果

5 Dubbo Admin


我搭建所使用的Spring Boot版本是2.1.8.RELEASE,dubbo-spring-boot-starter的版本是2.7.3,ZooKeeper的版本是3.4.14。


1 API模块

API模块由服务提供方为服务消费方暴露接口,一般将接口和pojo放入其中,提供者和消费者引入该模块即可。创建一个Spring Boot模块,命名为dubbo-user-interface。

1.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 https://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.1.8.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.hys</groupId>
    <artifactId>dubbo-user-interface</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>dubbo-user-interface</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.3</version>
        </dependency>
    </dependencies>

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

</project>

1.2 UserService

package com.hys.dubbo.user.service;

public interface UserService {

    String sayHello(String name);
}

2 服务提供者模块

创建一个Spring Boot模块,命名为dubbo-user-provider。

2.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 https://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.1.8.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.hys</groupId>
    <artifactId>dubbo-user-provider</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>dubbo-user-provider</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.hys</groupId>
            <artifactId>dubbo-user-interface</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.14</version>
            <type>pom</type>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>2.13.0</version>
        </dependency>
    </dependencies>

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

</project>

2.2 application.properties

dubbo.application.name=dubbo-user-provider
dubbo.registry.protocol=zookeeper
dubbo.registry.address=192.168.253.129:2181,192.168.253.129:2182,192.168.253.129:2183
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
dubbo.monitor.protocol=registry

2.3 启动类

package com.hys.dubbo;

import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@EnableDubbo
@SpringBootApplication
public class DubboUserProviderApplication {

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

}

2.4 UserServiceImpl

package com.hys.dubbo.user.service.impl;

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

@Service(version = "1.0.0", timeout = 10000, interfaceClass = UserService.class)
public class UserServiceImpl implements UserService {

    @Override
    public String sayHello(String name) {
        return "Hello " + name + " !";
    }
}

这里需要注意的是@Service注解使用的是Dubbo而不是Spring的注解。


3 服务消费者模块

创建一个Spring Boot模块,命名为dubbo-user-consumer。

3.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 https://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.1.8.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.hys</groupId>
    <artifactId>dubbo-user-consumer</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>dubbo-user-consumer</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.hys</groupId>
            <artifactId>dubbo-user-interface</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.14</version>
            <type>pom</type>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>2.13.0</version>
        </dependency>
    </dependencies>

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

</project>

3.2 application.properties

server.port=8081
dubbo.application.name=dubbo-user-consumer
dubbo.registry.address=zookeeper://192.168.253.129:2181,192.168.253.129:2182,192.168.253.129:2183
dubbo.monitor.protocol=registry

3.3 启动类

package com.hys.dubbo;

import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@EnableDubbo
@SpringBootApplication
public class DubboUserConsumerApplication {

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

}

3.4 UserController

package com.hys.dubbo.user.controller;

import com.hys.dubbo.user.service.UserService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/dubbo")
public class UserController {

    @Reference(version = "1.0.0")
    private UserService userService;

    @RequestMapping("/sayHello/{name}")
    public String sayHello(@PathVariable("name") String name) {
        String result = userService.sayHello(name);
        return result;
    }
}

4 运行及结果

分别启动上述三个Spring Boot模块,页面访问http://localhost:8081/dubbo/sayHello/Robert Hou,结果如下所示:

由上可以看到,访问成功,并且在ZooKeeper中可以看到已经含有Dubbo的相关注册信息了:


5 Dubbo Admin

新版本Dubbo Admin的运行需要依赖于Node.js,在官网上下载即可:

下载完成后打开cmd,输入npm查看该命令是否可用:

然后输入以下的命令来配置国内的镜像站(不配置的话,在后续打包的过程中会等待非常久的时间):

npm config set registry=https://registry.npm.taobao.org

配置好了后会在C盘用户下生成一个.npmrc的文件:

打开后里面的内容即是我们刚才配置的镜像地址:

之后,我们克隆dubbo-admin的项目代码到当前的工作空间:

git clone https://github.com/apache/dubbo-admin.git

克隆完毕后,我的idea工作空间如下所示:

修改其中dubbo-admin-server子模块中的application.properties文件中的内容,将其中ZooKeeper的注册信息改成相应的内容(如果是本地开启的ZooKeeper,则不需要更改。我是虚拟机搭建的ZooKeeper伪集群,需要更改):

# centers in dubbo2.7
admin.registry.address=zookeeper://192.168.101.128:2181,192.168.101.128:2182,192.168.101.128:2183
admin.config-center=zookeeper://192.168.101.128:2181,192.168.101.128:2182,192.168.101.128:2183
admin.metadata-report.address=zookeeper://192.168.101.128:2181,192.168.101.128:2182,192.168.101.128:2183

最后就是利用idea自身的maven插件进行打包,如果打包成功后,会在dubbo-admin\dubbo-admin-distribution\target路径下生成一个dubbo-admin-0.1.jar文件,如下所示:

java -jar运行它,页面访问http://localhost:8080,即可看到管理页面:

 

发布了62 篇原创文章 · 获赞 80 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/weixin_30342639/article/details/100839249