微服务技术系列教程(29) - Dubbo-介绍&环境安装&入门案例

引言

代码已提交至Github,有兴趣的同学可以下载看看:https://github.com/ylw-github/SpringBoot-Dubbo-Demo

本文目录结构:
l____引言
l____ 1. Dubbo
l________1.1 Dubbo原理
l________1.2 Zookeeper作为Dubbo的注册中心
l____2. Dubbo项目搭建
l________2.1 安装Zookeeper
l________2.2 安装DubboAdmin平台
l________2.3 创建Maven SpringBoot项目
l________________2.3.1 Parent及公有项目
l________________2.3.2 提供者项目
l________________2.3.3 消费者项目
l________________2.3.4 测试
l____3. 总结

之前在《分布式电商项目》里有讲过Dubbo,本文大致的介绍下Dubbo。

之前写过的文章也可以不看,直接往下看,下面也将会讲到。

1. Dubbo

Dubbox 是一个分布式服务框架,其前身是阿里巴巴开源项目 Dubbo ,被国内电商及互联网项目中使用,后期阿里巴巴停止了该项目的维护,当当网便在 Dubbo 基础上进行优化,并继续维护,为了与原有的 Dubbo 区分,故将其命名为 Dubbox。

Dubbox 致力于提供高性能和透明化的 RPC 远程服务调用方案,以及 SOA 服务治理方案。简单的说,dubbox 是一个分布式服务框架。

优点:

  • 透明化的远程方法调用
  • 像调用本地方法一样调用远程方法;只需简单配置,没有任何API侵入。 软负载均衡及容错机制 可在内网替代nginx lvs等硬件负载均衡器。 服务注册中心自动注册 & 配置管理
  • 不需要写死服务提供者地址,注册中心基于接口名自动查询提供者ip。 使用类似zookeeper等分布式协调服务作为服务注册中心,可以将绝大部分项目配置移入zookeeper集群。 服务接口监控与治理
  • Dubbo-admin与Dubbo-monitor提供了完善的服务接口管理与监控功能,针对不同应用的不同接口,可以进行 多版本,多协议,多注册中心管理。

缺点: 只支持JAVA语言

1.1 Dubbo原理

在这里插入图片描述
节点介绍:

  • Provider: 暴露服务的服务提供方。
  • Consumer: 调用远程服务的服务消费方。
  • Registry: 服务注册与发现的注册中心。
  • Monitor: 统计服务的调用次调和调用时间的监控中心。
  • Container: 服务运行容器。

调用流程:

  1. 服务容器负责启动,加载,运行服务提供者。
  2. 服务提供者在启动时,向注册中心注册自己提供的服务。
  3. 服务消费者在启动时,向注册中心订阅自己所需的服务。
  4. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
  5. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
  6. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

1.2 Zookeeper作为Dubbo的注册中心

官方推荐使用 zookeeper 作为Dubbo的注册中心。注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小。

Zookeeper 是 Apacahe Hadoop 的子项目,是一个树型的目录服务,支持变更推送,适合作为 Dubbox 服务的注册中心,工业强度较高,可用于生产环境。

2. Dubbo项目搭建

环境步骤:

  1. 安装Zookeepr
  2. 安装DubboAdmin平台,实现监控
  3. 创建Maven项目搭建生产者和消费者

2.1 安装Zookeeper

之前已经有讲解过,此处不再详述,安装步骤《Zookeeper安装》

启动Zookeeper:

/usr/local/zookeeper/bin/zkServer.sh start
/usr/local/zookeeper1/bin/zkServer.sh start
/usr/local/zookeeper2/bin/zkServer.sh start

在这里插入图片描述

2.2 安装DubboAdmin平台

