上次Dubbo-admin控制台和zookeeper搭建完成之后,今天来进行spring服务层和接口的整合测试。
SSM基础搭建自行解决。本例只提供在SSM基础之上整合。
首先在service层和web层的pom中添加如下依赖:并且将serivce层和web层都改为WAR打包
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.0</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
简单例子,对于Service层来说,我们创建两个包一个为service接口类和service实现类。
创建DemoService接口类和DemoServiceImpl实现类
public interface DemoService {
public String hello(String words);
}
@Service("demoService")
@Transactional
@Slf4j
public class DemoServiceImpl implements DemoService {
@Override
public String hello(String words) {
return words+" received";
}
}
接下来配置Spring的消费者和提供者的配置
分别为spring-provider.xml
<!--提供服务的名称 消费者和生产者名字没有必然联系 不需要一致-->
<dubbo:application name="MKShopService"/>
<!--注册服务 address的ip根据你zookeeper服务器的ip修改-->
<dubbo:registry protocol="zookeeper" address="192.168.50.10:2181"/>
<!--使用dubbo协议 端口号为20800-->
<dubbo:protocol host="192.168.50.36" name="dubbo" port="20800"/>
<!--需要暴露出来的服务 后期也可以使用注解-->
<dubbo:service interface="com.nexus.manager.service.DemoService" ref="demoService"/>
spring-consumer.xml
<dubbo:application name="MKShopManagerWeb"/>
<!--注册消费者 address的ip根据你zookeeper服务器的ip修改-->
<dubbo:registry protocol="zookeeper" address="192.168.50.10:2181"/>
<!--指定消费者的ip 这里特解决对于虚拟机内网的情况 会导致消费者注册ip不正确问题-->
<dubbo:protocol host="192.168.50.36"/>
<!--依赖服务-->
<dubbo:reference interface="com.nexus.manager.service.UserService" id="userService"/>
<dubbo:reference interface="com.nexus.manager.service.DemoService" id="demoService"/>
最好IDEA创建两个tomcat,分别修改不同的端口号,我修改为9080,8080端口,jmx端口为1099,2099.
先运行service服务,再运行web层。(运行之前先把zookeeper开启一定!)
过程中踩了不少坑,
1,springMVC的加载顺序有可能会导致dubbo重复加载bean注册服务。
2,dubbo的timeout默认为300,有可能会导致超时异常,需要调整超时时间。
3,局域网内网的机器,一定要注意在同一局域网首先要求可以互ping通,而且获取的ip是本机ip(因为对于多网卡的电脑,dubbo默认获取的ip不一定正确,有可能是虚拟网卡的ip,导致注册上了,却消费不了,显示超时),这个问题困扰了我很久。
到此dubbo+zookeeper整合spring就结束了。