本篇是基于spring框架的XML配置开发的dubbo应用程序,开发工具intellij idea,旨在对dubbo的快速理解和上手。

废话不多说,代码撸起来!!!

1.首先,新建一个maven工程,命名为dubbodemo,右击dubbodemo,新建module,如图

建立三个子项目,分别命名为dubbo-demo-api,dubbo-demo-consumer,dubbo-demo-provider

2.根目录下pom.xml文件配置如下

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6.  
  7. <groupId>com.nari</groupId>
  8. <artifactId>dubbo-demo</artifactId>
  9. <packaging>pom</packaging>
  10. <version>1.0-SNAPSHOT</version>
  11. <modules>
  12. <module>dubbo-demo-api</module>
  13. <module>dubbo-demo-provider</module>
  14. <module>dubbo-demo-consumer</module>
  15. </modules>
  16.  
  17. <dependencies>
  18. <dependency>
  19. <groupId>log4j</groupId>
  20. <artifactId>log4j</artifactId>
  21. <version>1.2.17</version>
  22. </dependency>
  23. <dependency>
  24. <groupId>org.slf4j</groupId>
  25. <artifactId>slf4j-api</artifactId>
  26. <version>1.7.5</version>
  27. </dependency>
  28. <dependency>
  29. <groupId>org.slf4j</groupId>
  30. <artifactId>slf4j-log4j12</artifactId>
  31. <version>1.7.5</version>
  32. </dependency>
  33.  
  34. <dependency>
  35. <groupId>org.apache.commons</groupId>
  36. <artifactId>commons-lang3</artifactId>
  37. <version>3.3.2</version>
  38. </dependency>
  39.  
  40. <dependency>
  41. <groupId>commons-io</groupId>
  42. <artifactId>commons-io</artifactId>
  43. <version>2.4</version>
  44. </dependency>
  45.  
  46. <!-- spring -->
  47. <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
  48. <dependency>
  49. <groupId>org.springframework</groupId>
  50. <artifactId>spring-context</artifactId>
  51. <version>5.1.5.RELEASE</version>
  52. </dependency>
  53.  
  54. <!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
  55. <dependency>
  56. <groupId>org.springframework</groupId>
  57. <artifactId>spring-core</artifactId>
  58. <version>5.1.5.RELEASE</version>
  59. </dependency>
  60.  
  61. <!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->
  62. <dependency>
  63. <groupId>org.springframework</groupId>
  64. <artifactId>spring-beans</artifactId>
  65. <version>5.1.5.RELEASE</version>
  66. </dependency>
  67.  
  68. <!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
  69. <dependency>
  70. <groupId>org.springframework</groupId>
  71. <artifactId>spring-web</artifactId>
  72. <version>5.1.5.RELEASE</version>
  73. </dependency>
  74.  
  75. <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
  76. <dependency>
  77. <groupId>org.springframework</groupId>
  78. <artifactId>spring-webmvc</artifactId>
  79. <version>5.1.5.RELEASE</version>
  80. </dependency>
  81.  
  82. <!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
  83. <dependency>
  84. <groupId>org.springframework</groupId>
  85. <artifactId>spring-test</artifactId>
  86. <version>5.1.5.RELEASE</version>
  87. <scope>test</scope>
  88. </dependency>
  89.  
  90. <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
  91. <dependency>
  92. <groupId>org.springframework</groupId>
  93. <artifactId>spring-jdbc</artifactId>
  94. <version>5.1.5.RELEASE</version>
  95. </dependency>
  96.  
  97. <!-- https://mvnrepository.com/artifact/org.springframework/spring-tx -->
  98. <dependency>
  99. <groupId>org.springframework</groupId>
  100. <artifactId>spring-tx</artifactId>
  101. <version>5.1.5.RELEASE</version>
  102. </dependency>
  103.  
  104. <!-- https://mvnrepository.com/artifact/org.springframework/spring-oxm -->
  105. <dependency>
  106. <groupId>org.springframework</groupId>
  107. <artifactId>spring-oxm</artifactId>
  108. <version>5.1.5.RELEASE</version>
  109. </dependency>
  110.  
  111. <!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo -->
  112. <dependency>
  113. <groupId>org.apache.dubbo</groupId>
  114. <artifactId>dubbo</artifactId>
  115. <version>2.7.0</version>
  116. </dependency>
  117. <!--<dependency>
  118. <groupId>org.apache.zookeeper</groupId>
  119. <artifactId>zookeeper</artifactId>
  120. <version>3.4.13</version>
  121. </dependency>
  122. <dependency>
  123. <groupId>com.101tec</groupId>
  124. <artifactId>zkclient</artifactId>
  125. <version>0.8</version>
  126. </dependency>-->
  127. </dependencies>
  128.  
  129. </project>

