记录dubbo+zookeeper+spring搭建(二)

924 阅读2分钟

上次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就结束了。