IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> SpringBoot整合Dubbo -> 正文阅读

[大数据]SpringBoot整合Dubbo

1.Dubbo高级特性-序列化

  • 两个机器传输数据,如何传输Java对象

    • Serializable

    • dubbo内部已经将序列化和反序列化的过程内部封装了,我们主需要在定义pojo类时实现Serializable接口即可

    • 一般会定义一个公共的pojo模块,让生产者和消费者都依赖该模块.

2.Dubbo高级特性-地址缓存

  • 注册中心挂了,服务是否可以正常访问

    • 可以,因为dubbo服务消费者在第一次调用时,会将服务提供方地址缓存到本地,以后在调用则不会访问注册中心.

    • 当服务提供者地址发生变化时,注册中心会通知服务消费者.

3.Dubbo高级特性-超时

  • 服务消费者在调用服务提供者的是否发生了阻塞,等待的情形,这个时候,服务消费者会一直等待下去.

  • 在某个峰值时刻,大量的请求都在同时请求服务消费者,会造成线程的大量堆积,势必会造成雪崩.

  • dubbo利用超时机制来解决这个问题设置一个超时时间,在这个时间段内,无法完成服务访问,则自动断开连接

  • 使用timeout属性配置超时时间,默认1000,单位毫秒.

?@Service(timeout = 1000,retries = 2)@Reference(timeout = 1000)
  • 如果服务的消费方和调用方都设置了超时时间,建议配置在服务提供方

4.Dubbo高级特性-重试

  • 设置了超时时间,在这个时间段内,无法完成服务访问,则自动断开连接

  • 如果出现网络抖动,则这一次请求就会失败

  • dubbo提供了重试机制来避免类似问题的发生

  • 通过retries属性来设置重试次数,默认为两次.//一共请求三次

5.Dubbo高级特性-多版本

  • 灰度发布 : 当出现新功能时,会让一部分用户先使用新功能,用户反馈没有问题时,再将所有用户迁移至新的功能.

  • dubbo中使用version属性来设置和调用统一接口的不同版本.

服务提供方

@Service(timeout = 3000,retries = 0,version = "v1.0")
//or
@Service(timeout = 3000,retries = 0,version = "v2.0")

服务消费方

@Reference(version = "v2.0") 

6.Dubbo高级特性-负载均衡

?

6.1 负载均衡策略-Random

  • 按权重随机,默认值,按权重设置随机概率.

@Service(weight = 100)
@Reference(loadbalance = "random")  //在AbstractLoadBalance的实现类中进行查找

6.2 负载均衡策略-RoundRobin

  • 按权重轮询

@Reference(loadbalance = "roundrobin")  //在AbstractLoadBalance的实现类中进行查找

6.3 负载均衡策略-LeastActive

  • 最少活跃调用次数,相同活跃数的随机(询问服务者集群处理最后一次请求所花费的时间,选择花费时间最少的那个)

6.4 负载均衡测录-ConsistentHash

  • 一致性Hash,相同参数的请求总是发送到统一提供者.

7.Dubbo高级特性-集群容错

7.1 集群容错模式-Failover Cluster

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

@Reference(cluster = "failover") //在Cluster的实现类中去找

7.2 集群容错模式-Failfast Cluster

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

7.3 集群容错模式-Failsafe Cluster

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

7.4 集群容错模式-Failback Cluster

  • 失败自动恢复,后台记录失败请求,定时重发.

7.5 集群容错模式-Forking Cluster

  • 并行调用多个服务器,只要一个成功即返回

7.6集群容错模式-Broadcast Cluster

  • 广播调用所有提供者,逐个调用,任意一台报错则报错

8.Dubbo高级特性-服务降级

8.1 mock=force:return null

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

@Reference(mock = "force:return null" ) //不再去调用远程服务了

8.2 mock=fail:return null

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

9. SpringBoot整合Dubbo,demo

9.1 interface-api

  • 将service接口和entity放入到公共接口模块,公用的依赖也放入公共模块的pom当中

?

  • service接口和pojo类就不用看了,都是最简单的.啊...entity用的lombok的@Data注解

POM

<dependencies>
        <!--springboot starter-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <!--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>

9.2 my-springboot-user-service(provider)

  • 我这里的provider也对外提供了服务

UserServiceImpl

@Service //spring
@com.alibaba.dubbo.config.annotation.Service(timeout = 3000,retries = 2,weight = 10) //alibaba dubbo
public class UserServiceImpl implements UserService {
    @Override
    public User selectUserById(int id) {
        System.out.println("权重为2的被访问");
        User user = new User();
        user.setId(1);
        user.setName("wuweinan");
        user.setAge(23);
        return user;
    }
}
  • @Service //Spring 注入IOC容器

  • @com.alibaba.dubbo.config.annotation.Service(timeout = 3000,retries = 2,weight = 10) //alibaba dubbo 对外提供服务

Application

@SpringBootApplication
@EnableDubbo
public class MySpringbootUserServiceApplication {
    public static void main(String[] args) {
        SpringApplication.run(MySpringbootUserServiceApplication.class, args);
    }
}

application.yml

server:
  port: 8080
dubbo:
  application:
    name: dubbo-user
  registry:
    address: zookeeper://127.0.0.1:2181
  protocol:
    name: dubbo
    port: 20880

POM

  <dependencies>
        <!--公共接口-->
        <dependency>
            <groupId>com.nanoswarm</groupId>
            <artifactId>my-interface-api</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>

9.3 my-meeting-consumer(consumer)

?MeetingServcieImpl

@Service
public class MeetingServiceImpl implements MeetingService {

    @Reference(loadbalance = "random")
    private UserService userService;

    @Override
    public MeetingPublish selectMeetingByMeetingCode(String meetingCode) {

        MeetingPublish m = new MeetingPublish();
        m.setId(1);
        m.setMeetingCode(meetingCode);
        m.setName("this is the meetingName");
        m.setUid(2);
        //TODO  dubbo远程调用
        User user = userService.selectUserById(1);
        System.out.println(user);
        return m;
    }
}

Application

@EnableDubbo
@SpringBootApplication
public class MyMeetingConsumerApplication {
    public static void main(String[] args) {

        SpringApplication.run(MyMeetingConsumerApplication.class, args);
    }
}

application.yml

server:
  port: 8081
dubbo:
  application:
    name: dubbo-meeting
  registry:
    address: zookeeper://localhost:2181

POM

 <dependencies>
        <dependency>
            <groupId>com.nanoswarm</groupId>
            <artifactId>my-interface-api</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-10-17 12:03:34  更:2021-10-17 12:05:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:36:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码