3.服务的提供方提供接口,如图所示,在dubbo-demo-api中新建一个interface接口,DemoService

  1. package com.nari.api;
  2.  
  3. public interface DemoService {
  4.  
  5. String sayHello(String name);
  6.  
  7. }

pom文件如下

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <parent>
  6. <artifactId>dubbo-demo</artifactId>
  7. <groupId>com.nari</groupId>
  8. <version>1.0-SNAPSHOT</version>
  9. </parent>
  10. <modelVersion>4.0.0</modelVersion>
  11.  
  12. <artifactId>dubbo-demo-api</artifactId>
  13.  
  14. </project>

4.dubbo-demo-provider目录下,引入对dubbo-demo-api依赖。新建DemoServiceImpl类实现DemoService接口,如图所示

pom.xml文件如下

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <parent>
  6. <artifactId>dubbo-demo</artifactId>
  7. <groupId>com.nari</groupId>
  8. <version>1.0-SNAPSHOT</version>
  9. </parent>
  10. <modelVersion>4.0.0</modelVersion>
  11.  
  12. <artifactId>dubbo-demo-provider</artifactId>
  13.  
  14. <dependencies>
  15. <dependency>
  16. <artifactId>dubbo-demo-api</artifactId>
  17. <groupId>com.nari</groupId>
  18. <version>1.0-SNAPSHOT</version>
  19. </dependency>
  20.  
  21. </dependencies>
  22.  
  23. </project>

DemoServiceImpl.java

  1. package com.nari.provider;
  2.  
  3. import com.nari.api.DemoService;
  4.  
  5. public class DemoServiceImpl implements DemoService {
  6. public String sayHello(String name) {
  7. return "hello " + name;
  8. }
  9. }

在resources目录下新建provider.xml文件,使用广播multicast作为注册中心,优点是易于操作,不用做其他配置。dubbo服务端口为20880,<dubbo:service>暴露服务端口demoService

  1. <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
  3. xmlns="http://www.springframework.org/schema/beans"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
  5. http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
  6.  
  7. <!-- provider's application name, used for tracing dependency relationship -->
  8. <dubbo:application name="demo-provider">
  9. <dubbo:parameter key="qos.enable" value="true" />
  10. <dubbo:parameter key="qos.accept.foreign.ip" value="false" />
  11. <dubbo:parameter key="qos.port" value="22222" />
  12. </dubbo:application>
  13. <!-- use multicast registry center to export service -->
  14. <dubbo:registry address="multicast://224.5.6.7:1234" check="false"/>
  15. <!-- use dubbo protocol to export service on port 20880 -->
  16. <dubbo:protocol name="dubbo" port="20880"/>
  17. <!-- service implementation, as same as regular local bean -->
  18. <bean id="demoService" class="com.nari.provider.DemoServiceImpl"/>
  19. <!-- declare the service interface to be exported -->
  20. <dubbo:service interface="com.nari.api.DemoService" ref="demoService"/>
  21. </beans>

新建provider.java,读取xml配置文件,代码如下

  1. package com.nari.provider.main;
  2.  
  3. import org.springframework.context.support.ClassPathXmlApplicationContext;
  4.  
  5. import java.io.IOException;
  6.  
  7. public class Provider {
  8.  
  9. public static void main(String[] args) {
  10. try {
  11. System.setProperty("java.net.preferIPv4Stack", "true");
  12. ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"META-INF/spring/provider.xml"});
  13. context.start();
  14. System.out.println("Provider started....");
  15. System.in.read();
  16. }catch (IOException e){
  17. e.printStackTrace();
  18. }
  19. }
  20.  
  21. }

