Dubbo从入门到精通

Dubbo资源下载

链接:https://pan.baidu.com/s/1IllSy9dOQDsswu38XNyA1w
提取码:8zrz

Dubbo从入门到精通

dubbo环境搭建window

1,下载并安装zookepper

1.1、下载zookeeper

网址 https://archive.apache.org/dist/zookeeper/zookeeper-3.4.14/

1.2、解压zookeeper

解压运行zkServer.cmd ,初次运行会报错,没有zoo.cfg配置文件

1.3、修改zoo.cfg配置文件

将conf下的zoo_sample.cfg复制一份改名为zoo.cfg即可。

注意几个重要位置:

dataDir=./ 临时数据存储的目录(可写相对路径)

clientPort=2181 zookeeper的端口号

修改完成后再次启动zookeeper

1.4、使用zkCli.cmd测试

ls /:列出zookeeper根下保存的所有节点

create –e /sxt 123:创建一个sxt节点,值为123

get /sxt:获取/sxt节点的值


dubbo环境搭建Window

下载并安装dubbo-admin

dubbo本身并不是一个服务软件。它其实就是一个jar包能够帮你的java程序连接到zookeeper,并利用zookeeper消费、提供服务。所以你不用在Linux上启动什么dubbo服务。
但是为了让用户更好的管理监控众多的dubbo服务,官方提供了一个可视化的监控程序,不过这个监控即使不装也不影响使用。

1、下载dubbo-admin

网盘下载
链接:https://pan.baidu.com/s/1IllSy9dOQDsswu38XNyA1w
提取码:8zrz

2、进入目录,修改dubbo-admin配置

修改 src\main\resources\application.properties 指定zookeeper地址
在这里插入图片描述
rces\application.properties 指定zookeeper地址

3、打包dubbo-admin
mvn clean package -Dmaven.test.skip=true  
mvn installl 

或者

mvn package
4、运行dubbo-admin

/target下面
java -jar dubbo-admin-0.0.1-SNAPSHOT.jar
在这里插入图片描述

注意:【有可能控制台看着启动了,但是网页打不开,需要在控制台按下ctrl+c即可】

http://127.0.0.1:7001/
默认使用root/root 登陆
在这里插入图片描述

dubbo环境搭建Linux

安装JDK+zookeeper

1.1,安装JDK
1.1.1,下载JDK

http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
在这里插入图片描述
在这里插入图片描述


1.1.2,使用XFTP工具导入linux

在这里插入图片描述

1.1.3,解压到/root/software目录
mkdir /root/software   #在root下面创建software目录 
tar -zxvf  jdk-8u181-linux-x64.tar.gz -C /root/software #解压到指定目录

1.1.4,配置环境变量并测试

打开控制台,运行$ sudo vi /etc/profile,在最后插入下面要配置的内容 ,按Esc键 ,输入( :wq 保存并退出)

JAVA_HOME=/root/software/jdk1.8.0_181 
PATH=$JAVA_HOME/bin:$PATH 
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 
export JAVA_HOME 
export PATH 
export CLASSPATH

让环境变量生效,执行下面的命令
source /etc/profile

验证

java -version 

在这里插入图片描述

安装zookeeper

1.2.1,下载

可以从 (百度网盘)

https://apache.org/dist/zookeeper/stable 
http://mirror.bit.edu.cn/apache/zookeeper/stable/

在这里插入图片描述
在linux上使用 wget

http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz 来下载

建议使用镜像

推荐下载好了再使用xftp传到linux如果使用wget会丢失jar包[亲测过]

1.2.2,解压并修改位置
#解压到/usr/local下面 
tar -zxvf zookeeper-3.4.14.tar.gz -C /usr/local 
#进入目录 
cd /usr/local/ 
#修改名字 
mv zookeeper-3.4.14/ zookeeper 

1.2.3,修改配置文件


1
#打开zk的配置文件目录 
cd /usr/local/zookeeper/conf 
#修改zoo_sample.cfg 为zoo.cfg [一定要改] 
mv zoo_sample.cfg  zoo.cfg 
#编辑zoo.cfg 
vi zoo.cfg  

在这里插入图片描述

1.2.4, 开机启动zookeepr脚本


