TypechoJoeTheme

香草物语

统计
登录
用户名
密码
/
注册
用户名
邮箱
输入密码
确认密码

使用docker部署dubbo/dubbox并实现服务提供者、消费者

Laughing博主
2021-07-20
/
0 评论
/
831 阅读
/
956 个字
/
百度已收录
07/20
本文最后更新于2024年03月21日,已超过183天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!

实现目标

基于centos 7,通过docker打包部署dubbox(2.8.4),并实现简单的服务提供者与消费者。

前置条件

  • 服务器安装JDK1.8并正确配置环境变量
  • 开发环境安装JDK1.8并正确配置环境变量
  • 开发环境安装maven并正确配置环境变量(建议使用阿里云仓库)

安装zookeeper

ZooKeeper 是 Apache 软件基金会的一个软件项目,它为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册。

下载压缩包

  • 下载压缩包
curl -O https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz
  • 解压压缩包
tar -zxvf apache-zookeeper-3.7.0-bin.tar.gz

修改zookeeper配置文件

  • 进入zookeeper配置文件所在目录
cd /home/apache-zookeeper-3.7.0-bin/conf
  • 修改配置文件
cp zoo_sample.cfg zoo.cfg

运行zookeeper

cd /home/apache-zookeeper-3.7.0-bin/bin
./zkServer.sh start

检查zookeeper运行状态

cd /home/apache-zookeeper-3.7.0-bin/bin
./zkServer.sh status

dubbox打包

Dubbox 是一个分布式服务框架,其前身是阿里巴巴开源项目Dubbo ,被国内电商及互联网项目中使用,后期阿里巴巴停止了该项目的维护,当当网便在Dubbo基础上进行优化,并继续维护,为了与原有的Dubbo区分,故将其命名为Dubbox。
Dubbox 致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbox就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbox这样的分布式服务框架的需求,并且本质上是个服务调用的东东,说白了就是个远程服务调用的分布式框架。
dubbox没有提供打包好的jar包或者war包,我们需要自己在github下载源码并编译。

下载dubbox源码

dubbox代码下载地址:https://github.com/dangdangdotcom/dubbox

编译代码

进入dubbox代码文件见,执行打包命令

mvn install -D maven.test.skip=true

打包完成后,在dubbo-admin\target中能看到一个dubbo-admin-2.8.4.war

修改dubbox配置文件

我们用压缩软件打开dubbo-admin-2.8.4.war,打开WEB-INF\dubbo.properties,修改zookeeper地址及对应用户密码,如下:

dubbo.registry.address=zookeeper://IP地址:2181
dubbo.admin.root.password=root
dubbo.admin.guest.password=guest

注意修改成自己zookeeper对应的ip地址
war包修改完成后备用。

安装docker

我们通过docker部署dubbox。

更新yum

yum -y update

安装依赖

 yum install -y yum-utils device-mapper-persistent-data lvm2

安装docker

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install docker-ce-18.06.0.ce-3.el7

启动docker并配置开机启动

systemctl start docker
systemctl enable docker

配置docker为国内源

vi /etc/docker/daemon.json

输入以下内容

{
    "registry-mirrors": ["http://hub-mirror.c.163.com", "https://docker.mirrors.ustc.edu.cn"]
}

通过docker部署dubbox

我们这里自己打包一个docker,并部署dubbox

创建文件夹

创建一个文件夹/home/makedocker,用于存储Dockerfile以及war包。

mkdir /home/makedocker
cd /home/makedocker

将war包上传到/home/makedocker

制作Dockerfile

vi Dockerfile

并输入以下内容

FROM registry.cn-hangzhou.aliyuncs.com/shuodao/tomcat-8.5.27
MAINTAINER Laughing
COPY dubbo.war /usr/tomcat/webapps/
EXPOSE 8080/tcp

打包docker

docker build -t tomcat-dubbo .

启动docker

docker run -d -p 8888:8080 --name tomcat-dubbo tomcat-dubbo

查看docker运行状态

docker ps

显示以下内容,代表docker运行成功

查看dubbox运行状态

打开http://139.198.172.114:8888/dubbo,系统要求输入密码,密码为dubbo.properties中配置的密码,输入完成后,正常打开界面如下

实现dubbox服务

我们创建一个用户服务,作为服务提供者,判断用户是否登录。一个商品服务,作为服务消费者,调用用户是否登录的接口。

实现通用服务接口

创建一个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>net.xiangcaowuyu</groupId>
    <artifactId>dubbo-common</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

</project>

创建接口

package net.xiangcaowuyu.dubbo.common.service;