在resources目录下引入log4j.properties,开启日志功能

  1. ###set log levels###
  2. log4j.rootLogger=info, stdout
  3. ###output to the console###
  4. log4j.appender.stdout=org.apache.log4j.ConsoleAppender
  5. log4j.appender.stdout.Target=System.out
  6. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
  7. log4j.appender.stdout.layout.ConversionPattern=[%d{dd/MM/yy hh:mm:ss:sss z}] %t %5p %c{2}: %m%n

5.dubbo-demo-consumer目录下,对暴露的接口调用,获取服务,文件目录如下

pom.xml文件配置如下

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <parent>
  6. <artifactId>dubbo-demo</artifactId>
  7. <groupId>com.nari</groupId>
  8. <version>1.0-SNAPSHOT</version>
  9. </parent>
  10. <modelVersion>4.0.0</modelVersion>
  11.  
  12. <artifactId>dubbo-demo-consumer</artifactId>
  13.  
  14. <dependencies>
  15. <dependency>
  16. <artifactId>dubbo-demo-provider</artifactId>
  17. <groupId>com.nari</groupId>
  18. <version>1.0-SNAPSHOT</version>
  19. </dependency>
  20. </dependencies>
  21.  
  22. </project>

在resources目录下新建consumer.xml文件,声明注册中心为multicast,地址与provider.xml文件中保持一致,<dubbo:reference>引入接口,调用服务。添加log4j.properties日志文件。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
  4. xmlns="http://www.springframework.org/schema/beans"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
  6. http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
  7.  
  8. <!-- consumer's application name, used for tracing dependency relationship (not a matching criterion),
  9. don't set it same as provider -->
  10. <dubbo:application name="demo-consumer">
  11. <dubbo:parameter key="qos.enable" value="true" />
  12. <dubbo:parameter key="qos.accept.foreign.ip" value="false" />
  13. <dubbo:parameter key="qos.port" value="33333" />
  14. </dubbo:application>
  15. <!-- use multicast registry center to discover service -->
  16. <dubbo:registry address="multicast://224.5.6.7:1234" check="false"/>
  17. <!-- generate proxy for the remote service, then demoService can be used in the same way as the
  18. local regular interface -->
  19. <dubbo:reference id="demoService" check="false" interface="com.nari.api.DemoService"/>
  20. <!--<dubbo:consumer check="false" />-->
  21. </beans>

新建consumer.java文件,context上下文获取bean服务,调用其方法

  1. package com.nari.consumer.main;
  2.  
  3. import com.nari.api.DemoService;
  4. import org.springframework.context.support.ClassPathXmlApplicationContext;
  5.  
  6. public class Consumer {
  7.  
  8. public static void main(String[] args) {
  9. ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"META-INF/spring/consumer.xml"});
  10. context.start();
  11. DemoService demoService = (DemoService) context.getBean("demoService");
  12. String hello = demoService.sayHello("zhangsan");
  13. System.out.println(hello);
  14. }
  15.  
  16. }

6.至此,工程搭建完成,先启动Provider.main()方法,服务的提供方提供服务,如图,打印结果如下

再启动Consumer.main()方法,服务的消费方成功获取到服务,打印结果如下:

