本篇是基于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] 举报,一经查实,本站将立刻删除。