spring boot集成dubbo(从0到1)

1.安装注册中心zookeeper(Linux远程安装)(依赖java环境)

    下载地址:Index of /apache/zookeeper/zookeeper-3.6.3 (bfsu.edu.cn)

    上传到opt/zookeeper目录

# 1 
cd /opt
# 2 创建目录
mkdir zookeeper
# 3 解压
tar -zxvf xxxx
# 4 
cd apache-zookeeper-3.6.3-bin/
# 5 配置
cd conf
# 6 复制文件 zoo.cfg 才能生效
cp zoo_sample.cfg zoo.cfg
# 7 更改目录配置
vim zoo.cfg

# 8 退出保存
esc + wq!
# 9 创建刚刚那个目录用于保存数据
mkdir /opt/zookeeper/zkdata
# 10 进入bin目录
cd /opt/zookeeper/apache-zookeeper-3.6.3-bin/bin
# 11 启动
./zkServer.sh start
# 12 停止
./zkServer.sh stop
# 13 查看状态
./zkServer.sh status

 启动完成记得放行2181 8222 8333端口,如果放行端口后依旧报错使用firewalld-cmd reload 重刷防火墙规则

2.创建dubbo模块(包名一定要一致)

父模块

导入依赖

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

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-spring-boot-starter</artifactId>
                <version>2.7.3</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

api接口模块

创建一个普通service测试接口

public interface HelloService {
    void sayHello(String name);
}

提供者模块

依赖以及配置

<dependency>
            <!--自定义接口依赖-->
            <groupId>org.example</groupId>
            <artifactId>dubbo-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </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>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>2.12.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>2.12.0</version>
        </dependency>
  
server:
  port: 8081

dubbo:
  application:
    name: provider
  registry:
    address: zookeeper://124.223.93.49:2181 #服务地址
  protocol:
    name: dubbo
    port: 20880
  #提供服务类实现的包
  scan:
    base-packages: com.dubbo.provider.service #扫包

消费者模块和生产者一致 但是不用配置扫包

3.编写提供者提供服务的实现以及消费者如何远程调用的

提供者

import org.apache.dubbo.config.annotation.Service;

@Service
public class HelloServiceImp implements HelloService {
    @Override
    public void sayHello(String name) {
        System.out.println("hello+"+name+"!");
    }
}

消费者

import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Service;

@Service
public class ProvideServiceImp implements ProviderService {
    @Reference
    private HelloService helloService;
    @Override
    public void providerTest() {
        helloService.sayHello("xzh");
    }
}

效果就是调用消费者 会发现生产者确实被调用 自此学习成功。

4.dubbo的几种高级特性

地址缓存

  1. 定义:

    升访问速度,提升用户体验

  2. 原理

    • dubbo服务消费者在第一次调用时,会将服务提供方地址缓存到本地,以后在调用则不会访问注册中心。
    • 一旦当服务提供者地址发生变化时,注册中心会通知服务消费者。
  3. 使用

    自动使用,无需操作。

超时与重试 

@Service(timeout = 1000,retries = 2)

为了解决高可用,提高用户的体验,防止服务器宕机引发的雪崩效应。

原理

没有这个机制的话,当消费者调用提供者提供的服务时,如果发生阻塞,那么会一直等待,当请求越积越多,那么就会影发雪崩,造成服务器宕机。至于重试就是当连接不成功时,消费者的执行策略,如一直重试等。

使用

在@Server与@Reference注解中配置,消费者配置能够容忍的超时时间,提供者配置正常执行大致所需时间。

多版本   

灰度发布 

@Service(version = "1.1")
public class HelloServiceImp implements HelloService {
    @Override
    public void sayHello(String name) {
        System.out.println("hello+"+name+"!");
    }
}

拷贝一份

@Service(version = "1.2")
public class HelloServiceImp2 implements HelloService {
    @Override
    public void sayHello(String name) {
        System.out.println("hello+"+name+"!");
    }
}

负载均衡

@Reference(loadbalance = "random")
  1. 定义

    为了控制集群中每台服务器的压力,达到合理分配请求的方式。

  2. 原理

    因为集群中每台服务器配置的项目都是一样的,所有在访问的时候,如果全部请求都往一台服务器请求,那么就有可能造成服务器压力过大,造成宕机。 

集群容错  

     

@Reference(cluster = "failover")
  1. 定义

    在集群的前提下,当服务消费者调用提供者的服务失败的时候,消费者的执行策略。

  2. 目的

    为了提高可用性以及用户的体验性。

  3. 集群容错模式

    Failover Cluster

    失败重试。默认值。当出现失败,重试其它服务器 ,默认重试2次,使用 retries 配置。一般用于读操作

    Failfast Cluster

    快速失败,只发起一次调用,失败立即报错。通常用于写操作

    Failsafe Cluster

    失败安全,出现异常时,直接忽略。返回一个空结果。

    Failback Cluster

服务降级

定义 

可以通过服务降级功能临时屏蔽某个出错的非关键服务,或者屏蔽非核心服务,让服务器资源全力维持核心服务,并定义降级后的返回策略。

目的

能够控制服务器的资源分配,或者当某个服务出现紧急异常时,需要屏蔽用户发起的请求。

使用

在服务消费方的@Reference中配置使用。

两种降级配置

mock=force:return null

表示消费方对该服务的方法调用都直接返回 null 值,不发起远程调用。用来屏蔽不重要服务不可用时对调用方的影响。

mock=fail:return null

表示消费方对该服务的方法调用在失败后,再返回 null 值,不抛异常。用来容忍不重要服务不稳定时对调用方的影响。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值