启动时检测
在(一)以zookeeper作为服务注册中心的Dubbo入门案例(基于ssm)中我们是先启动provider再启动consumer,是没有问题的。但是如果我们先启动consumer时会报错找不到服务(如下)。
这是因为consumer在启动时会自动去检测所用到的服务是否存在。
只需要在provider方加上下面的配置就不会启动时检测,在开发环境中我们可以将启动时检测去掉。
<dubbo:consumer check="false"/>
或者加在调用的服务注解里面。
@Reference(check = false)
负载均衡
所谓负载均衡,就是将请求分配到不同的操作单元上执行,从而共同完成工作任务。
只需要consumer加上注解就行
@Reference(loadbalance = "random")
或者provider加上注解
@Service(loadbalance = "random")
就可以实现负载均衡的随机分配
我们在(一)以zookeeper作为服务注册中心的Dubbo入门案例(基于ssm)的基础上进行一下测试:
在provider上加上注解@Reference(loadbalance = "random")
打开consumer HelloServiceImpl实现类
@Service //注意这里使用com.alibaba.dubbo.config.annotation.Service; 不是spring的注解
public class HelloServiceImpl implements HelloService {
public String sayHello(String name) {
return "8081:hello"+name;
}
}
在这里加上8081用以区分,然后以8081的端口来启动tomcat加载项目。
@Service //注意这里使用com.alibaba.dubbo.config.annotation.Service; 不是spring的注解
public class HelloServiceImpl implements HelloService {
public String sayHello(String name) {
return "8083:hello"+name;
}
}
改成8083,再讲配置中的端口进行一下修改,然后用8083端口的tomcat启动provider项目:
<dubbo:protocol name="dubbo" port="20880"/>
启动provider进行访问,然后刷新:
会有两个端口显示,说明调用了不同的服务。打开Dubbo-admin进行查看:
这时会看到同一个接口被两个consumer注册了。
事务问题
当我们直接把@Transactional
加到服务上的时候启动项目访问consumer
项目正常启动,但是找不到服务,并且在dubbo-admin中也没有发现服务的注册。
解决方法如下:
在provider注解上加上接口的名字
@Service(interfaceClass = HelloService.class)
并且在配置文件中引入proxy-target-class="true"
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
这时重新启动项目,发现又能重新访问到服务了,并且在dubbo-admin中又发现了服务的注册。
帮助到您请点赞关注收藏谢谢!!