zoukankan      html  css  js  c++  java
  • dubbo的使用实例

    一、项目结构

    用 maven 多模块的构建方式,在 spring-dubbo 下构建三个子模块:

    • dubbo-common:公共模块,用于存放公共的接口和 bean,被 dubbo-provider 和 dubbo-provider 所引用;
    • dubbo-provider :服务的提供者,提供商品的查询服务;
    • dubbo-provider :是服务的消费者,调用 provider 提供的查询服务。

    另外,本项目 Dubbo 的搭建采用 ZooKeeper 作为注册中心。

    二、项目依赖

     在父工程的项目中统一导入依赖 Dubbo 的依赖:

     <dependency>
                <!--dubbo 依赖-->
                <groupId>com.alibaba</groupId>
                <artifactId>dubbo</artifactId>
                <version>2.6.2</version>
            </dependency>
    <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>4.0.0</version> <exclusions> <exclusion> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> </exclusion> </exclusions> </dependency>
    <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.13</version> </dependency>

    三、公共模块

    api是接口,bean是实体类。

     四、 服务提供者

     

    1. 开发服务

      productService 是服务的提供者,其实现的接口 IProductService 来源于公共模块

      @Service //此处为dubbo的注解
      public class ProductService implements IProductService { private static List<Product> productList = new ArrayList<>(); static { for (int i = 0; i < 20; i++) { productList.add(new Product(i, "number" + i, i / 2 == 0, new Date(), 66.66f * i)); } } public Product queryProductById(int id) { for (Product product : productList) { if (product.getId() == id) { product.setDateInProduced(new Date()); return product; } } return null; } public List<Product> queryAllProducts() { return productList; } }
    2. 暴露服务

    在spring-dubbo-provider.xml中暴露服务,除了在xml中定义接口,还可以用扫描形式 <dubbo:annotation package="com.heibaiying.service" />,然后使用的dubbo框架所提供的@service注解。作用是声明需要暴露的服务接口,如上面红色的注解。

    <?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://dubbo.apache.org/schema/dubbo"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
           http://dubbo.apache.org/schema/dubbo
           http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
    
        <!-- 提供方应用信息,用于计算依赖关系 -->
        <dubbo:application name="dubbo-provider"/>
    
        <!-- 使用zookeeper注册中心暴露服务地址 如果是集群配置 用, 分隔地址 -->
        <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"/>
    
        <!-- 用dubbo协议在20880端口暴露服务 -->
        <dubbo:protocol name="dubbo" port="20880"/>
    
        <!-- 声明需要暴露的服务接口,还可以用注解形式 -->
        <dubbo:service interface="com.heibaiying.api.IProductService" ref="productService"/>
        <!-- 和本地bean一样实现服务 -->
        <bean id="productService" class="com.heibaiying.service.ProductService"/>
    </beans>

    五、服务消费者

    1. 调用服务,在spring-dubbo-consumer.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://dubbo.apache.org/schema/dubbo"
             xsi:schemaLocation="http://www.springframework.org/schema/beans
             http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
             http://dubbo.apache.org/schema/dubbo
             http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
      
          <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
          <dubbo:application name="dubbo-consumer">
              <dubbo:parameter key="shutdown.timeout" value="60000"/> <!-- 单位毫秒 -->
          </dubbo:application>
      
          <!--Dubbo 缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止 Spring 初始化完成,以便上线时,能及早发现问题,默认 check="true"。-->
          <!--可以关闭所有服务的启动时检查 -->
          <dubbo:consumer check="false" />
      
          <!-- 使用zookeeper注册中心暴露发现服务地址 -->
          <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"/>
      
          <!-- 生成远程服务代理,可以和本地bean一样使用demoService -->
          <dubbo:reference id="sellService" interface="com.heibaiying.api.IProductService"/>
      
      
      </beans>
    2. 消费服务
    @Controller
    @RequestMapping("sell")
    public class SellController {
    
      //当成本地bean一样使用 @Resource
    private IProductService productService; @RequestMapping public String productList(Model model) { List<Product> products = productService.queryAllProducts(); model.addAttribute("products", products); return "products"; } @RequestMapping("product/{id}") public String productDetail(@PathVariable int id, Model model) { Product product = productService.queryProductById(id); model.addAttribute("product", product); return "product"; } }

    六、dubbo控制台

    dubbo的新版控制台不太好用,我用的是dubbo-admin-2.5.10版本。直接将工程duboo-admin打成war包,放到tomcat中。

    源码地址:https://github.com/bruce-cao/spring-samples-for-all/tree/master/spring/spring-dubbo

  • 相关阅读:
    eclipse下c/cpp " undefined reference to " or "launch failed binary not found"问题
    blockdev 设置文件预读大小
    宝宝语录
    CentOS修改主机名(hostname)
    subprocess报No such file or directory
    用ldap方式访问AD域的的错误解释
    英特尔的VTd技术是什么?
    This virtual machine requires the VMware keyboard support driver which is not installed
    Linux内核的文件预读详细详解
    UNP总结 Chapter 26~29 线程、IP选项、原始套接字、数据链路访问
  • 原文地址:https://www.cnblogs.com/caozx/p/12273881.html
Copyright © 2011-2022 走看看