Zookeeper 安装
-
解压
-
配置:
将 conf/zoo_sample.cfg 复制为 zoo.cfg
修改 zoo.cfgdataDir=D:\\zookeeper-3.4.14\\data dataLogDir=D:\\zookeeper-3.4.14\\log
创建文件夹 data log
-
启动:
bin/zkServer.cmd
Dubbo 样例代码
-
创建项目
父项目 dubbo-demo 子项目 dubbo-demo-api、dubbo-demo-consumer、dubbo-demo-provider -
父项目结构
-
父项目pom.xml
<?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"> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.3.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>org.apache.dubbo</groupId> <version>1.0-SNAPSHOT</version> <modelVersion>4.0.0</modelVersion> <artifactId>dubbo-demo</artifactId> <packaging>pom</packaging> <modules> <module>dubbo-demo-api</module> <module>dubbo-demo-consumer</module> <module>dubbo-demo-provider</module> </modules> <properties> <java.version>1.8</java.version> <spring-boot.version>2.1.1.RELEASE</spring-boot.version> <dubbo.version>2.7.1</dubbo.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.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <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.curator</groupId> <artifactId>curator-recipes</artifactId> <version>2.7.0</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
-
debbo-demo-api 项目提供接口
-
debbo-demo-api 项目pom.xml很简单,继承父亲,完全不用其他的
<?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"> <parent> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-demo</artifactId> <version>1.0-SNAPSHOT</version> </parent> <artifactId>dubbo-demo-api</artifactId> <packaging>war</packaging> <version>1.0-SNAPSHOT</version> <modelVersion>4.0.0</modelVersion> </project>
-
dubbo-demo-provider 引入 dubbo-demo-api ,实现接口
-
配置文件 application.properties
# demo-provider配置文件 # 端口配置 server.port=8081 ## Dubbo 服务提供者配置 # provider应用名称 spring.application.name=demo-provider # Dubbo组件扫描的基础包 dubbo.scan.base-packages=org.apache.dubbo.demo dubbo.application.name=dubbo-provider #注册中心地址 dubbo.registry.address=zookeeper://192.168.2.101:2181 # Dubbo 协议与端口 dubbo.protocol.name=dubbo dubbo.protocol.port=12345
-
pom.xml
<?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"> <parent> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-demo</artifactId> <version>1.0-SNAPSHOT</version> </parent> <version>1.0-SNAPSHOT</version> <modelVersion>4.0.0</modelVersion> <artifactId>dubbo-demo-provider</artifactId> <dependencies> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-demo-api</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies> </project>
-
spring boot 启动类
package org.apache.dubbo.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
-
dubbo-demo-consumer 作为服务的消费者(方法调用方)引入 dubbo-demo-api ,调用接口
一个普通的Controller -
配置文件 application.properties\
# demo-consumer配置文件 #端口配置,为防止端口冲突,该模块端口使用18080 server.port=18080 dubbo.application.name=dubbo-consumer #注册中心地址 dubbo.registry.address=zookeeper://localhost:2181 # 应用名称,配置模块项目名称即可 spring.application.name=demo-consumer
-
pom.xml
<?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"> <parent> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-demo</artifactId> <version>1.0-SNAPSHOT</version> </parent> <version>1.0-SNAPSHOT</version> <modelVersion>4.0.0</modelVersion> <artifactId>dubbo-demo-consumer</artifactId> <dependencies> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-demo-api</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies> </project>
-
sprint boot 启动类
package org.apache.dubbo.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class ConsumerApplication { public static void main(String[] args) { SpringApplication.run(ConsumerApplication.class, args); } }
-
先启动 provider,再启动 consumer,可以在zookeeper控制台看见连接的输出
-
访问 http://localhost:18080/hello/world 即可看见神奇的结果
Dubbo 监控页面
- GitHub 地址 https://github.com/apache/incubator-dubbo-admin
git clone https://github.com/apache/incubator-dubbo-admin.git
- 修改配置文件 dubbo-admin-server/src/main/resources/application.properties
admin.registry.address=zookeeper://127.0.0.1:2181 admin.config-center=zookeeper://127.0.0.1:2181 admin.metadata-report.address=zookeeper://127.0.0.1:2181
- 打包
mvn clean package
- 启动
cd dubbo-admin-distribution/target java -jar dubbo-admin-0.1.jar
- 访问 localhost:8080,神奇的页面就有了,也能看见我们注册的服务
问题与总结
- 父项目的pom的packaging方式为pom
- 我的消费者是个web Controller,所以 consumer 的 pom packaging 方式为 war
- 在父pom里面加上下面的依赖的原因是会报一个少包的异常
<dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>2.7.0</version> </dependency>
- 在provider里面用的 @Service 注解是用的Duddo的注解包,并且指定了version,在调用方法的地方也是需要指定 version 的
- 项目的方式是 zookeeper 的,也可以用其他的,或者采用直连的方式,直连的时候需要在调用service的地方指定 url=
- 在我的controler里面采用的是 @PathVariable 的方式从路径里面获取参数,如果没有 name 的参数,会找不到,我还以为可以映射进来 把 name 映射成 null
- 期待后续将老项目迁移过来