如果还不了解Dubbo是什么或者不知道怎么搭建的可以先看一下我的上一篇文章。

首先我先来讲下提供者(也就是服务端)的配置,先上配置文件代码:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans
  7. http://www.springframework.org/schema/beans/spring-beans.xsd
  8. http://www.springframework.org/schema/context
  9. http://www.springframework.org/schema/context/spring-context-2.5.xsd
  10. http://code.alibabatech.com/schema/dubbo
  11. http://code.alibabatech.com/schema/dubbo/dubbo.xsd
  12. ">
  13. <!-- 提供方应用信息,用于计算依赖关系 -->
  14. <dubbo:application name="dubbo_provider" />
  15. <!-- 使用multicast广播注册中心暴露服务地址 <dubbo:registry address="multicast://224.5.6.7:1234"
  16. /> -->
  17. <!-- 使用zookeeper注册中心暴露服务地址 -->
  18. <dubbo:registry address="zookeeper://127.0.0.1:2181" />
  19. <!-- 用dubbo协议在20880端口暴露服务 -->
  20. <dubbo:protocol name="dubbo" port="20880" />
  21. <!-- 具体的实现bean
  22. <bean id="demoService" class="com.unj.dubbotest.provider.impl.DemoServiceImpl" />
  23. -->
  24. <!-- 声明需要暴露的服务接口
  25. <dubbo:service interface="com.unj.dubbotest.provider.DemoService" ref="demoService" />
  26. -->
  27. <!-- 使用注解方式暴露接口 -->
  28. <dubbo:annotation package="com.dubbo.provide" />  //相当于暴露接口
  29. <!-- 加入spring注解扫描 -->
  30. <context:component-scan base-package="com.dubbo.provide"/>  //相当于注入bean
  31. </beans>

下面这两句就是开启注解扫描的配置:

  1. <!-- 使用注解方式暴露接口 -->
  2. <dubbo:annotation package="com.dubbo.provide" />
  3. <!-- 加入spring注解扫描 -->
  4. <context:component-scan base-package="com.dubbo.provide"/>

package和base-package是要扫描的位置,这些配置的意思大部分都跟spring的配置差不多,这里就不多说了。

接下来来看下我们Service中代码注解的使用:

  1. package com.dubbo.provide.user.service.impl;
  2. import org.springframework.stereotype.Component;
  3. import com.alibaba.dubbo.config.annotation.Service;
  4. import com.dubbo.provide.user.service.IUserService;
  5. /**
  6. *
  7. * @author LiZhiXian
  8. * @version 1.0
  9. * @date 2015-9-12 下午4:44:21
  10. */
  11. @Component
  12. @Service
  13. public class UserService implements IUserService {
  14. @Override
  15. public String getUser() {
  16. return "dubbo接口调用成功......";
  17. }
  18. }

其中@Component就是spring bean的注解,而@Service就是dubbo本身的注解,这两个注解合起来的意思就跟我们配置文件中先声明一个bean然后再声明接口暴露的意思是一样的。

接下来看下消费者(也就是客户端)的配置:

我这边使用的是springmvc框架,注意:这边接口的名称以及包路径,必须和提供者暴露的接口一致,可以直接将服务端的接口导出成jar,然后在客户端引入使用。

平时加配置文件的习惯都是按不同的功能来配置的,但是刚试了一下将dubbo单独配置,发现在注解扫描的时候扫描不到,有可能是跟spring的注解扫描发生了冲突,

最后我将dubbo的配置集成到了springMvc-servlet.xml配置中问题就解决了。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans
  3. xmlns="http://www.springframework.org/schema/beans"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xmlns:p="http://www.springframework.org/schema/p"
  6. xmlns:context="http://www.springframework.org/schema/context"
  7. xmlns:util="http://www.springframework.org/schema/util"
  8. xmlns:mvc="http://www.springframework.org/schema/mvc"
  9. xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
  10. xsi:schemaLocation="http://www.springframework.org/schema/beans
  11. http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
  12. http://www.springframework.org/schema/context
  13. http://www.springframework.org/schema/context/spring-context-3.2.xsd
  14. http://www.springframework.org/schema/util
  15. http://www.springframework.org/schema/util/spring-util-3.1.xsd
  16. http://www.springframework.org/schema/mvc
  17. http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
  18. http://code.alibabatech.com/schema/dubbo
  19. http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
  20. <!-- <util:properties id="APP_PROPERTIES" location="classpath:sys.properties" local-override="true"/> -->
  21. <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
  22. <dubbo:application name="basic_dubbo_consumer" />
  23. <!-- 使用zookeeper注册中心暴露服务地址 -->
  24. <dubbo:registry address="zookeeper://127.0.0.1:2181" />
  25. <!-- 启用spring mvc 注解-->
  26. <context:annotation-config/>
  27. <!-- MVC转换 -->
  28. <mvc:annotation-driven/>
  29. <mvc:default-servlet-handler/>
  30. <dubbo:annotation package="com.dubbot.service" />//生产者接口所在包
  31. <!-- ①:对web包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能 -->
  32. <context:component-scan base-package="com.frame." />
  33. <!-- ②:启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->
  34. <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>
  35. <!-- 转换成json对象配置 -->
  36. <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"
  37. p:ignoreDefaultModelOnRedirect="true" >
  38. <property name="messageConverters">
  39. <list>
  40. <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>
  41. </list>
  42. </property>
  43. </bean>
  44. <!--  ③:对模型视图名称的解析,即在模型视图名称添加前后缀 -->
  45. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
  46. <property name="prefix" value="/WEB-INF/pages/"></property>
  47. <property name="suffix" value=".jsp"></property>
  48. </bean>
  49. <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  50. <!-- 该属性用来配置可上传文件的最大 byte 数 1G -->
  51. <property name="maxUploadSize"><value>10737418240</value></property>
  52. </bean>
  53. </beans>

