热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

实现目标基于centos7,通过docker打包部署dubbox(2.8.4),并实现

实现目标

基于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

[tag type="default"]注意修改成自己zookeeper对应的ip地址[/tag]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内容如下


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">
4.0.0

net.xiangcaowuyu
dubbo-common
1.0-SNAPSHOT


8
8


创建接口

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如下


xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0

org.springframework.boot
spring-boot-starter-parent
2.5.2


net.xiangcaowuyu
dubbo-provider
0.0.1-SNAPSHOT
dubbo-provider
Demo project for Spring Boot

1.8



org.springframework.boot
spring-boot-starter



org.projectlombok
lombok
true


org.springframework.boot
spring-boot-starter-test
test


com.alibaba
dubbo
2.8.4



io.dubbo.springboot
spring-boot-starter-dubbo
1.0.0


net.xiangcaowuyu
dubbo-common
1.0-SNAPSHOT


org.springframework.boot
spring-boot-starter-web






org.springframework.boot
spring-boot-maven-plugin

true


org.projectlombok
lombok







实现接口

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如下


xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0

org.springframework.boot
spring-boot-starter-parent
2.5.2


net.xiangcaowuyu
dubbo-provider
0.0.1-SNAPSHOT
dubbo-provider
Demo project for Spring Boot

1.8



org.springframework.boot
spring-boot-starter



org.projectlombok
lombok
true


org.springframework.boot
spring-boot-starter-test
test


com.alibaba
dubbo
2.8.4



io.dubbo.springboot
spring-boot-starter-dubbo
1.0.0


net.xiangcaowuyu
dubbo-common
1.0-SNAPSHOT


org.springframework.boot
spring-boot-starter-web






org.springframework.boot
spring-boot-maven-plugin

true


org.projectlombok
lombok








创建商品服务

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");
  }

}

测试接口是否正常调用




推荐阅读
  • 在Kubernetes上部署JupyterHub的步骤和实验依赖
    本文介绍了在Kubernetes上部署JupyterHub的步骤和实验所需的依赖,包括安装Docker和K8s,使用kubeadm进行安装,以及更新下载的镜像等。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • 现在比较流行使用静态网站生成器来搭建网站,博客产品着陆页微信转发页面等。但每次都需要对服务器进行配置,也是一个重复但繁琐的工作。使用DockerWeb,只需5分钟就能搭建一个基于D ... [详细]
  • 本文主要介绍关于linux文件描述符设置,centos7设置文件句柄数,centos7查看进程数的知识点,对【Linux之进程数和句柄数】和【linux句柄数含义】有兴趣的朋友可以看下由【东城绝神】投 ... [详细]
  • docker安装到基本使用
    记录docker概念,安装及入门日常使用Docker安装查看官方文档,在"Debian上安装Docker",其他平台在"这里查 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 本文介绍了Android中的assets目录和raw目录的共同点和区别,包括获取资源的方法、目录结构的限制以及列出资源的能力。同时,还解释了raw目录中资源文件生成的ID,并说明了这些目录的使用方法。 ... [详细]
  • 程序员如何选择机械键盘轴体?红轴和茶轴对比
    本文介绍了程序员如何选择机械键盘轴体,特别是红轴和茶轴的对比。同时还介绍了U盘安装Linux镜像的步骤,以及在Linux系统中安装软件的命令行操作。此外,还介绍了nodejs和npm的安装方法,以及在VSCode中安装和配置常用插件的方法。最后,还介绍了如何在GitHub上配置SSH密钥和git的基本配置。 ... [详细]
  • LINUX学习之centos7营救模式
    今天卸载软件的时候,不小心把GNOME的一些组件给卸了,导致桌面无法正常开启,会卡在启动过程中,而我的开机启动模式又是设置为图形界面,所以一开LINUX就卡住了,进入不了命令行界面 ... [详细]
  • k8s进阶之搭建私有镜像仓库
    企业级私有镜像仓 ... [详细]
  • NFS文件共享系统
    1、概述:NFS(NetworkFileSystem)意为网络文件系统,它最大的功能就是可以通过网络,让不同的机器不同的操作系统可以共享 ... [详细]
  • Docker安装Rabbitmq(配合宝塔)
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Docker安装Rabbitmq(配合宝塔)相关的知识,希望对你有一定的参考价值。一、事前准备 ... [详细]
author-avatar
白纸鹤u8_fw7
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有