springboot整合dubbo简易入门

1 篇文章 0 订阅

dubbo官方文档

dubbo是基于rpc的微服务架构

RPC远程过程调用 : Remote Procedure Call Protocol

远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。

dubbo主要角色

registry

注册中心. 是用于发布和订阅服务的一个平台.用于替代SOA结构体系框架中的ESB服务总线的。

发布

开发服务端代码完毕后, 将服务信息发布出去. 实现一个服务的公开.

订阅

客户端程序,从注册中心下载服务内容 这个过程是订阅.

订阅服务的时候, 会将发布的服务所有信息,一次性下载到客户端.

客户端也可以自定义, 修改部分服务配置信息. 如: 超时的时长, 调用的重试次数等.

consumer

服务的消费者, 就是服务的客户端.

消费者必须使用Dubbo技术开发部分代码. 基本上都是配置文件定义.

provider

服务的提供者, 就是服务端.

服务端必须使用Dubbo技术开发部分代码. 以配置文件为主.

container

容器. Dubbo技术的服务端(Provider), 在启动执行的时候, 必须依赖容器才能正常启动.

默认依赖的就是spring容器. 且Dubbo技术不能脱离spring框架.

在2.5.3版本的dubbo中, 默认依赖的是spring2.5版本技术. 可以选用spring4.5以下版本.

在2.5.7版本的dubbo中, 默认依赖的是spring4.3.10版本技术. 可以选择任意的spring版本.

monitor dubbo admin

监控中心. 是Dubbo提供的一个jar工程.

主要功能是监控服务端(Provider)和消费端(Consumer)的使用数据的. 如: 服务端是什么,有多少接口,多少方法, 调用次数, 压力信息等. 客户端有多少, 调用过哪些服务端, 调用了多少次等.

dubbo执行流程

启动Spring容器时,自动启动Dubbo的Provider

Provider在启动后自动会去注册中心注册内容.注册的内容包括:ip,port,对外提供的接口列表.哪些方法.哪些接口类,dubbo的版本,访问Provider的协议

当Consumer启动时,自动去Registry获取到所已注册的服务的信息.这个过程称为订阅

当Provider的信息发生变化时, 自动由Registry向Consumer推送通知

搭建provider工程

建立springboot项目

导入依赖

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.10.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <java.version>1.8</java.version>
        <dubbo.version>2.7.1</dubbo.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>${dubbo.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
            <version>${dubbo.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.14</version>
        </dependency>

        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>4.2.0</version>
        </dependency>

        <!-- zookeeper客户端 -->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>4.2.0</version>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.zookeeper</groupId>
                    <artifactId>zookeeper</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.16</version>
        </dependency>

    </dependencies>

在application.yml中添加dubbo服务所需要的配置

server:
  port: 9002
dubbo:
  application:
    name: dubbo-provider
  #提供服务的IP,端口号
  protocol:
    port: 20880
    name: dubbo
    host: 192.168.1.102
  #注册中心
  registry:
    address: zookeeper://192.168.220.136:2181
  #dubbo包扫描
  scan:
    base-packages: com.cz.demo

spring:
  application:
    name: dubbo-provider

编写接口和实现类

public interface ITestOne {

    public void test1();
}

实现类

package com.cz.demo.service.impl;

import com.cz.demo.service.ITestOne;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;


@Service(version = "1.0.0", timeout = 10000, interfaceClass = ITestOne.class)
@Component
@Slf4j
public class Impl implements ITestOne {

    @Override
    public void test1() {
        log.info("生产端---dubbo测试");
    }
}

其中@Service为dubbo的注解,这里不能是spring的注解,这样就将服务暴露出来的

@Service中有版本属性,超时时间,权重等等信息

启动服务端

可以看到dubbo版本信息

看到以上信息则启动成功

搭建消费者工程

建立springboot项目,导入包和服务端一样,配置注册中心

server:
  port: 9001

dubbo:
  registry:
    address: zookeeper://192.168.220.131:2181

spring:
  application:
    name: dubbo-customer

消费者调用实现

package com.cz.demo.controller;

import com.cz.demo.service.ITestOne;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RequestMapping("/customer")
@RestController
@Slf4j
public class CustomerController {

    @Reference(version = "1.0.0")
    private ITestOne test;

    @GetMapping("/test")
    public String test() {
        log.info("----执行远程调用");
        test.test1();
        return "调用成功";
    }
}

 其中@Reference为dubbo注解,这里version属性要和@Server中version要一样,否则将失败

ITestOne为服务端中的接口

启动消费者

启动成功

 浏览器输入http://localhost:9001/customer/test可以看到结果,则正常。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值