/**
 * 博客:https://www.xiangcaowuyu.net
 * Description:
 *
 * @Author: 香草物语
 * DateTime: 2021-07-19 20:20
 */
public interface RpcUserService {

    boolean checkUserLogin(String userName);

}

将代码部署到本地maven仓库

由于我们没有远程maven仓库,所以我们将jar包install到本地仓库。
在代码根目录,执行以下命令,打包到本地仓库。

mvn install -D maven.test.skip=true

实现服务提供者

创建服务提供者。

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.5.2</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>net.xiangcaowuyu</groupId>
    <artifactId>dubbo-provider</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>dubbo-provider</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.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.8.4</version>
        </dependency>

        <dependency>
            <groupId>io.dubbo.springboot</groupId>
            <artifactId>spring-boot-starter-dubbo</artifactId>
            <version>1.0.0</version>
        </dependency>
        <dependency>
            <groupId>net.xiangcaowuyu</groupId>
            <artifactId>dubbo-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <includeSystemScope>true</includeSystemScope>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

实现接口

package net.xiangcaowuyu.dubboprovider.service;

import net.xiangcaowuyu.dubbo.common.service.RpcUserService;
import org.springframework.stereotype.Service;

/**
 * 博客:https://www.xiangcaowuyu.net
 * Description:
 *
 * @Author: 香草物语
 * DateTime: 2021-07-19 19:56
 */
@Service
@com.alibaba.dubbo.config.annotation.Service(interfaceClass = RpcUserService.class)
public class RpcUserServiceImpl implements RpcUserService{

    @Override
    public boolean checkUserLogin(String userName){
        return "admin".equals(userName);
    }

}

修改配置文件

配置dubbo

server.port=8081
#dubbo提供者的别名,只是个标识
spring.dubbo.application.name=dubbo-provider
#zookeeper地址
spring.dubbo.registry.address=zookeeper://139.198.172.114:2181
#dubbo协议
spring.dubbo.protocol.name=dubbo
#dubbo端口号
spring.dubbo.protocol.port=20880
#这是你要发布到dubbo的接口所在包位置
spring.dubbo.scan=net.xiangcaowuyu.dubboprovider.service

测试

运行项目,然后我们打开dubbo服务端,查看是否注册成功。

实现服务消费者

创建服务消费者。

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.5.2</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>net.xiangcaowuyu</groupId>
    <artifactId>dubbo-provider</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>dubbo-provider</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.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.8.4</version>
        </dependency>

        <dependency>
            <groupId>io.dubbo.springboot</groupId>
            <artifactId>spring-boot-starter-dubbo</artifactId>
            <version>1.0.0</version>
        </dependency>
        <dependency>
            <groupId>net.xiangcaowuyu</groupId>
            <artifactId>dubbo-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <includeSystemScope>true</includeSystemScope>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

创建商品服务

package net.xiangcaowuyu.dubboprovider.service;

/**
 * 博客:https://www.xiangcaowuyu.net
 * Description:
 *
 * @Author: 香草物语
 * DateTime: 2021-07-19 20:36
 */
public interface GoodService {

    boolean checkUserLogin(String userName);

}

创建商品服务类,调用用户登录判断接口

package net.xiangcaowuyu.dubboprovider.service.impl;

import com.alibaba.dubbo.config.annotation.Reference;
import net.xiangcaowuyu.dubbo.common.service.RpcUserService;
import net.xiangcaowuyu.dubboprovider.service.GoodService;
import org.springframework.stereotype.Service;

/**
 * 博客:https://www.xiangcaowuyu.net
 * Description:
 *
 * @Author: 香草物语
 * DateTime: 2021-07-19 19:56
 */
@Service
public class GoodServiceImpl implements GoodService {

    @Reference
    private RpcUserService rpcUserService;

    @Override
    public boolean checkUserLogin(String userName) {
        return rpcUserService.checkUserLogin(userName);
    }

}

测试消费者服务是否正常注册

测试

创建商品销售接口

package net.xiangcaowuyu.dubboprovider.controller;

import net.xiangcaowuyu.dubboprovider.service.GoodService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

/**
 * 博客:https://www.xiangcaowuyu.net
 * Description:
 *
 * @Author: 香草物语
 * DateTime: 2021-07-19 20:40
 */
@RestController
public class GoodController {

    @Resource
    private GoodService goodService;

    @GetMapping("sell/good")
    public boolean sellGood(){
        return goodService.checkUserLogin("admin");
    }

}

测试接口是否正常调用

dockerSpring BootzookeeperDubbo
朗读
赞(1)
赞赏
感谢您的支持,我会继续努力哒!
版权属于:

香草物语

评论 (0)