dubbo的配置我是加在了springMvc配置的最前面

接下来看下我在controller中的运用

  1. package com.frame.controller;
  2. import org.springframework.stereotype.Controller;
  3. import org.springframework.web.bind.annotation.RequestMapping;
  4. import org.springframework.web.bind.annotation.ResponseBody;
  5. import com.alibaba.dubbo.config.annotation.Reference;
  6. import com.dubbo.provide.user.service.IUserService;
  7. /**
  8. *
  9. * @author LiZhiXian
  10. * @version 1.0
  11. * @date 2015-9-16 上午8:54:55
  12. */
  13. @Controller
  14. @RequestMapping(value="/user/*")
  15. public class UserController {
  16. @Reference
  17. IUserService userService;//调用Dubbo暴露的接口
  18. @RequestMapping(value="getUser.htm")
  19. public @ResponseBody String getUser(){
  20. return userService.getUser();
  21. }
  22. }

这变就使用到了@Reference来注入服务端爆入的接口。

消费者端如果使用dubbo:annotation 配置,就使用@reference注入生产者暴露的接口

如果使用dubbo:reference配置,就使用@autowired注入

dubbo注解的更多相关文章

  1. 【原】通过Dubbo注解实现RPC调用

    启动Dubbo服务有2个方式,1是通过xml配置,2是通过注解来实现,这点和Spring相似. 采用XML配置如下: <?xml version="1.0" encoding ...

  2. springboot整合dubbo注解方式

    工程结构: 主pom <?xml version="1.0" encoding="UTF-8"?> <project xmlns=" ...

  3. Spring Boot整合dubbo(注解的方式)

    一.创建项目 1.创建一个空的项目 2.在空的项目中添加两个Spring Boot模块,如下图所示 二.在provider模块中的pom文件中添加依赖 <dependency> <g ...

  4. springMVC dubbo注解无效,service层返回空指针

    出现空指针的原因是:spring mvc扫描的时候根本无法识别@Reference ,同一方面,dubbo的扫描也无法识别Spring @Controller ,所以两个扫描的顺序要排列好,  如果先 ...

  5. dubbo学习(四)配置dubbo 注解方式配置

    provider(生产者) service注解暴露服务 /** * 用户管理实现类 */ @Service //用的dubbo的注解,表明这是一个分布式服务 @Component //注册为sprin ...

  6. springboot整合dubbo注解方式(四)

    在笔者换jar包时候出现问题: Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/zook ...

  7. springboot整合dubbo注解方式(二)

    将配置文件进行更换: 在一中是引入: <!--引入dubbo start依赖--> <!-- <dependency> <groupId>com.alibab ...

  8. springboot整合dubbo注解方式(三)

    笔者用自己代码测试时候发现这个版本信息,可以没有,也可以制定一个就可以了,没有太大的问题,只是需要注意引入的依赖问题,两个jar与一个jar的问题, 然后就是接口公共依赖问题,案例是把我找的几个案例进 ...

  9. 基于注解的Dubbo服务配置

      基于注解的Dubbo服务配置可以大大减少dubbo xml配置文件中的Service配置量,主要步骤如下:   一.服务提供方   1. Dubbo配置文件中增加Dubbo注解扫描 <!-- ...

随机推荐

  1. unix-like 图形服务组件(ubuntu)

    ubuntu18.04 准备回归wayland, 因为手机平板的ubuntu无人使用,开发成本太高.所以弃用Unity8, 重新改用 waylang 的GNOME sudo systemctl dis ...

  2. Oracle 表连接方式(1)---

    Oracle 表之间的连接分为三种: 1. 内连接(自然连接) 2. 外连接 (1)左外连接 (左边的表不加限制) (2)右外连接(右边的表不加限制) (3)全外连接(左右两表都不加限制) 3. 自连 ...

  3. Redux API之combineReducers

    combineReducers(reducers) 随着应用变得复杂,需要对 reducer 函数 进行拆分,拆分后的每一块独立负责管理 state 的一部分. combineReducers 辅助函 ...

  4. MSSQl分布式查询(转)

    MSSQlServer所谓的分布式查询(Distributed Query)是能够访问存放在同一部计算机或不同计算机上的SQL Server或不同种类的数据源, 从概念上来说分布式查询与普通查询区别 ...

  5. linux 下定位程序假死

    ps -ef | grep 程序名称 pstack 程序的进程ID

  6. Mathematics Base - Tensor

    以下是我对张量的理解,备注是具体解释,Xmind导出的图片没法显示出来,主要还是将张量间的关系画出来,方便理解. 图1 张量

  7. 字符串反转reverse

    我们有一串字符串,比如: DECLARE @Source VARCHAR(MAX)= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 现想把它反转显示: ZYXWVUTSRQPONMLKJI ...

  8. IT兄弟连 JavaWeb教程 使用Servlet实现在页面中显示随机数

    在com.xdl.servlet包下定义RandomServlet类并HttpServlet类,在该类中生成随机数并发送给客户端.RandomServlet类详细代码如下: package com.x ...

  9. thinkphp5.1静态文件存放问题

    5.1的版本不能将静态文件放在application目录下,只能放在public目录下,否则会拒绝访问

  10. 洛谷 P1908 逆序对(归并排序解法)

    树状数组解法:https://www.cnblogs.com/lipeiyi520/p/10846927.html 题目描述 猫猫TOM和小老鼠JERRY最近又较量上了,但是毕竟都是成年人,他们已经不 ...