1. 写在前面:
读代码就像读书,如同与一群优秀工程师架构师交流。
这一系列都是费曼学习法的学习笔记。
2. 准备:
-
官方文档http://dubbo.apache.org/zh-cn/docs/user/quick-start.html
-
环境准备
网上这方面的东西很多,自行百度吧
3. hello word
环境说明:demo基于springboot实现,zookeeper部署在本地VM上。
3.1 pom依赖
dubbo项目基于maven来开发,首先在demo项目中导入dubbo的依赖,删减按环境来进行。org.apache.dubbo的dubbo在starter有,但是我本地出现注解未能找到的问题,先记录下。
<!--dubbo-springBoot依赖-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>${dubbo.version}</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>${dubbo.version}</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<version>${dubbo.version}</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
<type>pom</type>
</dependency>
<!--zookeeper依赖-->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
</dependency>
3.2 dubbo配置
Dubbo 采用全 Spring 配置方式,透明化接入应用,对应用没有任何 API 侵入,只需用 Spring 加载 Dubbo 的配置即可。
以下为摘录官方的配置说明以及使用springboot的配置信息。如果不熟悉dubbo可以使用官方提供的demo来运行。
-
【官方】用 Spring 配置声明暴露服务
provider.xml:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://dubbo.apache.org/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"> <!-- 提供方应用信息,用于计算依赖关系 --> <dubbo:application name="hello-world-app" /> <!-- 使用multicast广播注册中心暴露服务地址 --> <dubbo:registry address="multicast://224.5.6.7:1234" /> <!-- 用dubbo协议在20880端口暴露服务 --> <dubbo:protocol name="dubbo" port="20880" /> <!-- 声明需要暴露的服务接口 --> <dubbo:service interface="org.apache.dubbo.demo.DemoService" ref="demoService" /> <!-- 和本地bean一样实现服务 --> <bean id="demoService" class="org.apache.dubbo.demo.provider.DemoServiceImpl" /> </beans>
【官方】通过 Spring 配置引用远程服务
consumer.xml:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://dubbo.apache.org/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"> <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 --> <dubbo:application name="consumer-of-helloworld-app" /> <!-- 使用multicast广播注册中心暴露发现服务地址 --> <dubbo:registry address="multicast://224.5.6.7:1234" /> <!-- 生成远程服务代理,可以和本地bean一样使用demoService --> <dubbo:reference id="demoService" interface="org.apache.dubbo.demo.DemoService" /> </beans>
-
springboot的配置,本质上是一样的和上文中官方实例基本一一对应,不过官方demo给出的是具体配置bean,下文给出使用包扫描注解方式
服务提供方:
dubbo.application.name=product-provider dubbo.registry.address=zookeeper://192.168.190.100:2181 dubbo.protocol.name=dubbo dubbo.protocol.port=20880 dubbo.scan.base-packages=com.example.productservice.service
服务消费方:
dubbo.application.name=product-consumer dubbo.registry.address=zookeeper://192.168.190.100:2181 dubbo.protocol.name=dubbo dubbo.protocol.port=20880 dubbo.consumer.check=false
3.3 结果
服务启动后,dubbo admin可以查看提供方消费方信息(dubbo-admin部署使用参见官方文档):