栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Dubbo入门案例&Dubbo特性

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Dubbo入门案例&Dubbo特性

Dubbo入门案例


    org.apache.dubbo
    dubbo
    ${dubbo.version}



    org.apache.curator
    curator-framework
    ${zookeeper.version}



    org.apache.curator
    curator-recipes
    ${zookeeper.version}


    com.itheima
    interface
    1.0-SNAPSHOT

消费者代码
package com.xiao.controller;

import com.xiao.pojo.User;
import com.xiao.service.UserService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/user")
public class UserController {

//    @Autowired 在统一模块中,可以使用spring自动注入,但是现在在不同模块中,并且部署在不同电脑上。
//    那么需要dubbo给我们进行注入   org.apache.dubbo.config.annotation.Reference;  
    @Reference(timeout = 1000,retries = 2)
    private UserService userService;

    @RequestMapping("/sayHello")
    public String sayHello(){
        return userService.sayHello();
    }

    @RequestMapping("/find")
    public User find(int id){
        return userService.findUserByid(id);
    }
}

springmvc.xml配置文件






    
    

    
    
    
        
        
    
    
    
    
    

web.xml配置文件



    
		 
    
        springmvc
        org.springframework.web.servlet.DispatcherServlet
        
        
            contextConfigLocation
            classpath:spring/springmvc.xml
        
    
    
        springmvc
        /
    


pom.xml



  
  4.0.0  
  com.xiao  
  dobbo-web  
  1.0-SNAPSHOT  
  war
   
    5.1.9.RELEASE  
    2.7.4.1  
    4.0.0 
    
   
      
     
      javax.servlet  
      javax.servlet-api  
      3.1.0  
      provided 
      
      
     
      org.springframework  
      spring-context  
      ${spring.version} 
      
      
     
      org.springframework  
      spring-webmvc  
      ${spring.version} 
      
      
     
      org.slf4j  
      slf4j-api  
      1.7.21 
      
     
      org.slf4j  
      slf4j-log4j12  
      1.7.21 
      
      
     
      org.apache.dubbo  
      dubbo  
      ${dubbo.version} 
      
      
     
      org.apache.curator  
      curator-framework  
      ${zookeeper.version} 
      
      
     
      org.apache.curator  
      curator-recipes  
      ${zookeeper.version} 
    
    
      com.xiao
      interface
      1.0-SNAPSHOT
    
    
   
     
        
       
        org.apache.tomcat.maven  
        tomcat7-maven-plugin  
        2.1  
         
          8000  
          / 
         
       
     
   

服务者代码
package com.xiao.service.impl;

import com.xiao.pojo.User;
import com.xiao.service.UserService;
import org.apache.dubbo.config.annotation.Service;

@Service(timeout = 5000,retries = 2)
public class UserServiceImpl implements UserService {
    @Override
    public String sayHello() {
        return "hello,dubbo";
    }

    @Override
    public User findUserByid(int id) {
        User xiao = new User(1, "xiao", "123");
        return xiao;
    }
}

applicationContext.xml





	
	

	
    
    
	
	
	
	
	
	



web.xml 因为这个模块需要对外提供服务 所以需要运行所需的web.xml文件




		 
	
    
        contextConfigLocation
        classpath*:spring/applicationContext*.xml
    
    
        org.springframework.web.context.ContextLoaderListener
    



pom.xml



    4.0.0

    com.xiao
    dobbo-service
    1.0-SNAPSHOT
    war

    
        5.1.9.RELEASE
        2.7.4.1
        4.0.0

    

    
        
        
            javax.servlet
            javax.servlet-api
            3.1.0
            provided
        
        
        
            org.springframework
            spring-context
            ${spring.version}
        
        
        
            org.springframework
            spring-webmvc
            ${spring.version}
        

        
        
            org.slf4j
            slf4j-api
            1.7.21
        
        
            org.slf4j
            slf4j-log4j12
            1.7.21
        


        
        
            org.apache.dubbo
            dubbo
            ${dubbo.version}
        
        
        
            org.apache.curator
            curator-framework
            ${zookeeper.version}
        
        
        
            org.apache.curator
            curator-recipes
            ${zookeeper.version}
        
        
            com.xiao
            interface
            1.0-SNAPSHOT
        
    

    
        
            
            
                org.apache.tomcat.maven
                tomcat7-maven-plugin
                2.1
                
                    9000
                    /
                
            
        
    

