基于centos 7,通过docker打包部署dubbox(2.8.4),并实现简单的服务提供者与消费者。
服务器安装JDK1.8并正确配置环境变量
开发环境安装JDK1.8并正确配置环境变量
开发环境安装maven并正确配置环境变量(建议使用阿里云仓库)
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配置文件所在目录
cd /home/apache-zookeeper-3.7.0-bin/conf
修改配置文件
cp zoo_sample.cfg zoo.cfg
cd /home/apache-zookeeper-3.7.0-bin/bin
./zkServer.sh start
cd /home/apache-zookeeper-3.7.0-bin/bin
./zkServer.sh status
Dubbox 是一个分布式服务框架,其前身是阿里巴巴开源项目Dubbo ,被国内电商及互联网项目中使用,后期阿里巴巴停止了该项目的维护,当当网便在Dubbo基础上进行优化,并继续维护,为了与原有的Dubbo区分,故将其命名为Dubbox。Dubbox 致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbox就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbox这样的分布式服务框架的需求,并且本质上是个服务调用的东东,说白了就是个远程服务调用的分布式框架。dubbox没有提供打包好的jar包或者war包,我们需要自己在github下载源码并编译。
dubbox代码下载地址:https://github.com/dangdangdotcom/dubbox
进入dubbox代码文件见,执行打包命令
mvn install -D maven.test.skip=true
打包完成后,在dubbo-admin\target
中能看到一个dubbo-admin-2.8.4.war
我们用压缩软件打开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部署dubbox。
yum -y update
yum install -y yum-utils device-mapper-persistent-data lvm2
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
systemctl start docker
systemctl enable docker
vi /etc/docker/daemon.json
输入以下内容
{
"registry-mirrors": ["http://hub-mirror.c.163.com", "https://docker.mirrors.ustc.edu.cn"]
}
我们这里自己打包一个docker,并部署dubbox
创建一个文件夹/home/makedocker
,用于存储Dockerfile
以及war
包。
mkdir /home/makedocker
cd /home/makedocker
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 build -t tomcat-dubbo .
docker run -d -p 8888:8080 --name tomcat-dubbo tomcat-dubbo
docker ps
显示以下内容,代表docker运行成功
打开http://139.198.172.114:8888/dubbo
,系统要求输入密码,密码为dubbo.properties
中配置的密码,输入完成后,正常打开界面如下
我们创建一个用户服务,作为服务提供者,判断用户是否登录。一个商品服务,作为服务消费者,调用用户是否登录的接口。
创建一个maven项目,提供基本的接口定义。
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
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仓库,所以我们将jar包install到本地仓库。在代码根目录,执行以下命令,打包到本地仓库。
mvn install -D maven.test.skip=true
创建服务提供者。
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服务端,查看是否注册成功。
创建服务消费者。
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");
}
}