dubbo初学,快速体验的更多相关文章

  1. gitbook 入门教程之快速体验

    本文主要介绍三种使用 gitbook 的方式,分别是 gitbook 命令行工具,Gitbook Editor 官方编辑器和 gitbook.com 官网. 总体来说,三种途径适合各自不同的人群,找到 ...

  2. 快速体验 Laravel 自带的注册、登录功能

    快速体验 Laravel 自带的注册.登录功能 注册.登录经常是一件很伤脑筋的是,Laravel 提供了解决方案,可以直接使用它.试过之后,感觉真爽! 前提:本地已安装好了 PHP 运行环境.mysq ...

  3. 分布式_事务_01_2PC框架raincat快速体验1

    一.前言 关于2PC的理论知识请见:分布式_理论_03_2PC 这一节我们来看下github上一个优秀的2PC分布式事务开源框架的快速体验. 二.源码 源码请见: https://github.com ...

  4. 分布式事务_01_2PC框架raincat快速体验

    一.前言 关于2PC的理论知识请见:分布式_理论_03_2PC 这一节我们来看下github上一个优秀的2PC分布式事务开源框架的快速体验. 二.源码 源码请见: https://github.com ...

  5. Dev 日志 | 文章《快速体验知识图谱 OwnThink》中的技术问题

    社区小伙伴反馈在实践文章<使用图数据库 Nebula Graph 数据导入快速体验知识图谱 OwnThink>时,遇到了一些问题,Nebula Graph 将在本文对该文章中出现的问题进行 ...

  6. Django之Django快速体验

    Django快速体验 前语: 这一节内容是直接快速上手,后面的内容是对内容进行按步解释,如果不想看解析的,可以直接只看这一节的内容. 1.新建项目应用新建项目test1新建应用booktest 2.注 ...

  7. CDH5.13快速体验

    相对于易用性很差Apache Hadoop,其他商业版Hadoop的性能易用性都有更好的表现,如Cloudera.Hortonworks.MapR以及国产的星环,下面使用CDH(Cloudera Di ...

  8. 【Java】15分钟快速体验阿里Java诊断工具Arthas

    [墙裂推荐]15分钟快速体验阿里Java诊断工具Arthas : https://alibaba.github.io/arthas/arthas-tutorials?language=cn&i ...

  9. sh_02_快速体验

    sh_02_快速体验 import sh_01_九九乘法表 sh_01_九九乘法表.multiple_table()

随机推荐

  1. 844. Backspace String Compare

    class Solution { public: bool backspaceCompare(string S, string T) { int szs=S.size(); int szt=T.siz ...

  2. openstack的网络、子网、端口的关系

    network network 是一个隔离的二层广播域.Neutron 支持多种类型的 network,包括 local, flat, VLAN, VxLAN 和 GRE. locallocal 网络 ...

  3. c语言const和c++const

    1.常量 常量是指值不能被改变的量,又叫做字面值 1.1常量分类 1)字符常量:'a', 'A', '*'. 2)字符串常量:"helloworld","ilovechi ...

  4. lnmp源码编译安装zabbix

    软件安装 Mysql 安装 tar xf mysql-5.7.13-1.el6.x86_64.rpm-bundle.tar -C mysql rpm -e --nodeps  mysql-libs-5 ...

  5. js 上传文件

    <input id="file_Up" name="file_Up" type="file" onchange="getFi ...

  6. 实习番外篇:解决C语言使用Makefile无法实现更好的持续集成问题

    工作中遇见的一个问题,提供项目源代码的情况下,希望对项目进行持续集成,达到一个C项目增量编译的效果.原本第一天是想通过模拟Makefile执行步骤来实现整个过程的,但是事实上发现整个Makefile显 ...

  7. 详细介绍jQuery.outerWidth() 函数具体用法

    outerWidth()函数用于设置或返回当前匹配元素的外宽度.外宽度默认包括元素的内边距(padding).边框(border),但不包括外边距(margin)部分的宽度.你也可以指定参数为true ...

  8. excel双击文件打开时空白,使用菜单打开正常的解决办法

    excel双击文件打开时空白,使用菜单打开正常的解决办法 打开 excel的选项 找到高级->常规 取消“忽略使用动态数据交换...”的勾,确定. 问题解决.

  9. 基础总结篇之一:Activity生命周期[转]

    from:http://blog.csdn.net/liuhe688/article/details/6733407   基础总结篇之一:Activity生命周期 子曰:溫故而知新,可以為師矣.< ...

  10. TypeError: 'MongoClient' object is not callable

    在声明数据库的时候,将中括号[ ]换成了圆括号() 错误: