028-86922220

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

怎么用Dubbo+Zookeeper+Spring实现Demo

这篇文章主要讲解了“怎么用Dubbo+Zookeeper+Spring实现Demo”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用Dubbo+Zookeeper+Spring实现Demo”吧!

为东光等地区用户提供了全套网页设计制作服务,及东光网站建设行业解决方案。主营业务为成都网站设计、网站建设、外贸网站建设、东光网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

一、Dubbo介绍

1、简介

  Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。 微服务使用最广泛的框架就是SpringCloud跟Dubbo。Dubbo比较专注于服务治理这块,而SpringCloud全家桶则提供了微服务的一整套解决方案

2、核心

3、功能

4、特点

Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,不管是Provider还是Consumer都可以通过Spring的配置文件进行配置,配置完之后,就可以像使用springbean一样进行服务暴露和调用了,完全看不到dubboapi的存在。Dubbo基于Spring的Schema扩展进行加载。

现在还可以通过 API 的方式进行调用。

5、组成:节点角色

6、架构图及角色之间调用关系

怎么用Dubbo+Zookeeper+Spring实现Demo

7、四大特性




  4.0.0

  com.test
  dubbo_demo
  1.0-SNAPSHOT
  
    dubbo_consumer
    dubbo_provider
    dubbo_api
  
  pom

  dubbo_demo Maven Webapp
  
  http://www.example.com

  
    UTF-8
    1.7
    1.7
  

  
    
      junit
      junit
      4.11
      test
    
    
      org.springframework
      spring-context
      5.0.4.RELEASE
    

    
    
      org.slf4j
      slf4j-api
      1.7.24
    

    
    
      com.alibaba
      dubbo
      2.6.3
    
    
    
      org.apache.zookeeper
      zookeeper
      3.4.14
    

    
      org.apache.curator
      curator-framework
      2.8.0
    
    
      org.apache.curator
      curator-recipes
      2.8.0
    
    
    
      com.github.sgroschupf
      zkclient
      0.1
    

  

  
    dubbo_demo
    
      
        
          maven-clean-plugin
          3.1.0
        
        
        
          maven-resources-plugin
          3.0.2
        
        
          maven-compiler-plugin
          3.8.0
        
        
          maven-surefire-plugin
          2.22.1
        
        
          maven-war-plugin
          3.2.2
        
        
          maven-install-plugin
          2.5.2
        
        
          maven-deploy-plugin
          2.8.2
        
      
    
  

    (2) 创建dubbo_api moudle,在项目中定义服务接口:该接口需单独打包,在服务提供方和消费方共享 在dubbo-api中定义服务接口DemoService,如下:

package com.test;

public interface DemoService {
    public String sayHello(String name);
}

    (3)创建dubbo_provider moudle,然后在dubbo_provider中实现上述接口。为什么这里能实现跨moudle调用接口并且完成接口实现,因为在provider的pom.xml文件中添加了dubbo_api作为依赖,故能引入上述接口。如图

怎么用Dubbo+Zookeeper+Spring实现Demo

        其中接口实现类DemoServiceImpl代码如下:

import com.test.DemoService;

public class DemoServiceImpl implements DemoService {


    public String sayHello(String name) {
        
        return "hello"+name;
    }
}

     同时在此moudle下写一个启动测试类,便于后面启动provider:

import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.io.IOException;

