专业的编程技术博客社区

网站首页 > 博客文章 正文

通过Dubbo注解实现RPC调用 进来一看

baijin 2024-10-30 01:30:04 博客文章 7 ℃ 0 评论

  启动Dubbo服务有2个方式,1是通过xml配置,2是通过注解来实现,这点和Spring相似。

  • 采用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="find_all_goods" />
    <!-- 使用multicast广播注册中心暴露服务地址 -->
    <!-- <dubbo:registry address="multicast://224.5.6.7:1234" /> -->
    <!-- 使用zookeeper注册中心暴露服务地址 -->
    <dubbo:registry address="zookeeper://127.0.0.1:2181" />
    <!-- 用dubbo协议在20880端口暴露服务 -->
    <dubbo:protocol name="dubbo" port="20880" />
    <!-- 声明需要暴露的服务接口(注意是接口,不是实现类) -->
    <dubbo:service interface="com.zdd.dubbo.provider.GoodsService" ref="goodsService" />
    <!-- 这里是具体实现类,id和上面的暴露的服务接口ref要一致,dubbo就是通过这个来注册对应的服务 -->
    <bean id="goodsService" class="com.zdd.dubbo.provider.GoodsServiceImpl"></bean>
    </beans>

  • 上面代码是通过dubbo:service interface标签把接口暴露出去,在程序启动的时候会自动注册到zookeeper。

  • 消费端调用方式配置如下:

  • <?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="dubbo-consumer"/>
    <!-- 使用multicast广播注册中心暴露发现服务地址 -->
    <!-- <dubbo:registry address="multicast://224.5.6.7:1234" /> -->
    <dubbo:registry address="zookeeper://127.0.0.1:2181" />
    <!-- 生成远程服务代理,可以和本地bean一样调用 -->
    <dubbo:reference id="goodsService" interface="com.zdd.dubbo.provider.GoodsService" /></beans>

  • 然后我们可以像spring一样调用本地服务,代码如下:

View Code

上面的是采用xml方式配置dubbo,下面是通过注解配置dubbo,可以对比一下区别。


  • 通过注解方式配置的dubbo.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"
     xmlns:context="http://www.springframework.org/schema/context"
     xsi:schemaLocation="http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
    <!-- 提供方应用信息,用于计算依赖关系 --> 
    <dubbo:application name="dubbo_provider" /> 
    <!-- 使用multicast广播注册中心暴露服务地址 <dubbo:registry address="multicast://224.5.6.7:1234" 
     /> --> 
    <!-- 使用zookeeper注册中心暴露服务地址 --> 
    <dubbo:registry address="zookeeper://127.0.0.1:2181" /> 
    <!-- 用dubbo协议在20880端口暴露服务 --> 
    <dubbo:protocol name="dubbo" port="20880" /> 
    <!-- 具体的实现bean 
     <bean id="demoService" class="com.unj.dubbotest.provider.impl.DemoServiceImpl" /> 
     --> 
    <!-- 声明需要暴露的服务接口 
     <dubbo:service interface="com.unj.dubbotest.provider.DemoService" ref="demoService" /> 
     --> 
    <!-- 使用注解方式暴露接口 --> 
    <dubbo:annotation package="com.dubbo.provide" /> 
    <!-- 加入spring注解扫描 --> 
    <!-- <context:component-scan base-package="com.dubbo.provide"/> --></beans>

  • 上面是通过 dubbo:annotation package 扫描com.dubbo.provide下的所有包,类似于spring 的 context:component-scan base-package,它会把dubbo相关注解进行扫描,这样我们就不需要在xml里面针对每个服务接口配置dubbo:service interface。

  • 通过注解方式的服务实现类如下

  • package com.dubbo.provide;import com.alibaba.dubbo.config.annotation.Service;
    @Servicepublic class DubboPro implements DubboProInterface { public void print() {
     System.out.println("is ok");
     }
    }

  • 需要注意的是Service注解是dubbo的注解,而不是spring的,它位于dubbo.jar的annotaion目录下:

  • 消费端注解方式调用类如下:

View Code

通过@Reference注解,dubbo会在扫描的时候会自动帮我们代理接口(见下图),然后通过rpc调用远程服务

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表