内容简介:Docker下dubbo开发,三部曲之三:java开发
在前两章 《Docker下dubbo开发,三部曲之一:极速体验》 和 《Docker下dubbo开发,三部曲之二:本地环境搭建》 中,我们体验了dubbo环境搭建以及服务的发布和消费,对dubbo有了初步认识,本章我们来实战dubbo服务的发布和消费代码的编写,实战后的我们能将自己的服务发布到dubbo环境供别人调用,也能让自己的工程去调用dubbo环境中的已有服务;
源码下载
本次实战一共有两个工程,分别是服务的提供者和消费者,都是web工程,代码在github上,地址是git@github.com:zq2599/blog_demos.git,这里面有多个工程,本章所需的代码如下:
1. 服务提供者的代码在目录dubbo_service_provider下,如下图红框所示:
- 服务消费者的代码在目录dubbo_service_consumer下,如下图红框所示:
接下来我们逐个分析,实战开发;
服务提供者开发
首先是pom中的依赖关系,除了常用的spring相关的,我们还要加入dubbo和zookeeper的依赖,如下所示:
<!-- dubbo --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.5.3</version> <exclusions> <exclusion> <artifactId>spring</artifactId> <groupId>org.springframework</groupId> </exclusion> </exclusions> </dependency> <!-- zkclient --> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency> <!-- zookeeper --> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.3.6</version> </dependency>
接下来看代码,本次实战提供了两个服务,分别实现了一下两个接口:
1. CalculateService定义add方法,执行最基础的int型加法服务,实现如下:
public class CalculateServiceImpl implements CalculateService{ @Override public int add(int a, int b) { return a + b; } }
- PlatformService定义getRpcFrom方法,返回当前环境系统中的换变量TOMCAT_SERVER_ID的值,这个值是 docker 容器启动的时候从docker-compose.yml中传入的;
public class PlatformServiceImpl implements PlatformService { @Override public String getRpcFrom() { return System.getenv().get("TOMCAT_SERVER_ID"); } }
以上是两个演示用的服务实现,逻辑很简单,现在看如何将服务发布到dubbo环境:
spring-extends.xml是我们自定义的spring配置文件,想发布到dubbo环境的服务都在这里声明:
<dubbo:application name="dubbo_service_provider" /> <!-- 本机 伪集群 测试 --> <!-- <dubbo:registry protocol="zookeeper" address="192.9.145.19:2181,192.9.145.19:2182,192.9.145.19:2183" /> --> <dubbo:registry address="zookeeper://zkhost:2181" /> <dubbo:protocol name="dubbo" port="20880" /> <dubbo:service interface="com.bolingcavalry.service.CalculateService" ref="calculateService" /> <dubbo:service interface="com.bolingcavalry.service.PlatformService" ref="platformService" /> <!-- 和本地bean一样实现服务 --> <bean id="calculateService" class="com.bolingcavalry.service.impl.CalculateServiceImpl" /> <bean id="platformService" class="com.bolingcavalry.service.impl.PlatformServiceImpl" />
dubbo:application定义了服务归属的应用为dubbo_service_provider;
dubbo:registry定义了注册中心地址,本次实战的zookeeper配置为单机,所以只填写了一个地址”zookeeper://zkhost:2181”,其中zkhost是docker容器的link属性的别名(连接到zookeeper容器),在dubbo:registry配置的上面有一个被注释掉的dubbo:registry配置,里面是zookeeper集群时候的连接方式;
dubbo:protocol定义采用dubbo协议,使用20880端口;
dubbo:service配置了要发布的服务,指定服务接口以及对应的bean;
mvn clean package -Dmaven.test.skip=true
服务消费者开发
服务消费者工程是dubbo_service_consumer,pom中的依赖关系和服务提供者的一样的,由于要调用dubbo_service_provider提供的服务,所以要把CalculateService和PlatformService这两个接口引入到工程中,一般是通过jar包方式引入,这里图个方便,直接将两个接口的源码复制到工程中,如下图:
再来看看调用服务的代码,如下图所示,通过普通的Autowired就能直接使用了,就像普通的spring环境中使用服务一样简单:
从dubbo环境获取远程服务的能力,是通过以下spring配置来实现的:
<!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 --> <dubbo:application name="dubbo_service_consumer" /> <!-- 使用multicast广播注册中心暴露发现服务地址 --> <!-- <dubbo:registry protocol="zookeeper" address="192.9.145.19:2181,192.9.145.19:2182,192.9.145.19:2183" /> --> <dubbo:registry address="zookeeper://172.28.0.3:2181" /> <!-- 生成远程服务代理,可以和本地bean一样使用demoService --> <dubbo:reference id="calculateService" interface="com.bolingcavalry.service.CalculateService" /> <dubbo:reference id="platformService" interface="com.bolingcavalry.service.PlatformService" />
dubbo:application和dubbo:registry的作用和前面分析的服务提供者的一样,dubbo:reference是指从dubbo环境获得远程的服务,interface指定了服务类型,应用启动后,用到服务端的时候就会根据注册中心的信息,远程调用服务提供者的服务;
以上就是dubbo的服务提供者和消费者的实战源码,实际的生产环境中,还会涉及到更详细更复杂的配置和使用,请读者们关注dubbo官网的开发手册。
以上所述就是小编给大家介绍的《Docker下dubbo开发,三部曲之三:java开发》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Docker下的Spring Cloud三部曲之二:细说Spring Cloud开发
- SPA 路由三部曲之核心原理
- Swift三部曲(一):指针的使用
- Fork 三部曲之 clone 的诞生
- 深度学习模型剪枝:Slimmable Networks三部曲
- 实战maven私有仓库三部曲之一:搭建和使用
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Head First HTML5 Programming
Eric Freeman、Elisabeth Robson / O'Reilly Media / 2011-10-18 / USD 49.99
What can HTML5 do for you? If you're a web developer looking to use this new version of HTML, you might be wondering how much has really changed. Head First HTML5 Programming introduces the key featur......一起来看看 《Head First HTML5 Programming》 这本书的介绍吧!