栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

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


        
        
            org.springframework.boot
            spring-boot-starter
        

        
        
            org.projectlombok
            lombok
        

        
        
            org.springframework.boot
            spring-boot-starter-web
        

        
        
            com.alibaba.boot
            dubbo-spring-boot-starter
            0.2.0
        
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

  
        
        
            com.nanoswarm
            my-interface-api
            0.0.1-SNAPSHOT
        
    
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

 
        
            com.nanoswarm
            my-interface-api
            0.0.1-SNAPSHOT
        
    

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/326282.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号