public class ProviderTest {
    public static void main(String[] args){
        ClassPathXmlApplicationContext applicationContext =
                new ClassPathXmlApplicationContext("classpath:dubbo-provider.xml");
        applicationContext.start();

        System.out.println("Dubbo provider start,启动服务提供..");

        try {
            System.in.read();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

    (4)创建dubbo_consumer moudle,然后在dubbo_consumer中写一个启动测试类,便于后面启动consumer调用provider提供的服务:

import com.test.DemoService;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.io.IOException;

public class ConsumerTest {
    public static void main(String[] args){
        ClassPathXmlApplicationContext applicationContext =
                new ClassPathXmlApplicationContext("classpath:dubbo-consumer.xml");
        applicationContext.start();

        DemoService demoService =
                (DemoService) applicationContext.getBean("ddemoService");

        System.out.println(demoService.sayHello(" guy"));

        try {
            System.in.read();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

    (5)上述代码写好后,好像各个moudle看起来好像没有联系?大家都好奇就是Dubbo是怎么实现服务的发布和远程调用的吧。接下来是重点,进行provider和consumer的配置

a. 在dubbo_provider的resource中新建dubbo_provider.xml文件,实现dubbo中provider的配置:

     首先完成应用配置,配置当前提供方应用名为dubbo_provider。

     然后完成注册中心配置,将Zookeeper作为注册中心,设定其地址。

    然后进行协议配置,用于配置提供服务的协议信息,协议只由provider指定,使用port="20880"作为服务提供的接口,供consumer调用。

     最后进行服务配置,用于暴露一个服务接口,其绝对路径interface="com.test.DemoService",代号为ref="demoService"

    这里还需要为接口实现类配置一个bean,以供在provider的启动测试类中调用bean中的方法。




    
    

    
    

    
    

    
    

    
    

b. 在dubbo_consumer的resource中新建dubbo_consumer.xml文件,实现dubbo中consumer的配置。

     首先完成应用配置,配置当前消费方应用名为dubbo_consumer;

     然后完成完成注册中心配置,将Zookeeper作为注册中心,设定其地址。消费方向注册中心订阅自己所需的服务;

    最后生成远程服务代理,调用到了绝对路径为interface="com.test.DemoService" 的接口,设定其代号为id="ddemoService",可以和本地bean一样使用ddemoService、

    (这里可能大家有个问题,为什么这里多了个d,因为为了和dubbo_provider.xml暴露的服务接口和bean做区别。说明消费方调用到此接口服务后,相当于自己的本地有了这个接口,所以接口名可以和provider的不一样。相当于我在别人那里拿了一个苹果,在我这里我就可以不叫他苹果,我叫他梨也可以,因为这个东西是在我手上(本地),我怎么用本地都清楚,不需要外人(provider)清楚)




    
    
        
    
    
        
    
    
        

    (6)项目结构如下,具体可以在文末下载本项目demo。

怎么用Dubbo+Zookeeper+Spring实现Demo

3、测试结果

    依次启动zookeeper(打开bin文件下的zkServer.cmd,并且不要关闭。如果闪退的会可以用cmd调用文件名打开)、运行dubbo-provider、运行dubbo-consumer获得测试结果如下。

怎么用Dubbo+Zookeeper+Spring实现Demo

4、项目遇到的问题

     本项目遇到了一个比较奇葩的问题找了我一天,每次在运行provider和consumer的时候都会出现下述问题。

    问题:找不到Spring命名空间处理程序。

Offending resource: class path resource [dubbo-consumer.xml]; nested exception is org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://dubbo.apache.org/schema/dubbo]

Offending resource: class path resource [dubbo-consumer.xml]

    就是下图红框的两个地址有问题,可是这两个地址都是可以打开的。

怎么用Dubbo+Zookeeper+Spring实现Demo

    问题所在:最终发现之前有段时间dubbo被关闭了一段时间,那段时间dubbo的域名是code.alibabatech.com ,网上找到别人的案例里面配置的都是下面这种地址,结果发现这些地址都失效。按道理我现在程序里用最新的应该没错,为什么还会报错了。又只能继续到处找bug。

        http://code.alibabatech.com/schema/dubbo
        http://code.alibabatech.com/schema/dubbo/dubbo.xsd ">

怎么用Dubbo+Zookeeper+Spring实现Demo

    后来开始怀疑是不是我一开始用的版本比较旧(2.5.X);然后发现果然如此。问题在于: dubbo-config-spring-2.6.1.jar --> META-INF-->spring.handlers 中的配置还是之前的域名 code.alibabatech.com , 但是这个域名已经不可用了,所以用dubbo旧版本的需要注意下这个问题(参考https://blog.csdn.net/huweijun_2012/article/details/80239803)

怎么用Dubbo+Zookeeper+Spring实现Demo

     但是现在2.6.2以上都版本都不出现这个问题了,spring.handlers 中的配置还是之前的域名 包含旧的和新的域名,相当于可以兼容。但是由于code.alibabatech.com 域名已经不可用,所以解决办法只能是在pom.xml文件中修改dubbo的版本,使用至少2.6.2以上版本就不会出现此问题。

感谢各位的阅读,以上就是“怎么用Dubbo+Zookeeper+Spring实现Demo”的内容了,经过本文的学习后,相信大家对怎么用Dubbo+Zookeeper+Spring实现Demo这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!


分享文章:怎么用Dubbo+Zookeeper+Spring实现Demo
URL链接:http://www.tsicrk.com/article/pojgsj.html

其他资讯

让你的专属顾问为你服务

2.3188s