如果还不了解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. MySql 扩展存储引擎

    MySql 扩展存储引擎 下面介绍几个列式存储引擎(都有两个版本:社区版.商业版): 一:TokuDB TokuDB 是一个高性能.支持事务处理的 MySQL 和 MariaDB 的存储引擎.Toku ...

  2. poj2279排队——杨氏矩阵与钩子公式(DP爆内存)

    题目:http://poj.org/problem?id=2279 书上的DP做法会爆内存,尝试写了一个,过了样例. 转载: 代码如下: #include<iostream> #inclu ...

  3. httpd服务相关实验

    实验环境: CentOS6.8 1.连接测试: 在/etc/httpd/conf/httpd.conf telnet 172.16.252.242 80 GET /index.html HTTP/1. ...

  4. 使用XMLConfiguration解析xml,PropertiesConfiguration解析properties等相应信息

    org.apache.commons.configuration.XMLConfiguration; Apache Common-Configuration工具可以从Properties文件,XML文 ...

  5. 《Java多线程编程核心技术》读后感(十四)

    单例模式与多线程 立即加载/饿汉模式 立即加载就是使用类的时候已经将对象创建完毕,常见的实现办法就是直接new实例化. 立即加载/饿汉模式实在调用方法前,实例已经被创建了 package Six; p ...

  6. linux下删除3分钟之前指定文件夹下的指定类型文件

    如果想要修改crontab,一般做以下的几步就可以了 将crontab 推到一个自定义的文件上 crontab -l>;tmp 编辑这个文件,做需要的修改 vi tmp 推回crontab cr ...

  7. Spring入门第十七课

    AOP编程 问题: 代码混乱: 越来越多的非业务需求(日志和验证等)加入后,原有的业务方法急剧膨胀,每个方法在处理核心逻辑的同事还必须兼顾其他多个关注点. 代码分散:以日志需求为例,只是为了满足这个单 ...

  8. 利用JS函数制作时钟运行程序

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 51Nod - 1092 回文字符串(添加删除字符LCS变形)

    回文字符串 回文串是指aba.abba.cccbccc.aaaa这种左右对称的字符串.每个字符串都可以通过向中间添加一些字符,使之变为回文字符串. 例如:abbc 添加2个字符可以变为 acbbca, ...

  10. 如何使用jmeter连接数据库并提取数据库中的值作为参数,与响应信息中提取的值进行比较

    思路: 连接数据库 获取数据库返回的数据 获取接口返回的数据 两者返回数据进行对比验证 连接数据库 1.jmeter要链接mysql数据库,首先得下载mysql jdbc驱动包(注:驱动包的版本一定要 ...