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

简介: 微服务技术系列教程(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

目录
相关文章
|
7月前
|
人工智能 安全 Nacos
Nacos 3.0:微服务与AI融合的技术新纪元
Nacos 3.0:微服务与AI融合的技术新纪元
370 83
|
8月前
|
缓存 负载均衡 监控
微服务架构下的电商API接口设计:策略、方法与实战案例
本文探讨了微服务架构下的电商API接口设计,旨在打造高效、灵活与可扩展的电商系统。通过服务拆分(如商品、订单、支付等模块)和标准化设计(RESTful或GraphQL风格),确保接口一致性与易用性。同时,采用缓存策略、负载均衡及限流技术优化性能,并借助Prometheus等工具实现监控与日志管理。微服务架构的优势在于支持敏捷开发、高并发处理和独立部署,满足电商业务快速迭代需求。未来,电商API设计将向智能化与安全化方向发展。
508 102
|
5月前
|
监控 安全 Java
Spring Cloud 微服务治理技术详解与实践指南
本文档全面介绍 Spring Cloud 微服务治理框架的核心组件、架构设计和实践应用。作为 Spring 生态系统中构建分布式系统的标准工具箱,Spring Cloud 提供了一套完整的微服务解决方案,涵盖服务发现、配置管理、负载均衡、熔断器等关键功能。本文将深入探讨其核心组件的工作原理、集成方式以及在实际项目中的最佳实践,帮助开发者构建高可用、可扩展的分布式系统。
359 1
|
5月前
|
Kubernetes Java 微服务
Spring Cloud 微服务架构技术解析与实践指南
本文档全面介绍 Spring Cloud 微服务架构的核心组件、设计理念和实现方案。作为构建分布式系统的综合工具箱,Spring Cloud 为微服务架构提供了服务发现、配置管理、负载均衡、熔断器等关键功能的标准化实现。本文将深入探讨其核心组件的工作原理、集成方式以及在实际项目中的最佳实践,帮助开发者构建高可用、可扩展的分布式系统。
562 0
|
7月前
|
缓存 负载均衡 NoSQL
基于微服务架构的唯品会商品详情接口技术解析
本文介绍了唯品会电商平台商品详情接口的微服务化实现方案,涵盖架构设计、代码示例与性能优化策略。采用FastAPI构建服务,结合Redis缓存、异步处理、Nginx负载均衡等技术,实现高并发、低延迟的接口性能。
|
7月前
|
缓存 Cloud Native Java
Java 面试微服务架构与云原生技术实操内容及核心考点梳理 Java 面试
本内容涵盖Java面试核心技术实操,包括微服务架构(Spring Cloud Alibaba)、响应式编程(WebFlux)、容器化(Docker+K8s)、函数式编程、多级缓存、分库分表、链路追踪(Skywalking)等大厂高频考点,助你系统提升面试能力。
606 0
|
SpringCloudAlibaba Dubbo Java
【SpringCloud Alibaba系列】Dubbo基础入门篇
Dubbo是一款高性能、轻量级的开源Java RPC框架,提供面向接口代理的高性能RPC调用、智能负载均衡、服务自动注册和发现、运行期流量调度、可视化服务治理和运维等功能。
【SpringCloud Alibaba系列】Dubbo基础入门篇
|
监控 JavaScript 数据可视化
建筑施工一体化信息管理平台源码,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
智慧工地云平台是专为建筑施工领域打造的一体化信息管理平台,利用大数据、云计算、物联网等技术,实现施工区域各系统数据汇总与可视化管理。平台涵盖人员、设备、物料、环境等关键因素的实时监控与数据分析,提供远程指挥、决策支持等功能,提升工作效率,促进产业信息化发展。系统由PC端、APP移动端及项目、监管、数据屏三大平台组成,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
502 7
|
11月前
|
Dubbo 应用服务中间件 Apache
Star 4w+,Apache Dubbo 3.3 全新发布,Triple X 领衔,开启微服务通信新时代
Star 4w+,Apache Dubbo 3.3 全新发布,Triple X 领衔,开启微服务通信新时代
187 0

热门文章

最新文章