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代表不重试
多版本
当一个接口实现,出现不兼容升级时,可以用版本号过渡,版本号不同的服务相互间不引用。
可以按照以下的步骤进行版本迁移:
- 在低压力时间段,先升级一半提供者为新版本
- 再将所有消费者升级为新版本
- 然后将剩下的一半提供者升级为新版本
测试:
<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=“*”代表任意的