RPC远程调用——Dubbo

1.安装Zookeeper

  a.下载Zookeeper后解压

  b.进入根目录下的conf文件夹,将zoo_sample.cfg改成bak文件,并复制一个修改为zoo.cfg,修改相关配置

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
#此处设置data和log的路径
dataDir=D:/JavaTools/zookeeper/server1/zookeeper-3.4.11/zooData
dataLogDir=D:/JavaTools/zookeeper/server1/zookeeper-3.4.11/zooLog
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1

  c.进入bin目录,双击zkServer.cmd启动Zookeeper(关闭窗口则停止)

 

 

2.创建服务端

  a.导入依赖

  <dependency>  
        <groupId>com.alibaba</groupId>  
        <artifactId>dubbo</artifactId>  
        <version>2.5.3</version>
        <exclusions>
            <exclusion>
                <artifactId>spring</artifactId>
                <groupId>org.springframework</groupId>
            </exclusion>
        </exclusions>  
    </dependency> 
    
    <dependency>
        <groupId>org.apache.zookeeper</groupId>
        <artifactId>zookeeper</artifactId>
        <version>3.4.5</version>
        <exclusions>
            <exclusion>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>com.github.sgroschupf</groupId>
        <artifactId>zkclient</artifactId>
        <version>0.1</version>
    </dependency>

  b.创建服务接口

public interface DubboServer {
    public String hello(String name);
}

  c.创建接口实现类

public class DubboServerImp implements DubboServer {
    @Override
    public String hello(String name) {
        return "hello"+name;
    }
}

  d.创建spring-dubbo-provider.xml

<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"  
       xsi:schemaLocation="http://www.springframework.org/schema/beans  
        http://www.springframework.org/schema/beans/spring-beans.xsd  
        http://code.alibabatech.com/schema/dubbo  
        http://code.alibabatech.com/schema/dubbo/dubbo.xsd  
        ">  
    <!-- 提供方应用名称信息,这个相当于起一个名字,在dubbo管理页面比较清晰是哪个应用暴露出来的 --> 
    <dubbo:application name="user_provider"/>  
    <!-- 使用zookeeper注册中心注册服务 -->  
    <dubbo:registry address="zookeeper://localhost:2181"/>  
  
    <dubbo:protocol name="dubbo" port="20880"/>  
  
    <!-- <dubbo:monitor protocol="registry"/>  -->
    <!-- 暴露的服务接口 -->  
    <dubbo:service interface="com.wode.server.DubboServer"  
                   ref="dubboServer" timeout="5000" retries="2" />  
  
    <bean id="dubboServer" class="com.wode.server.imp.DubboServerImp" />  
  
</beans> 

 

 

3.创建客户端

  a.引入相同的依赖

    <dependency>  
        <groupId>com.alibaba</groupId>  
        <artifactId>dubbo</artifactId>  
        <version>2.5.3</version>
        <exclusions>
            <exclusion>
                <artifactId>spring</artifactId>
                <groupId>org.springframework</groupId>
            </exclusion>
        </exclusions>  
    </dependency> 
    
    <dependency>
        <groupId>org.apache.zookeeper</groupId>
        <artifactId>zookeeper</artifactId>
        <version>3.4.5</version>
        <exclusions>
            <exclusion>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>com.github.sgroschupf</groupId>
        <artifactId>zkclient</artifactId>
        <version>0.1</version>
    </dependency>

  b.复制粘贴服务端的接口

public interface DubboServer {
    public String hello(String name);
}

  c.创建spring-dubbo-client.xml

<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"  
       xsi:schemaLocation="http://www.springframework.org/schema/beans  
        http://www.springframework.org/schema/beans/spring-beans.xsd  
        http://code.alibabatech.com/schema/dubbo  
        http://code.alibabatech.com/schema/dubbo/dubbo.xsd  
        ">  
  
    <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->  
    <dubbo:application name="user_consumer" />
  
    <dubbo:registry address="zookeeper://localhost:2181"/>  
    <!-- <dubbo:monitor protocol="registry"/> -->
  
    <!-- 注册中心配置 -->  
    <dubbo:reference id="dubboServer" interface="com.wode.server.DubboServer" timeout="10000" check="false" />  
    
</beans> 

  d.调用服务

@Controller
public class DubboTestController {

    @Resource
    DubboServer server;
    
    //根据查询信息
    @RequestMapping("/getMsg")
    public @ResponseBody String getMsg(HttpSession session, HttpServletRequest request,HttpServletResponse response){
        String keyWord = request.getParameter("keyWord");
                //调用服务
        String result = server.hello(keyWord);
        return result;
    }
    
    
}

 

注意:服务端和客户端的接口名称务必保持一致,连包名都要一致,不然会报Please check registry access list (whitelist/blacklist)的异常

 

posted @ 2018-01-31 12:22  晨M风  阅读(197)  评论(0编辑  收藏  举报