1
#!/bin/bash 
#chkconfig:2345 20 90 
#description:zookeeper 
#processname:zookeeper 
ZK_PATH=/usr/local/zookeeper 
export JAVA_HOME=/root/software/jdk1.8.0_181 
case $1 in 
         start) sh  $ZK_PATH/bin/zkServer.sh start;; 
         stop)  sh  $ZK_PATH/bin/zkServer.sh stop;; 
         status) sh  $ZK_PATH/bin/zkServer.sh status;; 
         restart) sh $ZK_PATH/bin/zkServer.sh restart;; 
         *)  echo "require start|stop|status|restart"  ;; 
esac



打开/etc/init.d/
在这里插入图片描述
把脚本注册为Service
在这里插入图片描述
增加权限
在这里插入图片描述

1.2.5,启动zookeeper

在这里插入图片描述

如果出现连接不上在问题修改etc/hosts

删除第一行里面的127.0.0.1



2,安装dubbo监控【常规安装】

dubbo本身并不是一个服务软件。它其实就是一个jar包能够帮你的java程序连接到zookeeper,并利用zookeeper消费、提供服务。所以你不用在Linux上启动什么dubbo服务。

但是为了让用户更好的管理监控众多的dubbo服务,官方提供了一个可视化的监控程序,不过这个监控即使不装也不影响使用。

2.1、下载dubbo-admin (百度网盘)

https://github.com/apache/dubbo-admin/tree/master
在这里插入图片描述
在这里插入图片描述
配置参考文档
http://dubbo.apache.org/zh-cn/docs/admin/introduction.html

2.2,解压在这里插入图片描述

在window系统打爆成jar

dubbo-admin 管理项目

dubbo-monitor-simple监控统计项目

dubbo-registry-simple 简单的注册中心,开发中一般使用zk

2.3,修改配置文件并打包

在这里插入图片描述
在这里插入图片描述
配置密码和注册中心,在启动之前一定要启动注册中心,要不然无法访问哦

使用mvn install 打包(或者 mvn package)
在这里插入图片描述
把包好的jar包放到linux上去使用java -jar 运行

在这里插入图片描述
在这里插入图片描述
在Winows里面使用http://xxx.xxx.xxx:7001/去访问
用户名:root
密码:root

测试
在这里插入图片描述


3,安装dubbo监控【使用docker安装】

3.1,安装zookeeper
docker pull zookeeper:3.4.14#拉取镜像 
docker run --name zookeeper -p 2182:2181 -v /root/zookeeper/data:/data -d zookeeper:3.4.14#启动容器

3.2,拉取镜像

https://hub.docker.com/r/chenchuxin/dubbo-admin

docker pull webuilder/dubboadmin
3.3,启动容器
docker run -itd -p 8080:8080 -e ZOOKEEPER_SERVER=your_zookeeper_ip:2181 dubboadmin --name=dubbo-name 
or 
docker run -itd -p 8080:8080 --add-host zookeeper-server:your_zookeeper_ip dubboadmin --name=dubbo-name

3.4,环境参数
ZOOKEEPER_SERVER (必选) Zookeeper's IP and PORT, sparated by a colon. Default is 'zookeeper-server:2181' 
ROOT_PASSWORD (可选) Dubbo Admin's root user's password, default is 'root' 
GUEST_PASSWORD (可选) Dubbo Admin's guest user's password, default is 'root'



dubbo-helloworld

1,提出需求

某个电商系统,订单服务需要调用用户服务获取某个用户的所有地址;

我们现在 需要创建两个服务模块进行测试
在这里插入图片描述
测试预期结果:

订单服务web模块在A服务器,用户服务模块在B服务器,A可以远程调用B的功能。


2,工程架构

根据 dubbo《服务化最佳实践》

2.1,分包

建议将服务接口,服务模型,服务异常等均放在 API 包中,因为服务模型及异常也是 API 的一部分,同时,这样做也符合分包原则:重用发布等价原则(REP),共同重用原则(CRP)。

如果需要,也可以考虑在 API 包中放置一份 spring 的引用配置,这样使用方,只需在 spring 加载过程中引用此配置即可,配置建议放在模块的包目录下,以免冲突,如:com/alibaba/china/xxx/dubbo-reference.xml。