安装包已经上传到百度网盘(链接:https://pan.baidu.com/s/1ilBbupi6rh5JGeTcmRzS6w 密码: 47kn

1.进入dubbo-2.8.4.jar目录,安装dubbo-2.8.4.jar到本地maven仓库

mvn install:install-file -Dfile=dubbo-2.8.4.jar -DgroupId=com.alibaba -DartifactId=dubbo -Dversion=2.8.4 -Dpackaging=jar

在这里插入图片描述
2.修改/dubbox-master/dubbo-admin/src/main/webapp/WEB-INF/dubbo.properties文件:(如果没有集群,?后面的两个ip地址不用写)

dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.admin.root.password=root
dubbo.admin.guest.password=guest

3.进入/dubbox-master/dubbo-admin打包:

mvn package -Dmaven.skip.test=true

在这里插入图片描述
4.进入/dubbox-master/dubbo-admin/target目录修改dubbo-admin-2.8.4.war名字为dubbo.war
在这里插入图片描述
5.上传dubbo.war到tomcat的webapps目录
在这里插入图片描述
6.启动tomcat,dubbo.war自动解压。

 ./startup.sh 

在这里插入图片描述
7.浏览器访问:
在这里插入图片描述
8.登录,账号密码均为root
在这里插入图片描述

2.3 创建Maven SpringBoot项目

新建项目SpringBoot-Dubbo-Demo项目,其中有3个字项目:

  • 公共模块(Dubbo-Service)
  • 提供者(Provider-Demo)
  • 消费者(Consumer-Demo)
2.3.1 Parent及公有项目

1.新建SpringBoot-Dubbo-Demo父项目,并添加maven依赖:

<modules>
    <module>Dubbo-Service</module>
    <module>Provider-Demo</module>
    <module>Consumer-Demo</module>
</modules>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.1.RELEASE</version>
</parent>

<dependencies>
    <!-- SpringBoot整合Web组件 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- dubbo -->
    <dependency>
        <groupId>com.alibaba.boot</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>0.2.0</version>
    </dependency>
</dependencies>

2.新建公用项目Dubbo-Service,并添加实体类及Service接口:

实体类:-----------------------------------------
package com.ylw.dubbo.service.entity;
import java.io.Serializable;

public class User implements Serializable {
    private String userId;
    private String userName;
    private String sex;
    private int age;
    private String blog;
	//getter and setter.....
}

接口类:-----------------------------------------
package com.ylw.dubbo.service;

import com.ylw.dubbo.service.entity.User;

public interface UserApi {

    String addUser(User user);

    String deleteUser(String userId);

    String updateUser(User user);

    User getUser(String userId);
}

2.3.2 提供者项目

1.新建提供者项目(Provider-Demo)

2.提供者新增maven依赖:

<parent>
    <groupId>ylw</groupId>
    <artifactId>com.ylw.dubbo</artifactId>
    <version>1.0-SNAPSHOT</version>
</parent>

<dependencies>
    <dependency>
        <groupId>ylw</groupId>
        <artifactId>com.ylw.dubbo.service</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
</dependencies>

3.接口实现类:

@Service(version = "${application.version}")
public class UserApiImpl implements UserApi {

    @Override
    public String addUser(User user) {
        return "添加用户成功";
    }

    @Override
    public String deleteUser(String userId) {
        return "删除用户成功";
    }

    @Override
    public String updateUser(User user) {
        return "更新用户成功";
    }

    @Override
    public User getUser(String userId) {
        User user = new User();
        user.setUserId(userId);
        user.setUserName("ylw");
        user.setAge(10000);
        user.setSex("male");
        user.setBlog("https://blog.csdn.net/qq_20042935");
        return user;
    }
}

4.application.yml配置:

server:
  port: 8081

application:
  #版本号
  version: 1.0.0

dubbo:
  application:
    #应用名称,每个dubbo应用的名称都是唯一的
    name: producer-demo
  registry:
    #注册中心
    address: zookeeper://192.168.162.131:2181
  protocol:
    #协议名称
    name: dubbo
    #服务暴露端口
    port: 20880
  scan:
    #扫描服务注册bean,即service实现类所在的包
    basePackages: com.ylw.dubbo.service.impl名

5.启动提供者,注册中心可以看到,提供者服务已经注册上去:
在这里插入图片描述

2.3.3 消费者项目

1.新建消费者项目(Consumer-Demo)

2.提供者新增maven依赖:

<parent>
    <groupId>ylw</groupId>
    <artifactId>com.ylw.dubbo</artifactId>
    <version>1.0-SNAPSHOT</version>
</parent>

<dependencies>
    <dependency>
        <groupId>ylw</groupId>
        <artifactId>com.ylw.dubbo.service</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
</dependencies>		

3.Controller:

@RestController
public class ConsumerController {

    @Reference(version = "${application.version}")
    UserApi userApi;

    @RequestMapping("/addUser")
    public String addUser(User user) {
        return userApi.addUser(user);
    }

    @RequestMapping("/deleteUser")
    public String deleteUser(String userId) {
        return userApi.deleteUser(userId);
    }

    @RequestMapping("/updateUser")
    public String updateUser(User user) {
        return userApi.updateUser(user);
    }

    @RequestMapping("/getUser")
    public User getUser(String userId) {
        return userApi.getUser(userId);
    }
}

4.application.yml:

server:
  port: 8082

application:
  #版本号
  version: 1.0.0

dubbo:
  application:
    #应用名称,每个dubbo应用的名称都是唯一的
    name: consumer-demo
  registry:
    #注册中心
    address: zookeeper://192.168.162.131:2181

5.启动消费者,注册中心可以看到,消费者服务已经注册上去:
在这里插入图片描述

2.3.4 测试

消费者远程调用提供者,浏览器输入:http://localhost:8082/getUser?userId=666,可以看到远程调用成功:
在这里插入图片描述

总结

代码已提交至Github,有兴趣的同学可以下载看看:https://github.com/ylw-github/SpringBoot-Dubbo-Demo
在这里插入图片描述

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值