7、Dubbo-配置(2)

重试次数

通常配合timeout超时设置进行配置

     <dubbo:reference interface="com.cr.service.UserService"  id="userService"  timeout="2000">
     </dubbo:reference>

 

 

     <dubbo:service interface="com.cr.service.UserService"  ref="userServiceImpl">
          <dubbo:method name="getUserAddressList"  timeout="4000"></dubbo:method>
     </dubbo:service>  
此时是报错的!!!

 

 

 

retries:默认会执行一次
retries="3"时会执行4次

进行测试

public class UserServiceImpl  implements UserService {
     @Override
     public List<UserAddress> getUserAddressList(String userId)  {
           System.out.println("正在执行请求!!!");
           UserAddress address1 = new UserAddress(1, "安徽合肥蜀山区", "2", "程老师", "", "12345");
           UserAddress address2 = new UserAddress(2, "安徽合肥包河区", "2", "程老师", "", "12345");
           List<UserAddress> list = new  ArrayList<UserAddress>();
           list.add(address2);
           list.add(address1);
           try {
                Thread.sleep(4000);
           } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
           }
           return list;
     }
}

 

 

<dubbo:reference interface="com.cr.service.UserService"  id="userService" 
     timeout="1000" retries="3"> </dubbo:reference>

 

 

     <!-- 4、暴露服务 -->   
     <!-- interface是只想接口,ref属性是指定接口的实现 -->   
     <dubbo:service interface="com.cr.service.UserService"  ref="userServiceImpl">
      <dubbo:method name="getUserAddressList"  timeout="4000"></dubbo:method>
     </dubbo:service>  

 

此时进行测试:
打印了四次:

重试了四次才进行连接成功:

 

如果服务端口多的话,会重试进行其他提供者的服务进行连接

<dubbo:protocol name="dubbo" port="20080"></dubbo:protocol>       
     
<dubbo:protocol name="dubbo" port="20081"></dubbo:protocol>     
     <!-- 4、暴露服务 -->   
     <!-- interface是只想接口,ref属性是指定接口的实现 -->   
     <dubbo:service interface="com.cr.service.UserService"  ref="userServiceImpl">
      <dubbo:method name="getUserAddressList"  timeout="4000"></dubbo:method>
     </dubbo:service>  

 

幂等可以设置重试次数(查询、删除、修改)
非幂等不可以进行重试次数(新增)
retries=0代表不重试

 

多版本

 

当一个接口实现,出现不兼容升级时,可以用版本号过渡,版本号不同的服务相互间不引用。
可以按照以下的步骤进行版本迁移:
  1. 在低压力时间段,先升级一半提供者为新版本
  2. 再将所有消费者升级为新版本
  3. 然后将剩下的一半提供者升级为新版本

测试:

 

 

 

     <dubbo:service interface="com.cr.service.UserService"  ref="userServiceImpl" version="1.0.0">
          <dubbo:method name="getUserAddressList"  timeout="4000"></dubbo:method>
     </dubbo:service>  
     <bean id="userServiceImpl"   class="com.cr.service.impl.UserServiceImpl"></bean>       
            
            
     <dubbo:service interface="com.cr.service.UserService"  ref="userServiceImpl2" version="2.0.0">
          <dubbo:method name="getUserAddressList"  timeout="4000"></dubbo:method>
     </dubbo:service>  
     <bean id="userServiceImpl2"   class="com.cr.service.impl.UserServiceImpl2"></bean>    

 

 

 <dubbo:reference interface="com.cr.service.UserService"  id="userService" 
      timeout="1000" retries="3" version="1.0.0"> </dubbo:reference>

 

此时的测试结果:

主程序重试未成功连接:

 

服务提供者打印:

 

如果消费者中version=“*”代表任意的

 

posted @ 2019-03-04 23:16  MrChengs  阅读(180)  评论(0编辑  收藏  举报