基于Dubbo实现微服务架构项目

基于Dubbo实现微服务架构项目

学习一种新技术的时候,先去官网学习。不要着急看视频
安装jar到本地仓库的时候,有的时候会出错 原因1.jar包位置出错 2.w10系统打开cmd的是时候 有的时候是以powerShell窗口

1. 基于Dubbo的微服务体系概述

在这里插入图片描述
Dubbo

  • 阿里巴巴开源的一个RPC(远程过程调用)框架
  • 基于此框架+一系列的第三方组件 可以实现一套微服务架构体系
  • 后期阿里巴巴闭源了,由当时的使用者(当当网)自行维护 -> dubbox
  • 再后期阿里巴巴在决策之后,将其捐赠给了Apache基金会,Apache顶级孵化项目
  • 经过大约2年时间的孵化,目前已经第一版GA (http://dubbo.apache.org/zh-cn/)

Apache Dubbo |ˈdʌbəʊ| 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用----不同的机器,智能容错和负载均衡,以及服务自动注册和发现。

一般我们是结合着zookeeper(Apahce的一个组件)来实现服务的注册中心这种能力。

2. 掌握基于Dubbo的微服务体系的原理

当容器启动之后(初始化):

  • 1.服务的provider会向注册中心注册自己能够提供的服务(能力)

  • 2.服务的consumer会向注册中心订阅自己需要的服务

  • 3.异步的通知(notify)服务的consumer对应的服务provider信息(接口方法、主机地址等信息)

  • 4.服务的consumer在得知了对应的provider信息之后可以进行服务的远程调用(Dubbo)

  • 5.服务的consumer和provider会异步的将信息统计给对应的Monitor。

在这里插入图片描述
ontainer服务器
async异步请求

3. 掌握微服务环境的搭建

Zookeeper端口默认 2181

zookeeper的启动:
在这里插入图片描述

  • 搭建Zookeeper作为注册中心(Registry)
  • 搭建DubboAdmin作为可视化UI 监测Zookeeper的注册和订阅等情况
  • 我们不采用纯Spring配置文件形式来导入Dubbo,我们采用SpringBoot来实现(纯注解和自动配置)
    • 安装了SpringBootStarter(Dubbo)

4. 掌握微服务项目的搭建

微服务中将各个模块拆分的基础上,又进行消费者和提供者的划分。

用户模块、订单模块、商品模块、…

  • 模块消费者:此模块需要消费服务(其他模块)的内容 类似于controller

  • 模块提供者:此模块可以提供给消费者(其他模块)的内容 类似于service dao…

4.1 准备RPC调用的关键-服务接口(公共的服务接口)

自行创建项目,创建一个接口作为服务接口。

它需要被provider项目和consumer项目同时依赖。

provider项目实现此服务接口。

consumer项目通过此服务接口调用远程的provider项目内容。

qg-commons-service:

/**
 * 示例接口:(远程服务<不同的服务器<机器>内的项目>调用)
 *  服务提供者(Provider)需要实现此接口
 *  服务消费者(Consumer)需要通过此接口来进行远程调用提供者
 */
public interface DemoService {
    /**
     * 返回Hello {name}!
     * @param name
     * @return
     */
    String sayHello(String name)throws Exception;
}

4.2 provider项目搭建

  • 1.导入依赖
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- Zookeeper相关 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-framework</artifactId>
        <version>2.13.0</version>
    </dependency>
    <dependency>
        <groupId>com.101tec</groupId>
        <artifactId>zkclient</artifactId>
        <version>0.10</version>
    </dependency>

    <!-- Dubbo相关 -->
    <dependency>
        <groupId>com.alibaba.hl</groupId>
        <artifactId>spring-boot-starter-dubbo</artifactId>
        <version>1.0.0</version>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>dubbo</artifactId>
        <version>2.5.7</version>
    </dependency>

    <!-- 公共接口 -->
    <dependency>
        <groupId>cn.qg</groupId>
        <artifactId>qg-commons-service</artifactId>
        <version>1.0-SNAPSHOT</version>
        <scope>compile</scope>
    </dependency>
</dependencies>
  • 2.实现服务接口,并且暴露服务

    @Component
    @Service(interfaceClass = DemoService.class) // 提供用于向注册中心注册的服务信息(暴露)
    /*
        <!-- 声明需要暴露的服务接口 -->
        <dubbo:service interface="org.apache.dubbo.demo.DemoService" ref="demoService" />
    
        <!-- 和本地bean一样实现服务 -->
        <bean id="demoService" class="org.apache.dubbo.demo.provider.DemoServiceImpl" />
     */
    public class DemoServiceImpl implements DemoService {
        @Override
        public String sayHello(String name) throws Exception {
            return "Hello "+name;
        }
    }
    
    
  • 3.更改配置文件指定注册中心等信息

    server:
      port: 9091
    # 配置节点信息和注册中心信息
    spring:
      dubbo:
        # 注册的节点名(唯一)
        appname: qg-demo-provider
        # 注册中心
        registry: zookeeper://127.0.0.1:2181
        # 服务提供者占用的端口
        port: 20800
    # 等价于下方
    #    <!-- 提供方应用信息,用于计算依赖关系 -->
    #    <dubbo:application name="hello-world-app"  />
    #
    #    <!-- 使用multicast广播注册中心暴露服务地址 -->
    #    <dubbo:registry address="multicast://224.5.6.7:1234" />
    #
    #    <!-- 用dubbo协议在20880端口暴露服务 -->
    #    <dubbo:protocol name="dubbo" port="20880" />
    
  • 4.启用Dubbo配置

    @EnableDubboConfiguration // 启用Dubbo配置
    @SpringBootApplication
    public class QgDemoProviderApplication {
        public static void main(String[] args) {
            SpringApplication.run(QgDemoProviderApplication.class,args);
        }
    }
    

4.3 consumer项目搭建

  • 导入依赖

  • 指定需要调用的服务接口

    @RestController
    public class DemoController {
        /*
        <!-- 生成远程服务代理,可以和本地bean一样使用demoService -->
        <dubbo:reference id="demoService" interface="org.apache.dubbo.demo.DemoService" />
         */
        @DubboConsumer // Dubbo的远程调用注解  消费者会根据配置去查找此服务
        private DemoService demoService;
    
        @GetMapping("/demo/{name}")
        public String doDemo(@PathVariable String name) throws Exception {
            return demoService.sayHello(name);
        }
    
    }
    
  • 指定注册中心信息

    server:
      port: 9092
    # 配置节点信息和注册中心信息
    spring:
      dubbo:
        # 注册的节点名(唯一)
        appname: qg-demo-consumer
        # 注册中心
        registry: zookeeper://127.0.0.1:2181
    #<!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
    #<dubbo:application name="consumer-of-helloworld-app"  />
    #
    #<!-- 使用multicast广播注册中心暴露发现服务地址 -->
    #<dubbo:registry address="multicast://224.5.6.7:1234" />
    
  • 启用Dubbo配置

4.4 微服务项目的调用

  • 先启动Provider

  • 再启动Consumer

  • 调用Consumer功能,会经由Dubbo来进行远程的RPC调用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值