2.2,粒度

服务接口尽可能大粒度,每个服务方法应代表一个功能,而不是某功能的一个步骤,否则将面临分布式事务问题,Dubbo 暂未提供分布式事务支持。

服务接口建议以业务场景为单位划分,并对相近业务做抽象,防止接口数量爆炸。

不建议使用过于抽象的通用接口,如:Map query(Map),这样的接口没有明确语义,会给后期维护带来不便。
在这里插入图片描述在这里插入图片描述


3,创建模块

3.0 创建maven项目(先用spring方式)

在这里插入图片描述
在这里插入图片描述

3.1、ego-interface:公共接口层(model,service,exception…)

作用:定义公共接口,也可以导入公共依赖

①Bean模型

@Data
@AllArgsConstructor//生成全参数构造函数
@NoArgsConstructor // 生成无参构造函数
public class UserAddress implements Serializable{ 
    private Integer id; 
    private String userAddress; 
    private String userId; 
}

②Service接口UserService

public List<UserAddress> getUserAddressList(String userId) 

③Service接口OrderService

public interface OrderService { 
    /** 
     * 初始化订单 
     * @param userId 
     */ 
    public List<UserAddress> initOrder(String userId); 
}

2、ego-user-service-provider:用户服务模块(对用户接口的实现)

1、pom.xml

<dependencies> 
   <dependency> 
    <groupId>com.sxt</groupId> 
    <artifactId>ego-interface</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
   </dependency> 
  </dependencies>

2、Service

public class UserServiceImpl implements UserService{ 
    public static List<UserAddress> address=new ArrayList<>(); 
    static { 
        address.add(new UserAddress(1, "湖北省武汉市东湖高新区金融港B22栋11楼", "whsxt")); 
        address.add(new UserAddress(2, "北京市海淀区西三旗街道建材城西路中腾建华商务大厦东侧二层尚学堂", "bjsxt")); 
    } 
    @Override 
    public List<UserAddress> getUserAddressList(String userId) { 
        //讲道理要是去数据库里面去查询的 
        return address; 
    } 
} 
3、ego-order-service-consumer:订单模块(调用用户模块)

1、pom.xml

<dependencies> 
   <dependency> 
    <groupId>com.sxt</groupId> 
    <artifactId>ego-interface</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
   </dependency> 
   </dependencies>

2、测试

<dependencies> 
   <dependency> 
    <groupId>com.sxt</groupId> 
    <artifactId>ego-interface</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
   </dependency> 
   </dependencies>

现在这样是无法进行调用的。我们ego-order-web引入了ego-interface,但是interface的实现是ego-user,我们并没有引入,而且实际他可能还在别的服务器中

4,使用dubbo改造
1、改造ego-user-service-provider作为服务提供者

1、引入dubbo和其它的修改pom.xml

<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>com.sxt</groupId> 
    <artifactId>ego-user-service-provider</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <dependencies> 
        <dependency> 
            <groupId>com.sxt</groupId> 
            <artifactId>ego-interface</artifactId> 
            <version>0.0.1-SNAPSHOT</version> 
        </dependency> 
        <dependency> 
            <groupId>com.alibaba</groupId> 
            <artifactId>dubbo</artifactId> 
            <version>2.6.7</version> 
        </dependency> 
        <dependency> 
            <groupId>com.101tec</groupId> 
            <artifactId>zkclient</artifactId> 
            <version>0.11</version> 
        </dependency> 
        <!-- curator-framework --> 
        <dependency> 
            <groupId>org.apache.curator</groupId> 
            <artifactId>curator-framework</artifactId> 
            <version>4.1.0</version> 
        </dependency> 
        <dependency> 
            <groupId>io.netty</groupId> 
            <artifactId>netty-all</artifactId> 
            <version>4.1.32.Final</version> 
        </dependency> 
    </dependencies> 
</project>

由于我们使用zookeeper作为注册中心,所以需要操作zookeeper
dubbo 2.6以前的版本引入zkclient操作zookeeper
dubbo 2.6及以后的版本引入curator操作zookeeper
下面两个zk客户端根据dubbo版本2选1即可

2、配置提供者provider.xml
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值