一、下载安装zk注册中心并启动:
官网地址:http://www.apache.org/dyn/closer.cgi/zookeeper/
我的是zookeeper-3.3.6版本的。下载之后需要修改下文件:进入zk的conf目录。复制下zoo_sample.cfg
这个文件并重命名为zoo.cfg,然后把修改该文件内容,下面是我的,这个只是单机配置:
# 心跳时间间隔 tickTime=2000 # The number of ticks that the initial # 初始化心跳次数 initLimit=10 # The number of ticks that can pass between # sending a request and getting an acknowledgement syncLimit=5 # 数据文件存储路径 dataDir=D:\develop_soft\zookeeper-3.3.6\data # 端口 clientPort=2181
然后再进入bin目录,启动zk,见下图(ps:)要先启动zk不然dubbo连接会报错,
二、创建dubbo工程:
1、项目结构:
2 各个结构介绍
① api:主要是对外提供的一个接口jar模块。只定义一些接口
② provider:提供者,该模块主要是作为具体实现api中定义的接口的业务代码。同时作为dubbo的提供者。
该模块的dubbo的一些配置,放在application.properties中:
#dubbo 有关 #应用名称,消费者还是提供方 spring.dubbo.application.name=provider #zk注册中心的地址,如果是多个,用"," 分开 spring.dubbo.registry.address=zookeeper://127.0.0.1:2181 #协议类型 spring.dubbo.protocol.name=dubbo spring.dubbo.protocol.port=20880 #dubbo的扫描包,具体是自己引用dubbo的那个bean的位置 spring.dubbo.scan=prx.demo.dubbo.provider
实现方法:主要引入的注解是dubbo提供的
启动项目,提供方项目,再控制台看到有关dubbo的几个信息:注册,连接的并正常启动表明成功了
③consumer:
配置:
#dubbo配置 #应用名称,消费者还是提供方 spring.dubbo.application.name=consumer #zk注册中心的地址,如果是多个,用"," 分开 spring.dubbo.registry.address=zookeeper://127.0.0.1:2181 #dubbo的扫描包,具体是自己引用dubbo的那个bean的位置 spring.dubbo.scan=prx.demo.dubbo.consumer
具体调用,注意这个时候引用的bean的注解也是dubbo提供的那个:
启动然后就可以测试了。 这个是没问题的。
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>prx.sunx.demo</groupId> <artifactId>prx-sunx-demo-dubbo</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <name>prx-sunx-demo-dubbo</name> <description>Demo project for Spring Boot</description> <modules> <module>prx-sunx-demo-dubbo-provider</module> <module>prx-sunx-demo-dubbo-consumer</module> </modules> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.7.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <!--配置版本信息--> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <!--<dubbo.version>2.5.3</dubbo.version>--> <dubbo.version>1.0.0</dubbo.version> <zookeeper.version>3.4.6</zookeeper.version> <zkclient.version>0.5</zkclient.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>io.dubbo.springboot</groupId> <artifactId>spring-boot-starter-dubbo</artifactId> <version>${dubbo.version}</version> </dependency> <!--zk注册中心--> <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>${zkclient.version}</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </exclusion> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>${zookeeper.version}</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> </project>
最后说下这简单的例子中遇到的一个坑:
如果是放在同一个模块中的话在建立包的时候提供方和消费方不要完全一样,主要是对于dubbo注入这块的包不要完全一样。 就是说:“spring.dubbo.scan=prx.demo.dubbo.consumer” 这个配置在扫描dubbo的bean时如果一样的话,会报错。可能是null,可能是报找不到对应的bean什么的。
上面就是springboot+dubbo+zk的一个简单入门例子。还有问题或者坑有待后续继续发掘,该日志仅记录下一个学习过程。欢迎交流哈
源码下载地址:https://github.com/sunholdIng/springBoot_dubbo.git