消费者需要和提供者接口进行统一,所以将接口提出来打成jar包,两个模块分别引入对应依赖即可。最后有服务提供模块实现代码

统一接口模块代码
package com.xiao.service;

import com.xiao.pojo.User;

public interface UserService {
     String sayHello();

     User findUserByid(int id);
}

pom.xml



    4.0.0

    com.xiao
    interface
    1.0-SNAPSHOT


    
        
            com.xiao
            dobbo-pojo
            1.0-SNAPSHOT
        
    

同理,两个需要统一实体类,那么将实体类提出来,打成jar包,在接口模块中进行引入即可

实体类模块

pom.xml



    4.0.0

    com.xiao
    dobbo-pojo
    1.0-SNAPSHOT


User类:
一定要实现Serializable接口,因为服务提供者在返回对象时,通过数据流的形式返回,那么java对象就必须转换成流的形式,服务提供者 对java对象进行序列化,消费者进行反序列化。我们做的只需要实现接口。序列化和反序列化的操作由Dubbo替我们进行实现。

package com.itheima.pojo;

import java.io.Serializable;

public class User implements Serializable {
    private int id;
    private String name;
    private String pwd;
    // 省略构造方法和get set 方法
}

Dubbo特性 Dubbo地址缓存

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

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

当服务提供者地址发生变化时,注册中心会通知服务消费者更新服务提供者的地址。

Dubbo超时与重试
@Service(timeout = 5000,retries = 2)   // 服务提供者处设置 连接时间超过5s则断开连接(默认为1)。重试次数2 默认为2  在第一次失败之后进行计数  所以设置为2 一共为3
@Reference(timeout = 1000,retries = 2) // 服务消费者处设置
// 两个地方都进行设置 ,则以服务消费方为准
// 一般在服务提供方进行设置
Dubbo多版本

当一个服务有个新版本,但是新版本不i稳定,我们就让小部分服务消费者访问新版本

同一个接口的不同版本完成灰度发布

@Service(version = "v2.0") // 服务提供方 
@Service(version = "v1.0") // 服务提供方 
@Reference(version = "v2.0") // 服务消费方
Dubbo负载均衡

负载均衡策略(4种)

Random:按照权重比例,默认值。按照权重设置随机概率
roundrobin:按权重轮询,权重越高,一次轮询调用次数越多
leastactive:最少活跃调用数(最后一次处理请求所花的时间),相同活跃数的随机。
consistenHash:一致性hash,相同的参数请求总是发到同一提供者(比如参数id=1的请求第一次发到了二号机器上,那么后面所有id=1的请求都会发到二号机器上)

@Service(weight=100) // 默认值也是100  weight设置权重
@Reference(loadbalance = "random")  // 默认也是random

@Service(weight=100) // 默认值也是100
@Reference(loadbalance = "roundrobin")  // 默认也是random
Dubbo集群容错

集群容错模式:

Failover Cluster:失败重试。默认值。当出现失败,重试其它服务器,默认重试2次,使用retries配置,一般用于读操作(要是写操作,因为延时导致重试,那么会出现两笔数据)。

Failfast Cluster:快速失败,只发起一次调用,失败立即报错,一般用于写操作。

Failsafe Cluter:失败安全,出现失败直接忽略,返回一个空结果。

Failback Cluster:失败自动恢复,后台记录失败请求,定时重发直到成功为止。

Forking Cluster:并行调用多个服务器,只有一个成功即返回。消耗性能。

Broadcast Cluster:广播调用所有提供者,逐个调用,任意一台报错则报错。

@Reference(cluster = "failover") // failfast,failsafe,failback,forking,broadcast
Dubbo服务降级

一台机器有多个服务模块。当机器负荷即将过载,则将相比之下不重要的服务不被调用,比如 : 广告服务,日志服务,支付服务。符合过载时,将广告和日志服务进行降级处理。

服务降级方式:

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

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

@Reference(mock="force:return null") // 不再调用服务
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/756490.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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