微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

dubbo初学,快速体验

本篇是基于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 
 47         <!-- spring -->
 48         <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
 49         <dependency>
 50             <groupId>org.springframework</groupId>
 51             <artifactId>spring-context</artifactId>
 52             <version>5.1.5.RELEASE</version>
 53         </dependency>
 54 
 55         <!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
 56         <dependency>
 57             <groupId>org.springframework</groupId>
 58             <artifactId>spring-core</artifactId>
 59             <version>5.1.5.RELEASE</version>
 60         </dependency>
 61 
 62         <!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->
 63         <dependency>
 64             <groupId>org.springframework</groupId>
 65             <artifactId>spring-beans</artifactId>
 66             <version>5.1.5.RELEASE</version>
 67         </dependency>
 68 
 69         <!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
 70         <dependency>
 71             <groupId>org.springframework</groupId>
 72             <artifactId>spring-web</artifactId>
 73             <version>5.1.5.RELEASE</version>
 74         </dependency>
 75 
 76         <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
 77         <dependency>
 78             <groupId>org.springframework</groupId>
 79             <artifactId>spring-webmvc</artifactId>
 80             <version>5.1.5.RELEASE</version>
 81         </dependency>
 82 
 83         <!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
 84         <dependency>
 85             <groupId>org.springframework</groupId>
 86             <artifactId>spring-test</artifactId>
 87             <version>5.1.5.RELEASE</version>
 88             <scope>test</scope>
 89         </dependency>
 90 
 91         <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
 92         <dependency>
 93             <groupId>org.springframework</groupId>
 94             <artifactId>spring-jdbc</artifactId>
 95             <version>5.1.5.RELEASE</version>
 96         </dependency>
 97 
 98         <!-- https://mvnrepository.com/artifact/org.springframework/spring-tx -->
 99         <dependency>
100             <groupId>org.springframework</groupId>
101             <artifactId>spring-tx</artifactId>
102             <version>5.1.5.RELEASE</version>
103         </dependency>
104 
105         <!-- https://mvnrepository.com/artifact/org.springframework/spring-oxm -->
106         <dependency>
107             <groupId>org.springframework</groupId>
108             <artifactId>spring-oxm</artifactId>
109             <version>5.1.5.RELEASE</version>
110         </dependency>
111 
112         <!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo -->
113         <dependency>
114             <groupId>org.apache.dubbo</groupId>
115             <artifactId>dubbo</artifactId>
116             <version>2.7.0</version>
117         </dependency>
118         <!--<dependency>
119             <groupId>org.apache.zookeeper</groupId>
120             <artifactId>zookeeper</artifactId>
121             <version>3.4.13</version>
122         </dependency>
123         <dependency>
124             <groupId>com.101tec</groupId>
125             <artifactId>zkclient</artifactId>
126             <version>0.8</version>
127         </dependency>-->
128     </dependencies>
129 
130 
131 </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 
15 
16 </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 
24 </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,开启日志功能

###set log levels###
log4j.rootLogger=info, stdout
###output to the console###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
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 
23 </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()方法,服务的消费方成功获取到服务,打印结果如下:

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