项目地址:
https://github.com/FateSolo/Dubbo-Test
目录:
- 0. 序
- 1. Maven构建项目
- 2. Gradle构建项目
- 3. 搭建Spring + Dubbo框架
- 4. 支持RESTful Remoting
- 5. Dubbo服务集群
- 6. ZooKeeper集群
- 7. Nginx + Tomcat集群
- 8. Redis共享session
对于一个使用了Dubbo的分布式应用,其可以拆分成三个部分:
dubbo-api,服务公共api,包含服务接口、实体等server、client公用的类。
dubbo-server,服务提供者,实现api的服务接口,提供具体服务。
dubbo-client,服务消费者,使用api提供的接口,远程调用server端服务。
其中dubbo-api包是server和client共有的,server实现并暴露服务,client则通过注册中心发现并远程调用服务。
在本章将用Maven构建一个多module项目Dubbo-Test,其包含了以上所述的三个module。
1. 项目创建:
1) 创建名为Dubbo-Test的文件夹并进入即可:1
mkdir Dubbo-Test && cd Dubbo-Test
2. 创建parent module:
多module项目应该有一个统一的父module,以方便进行管理。
1) 创建pom.xml:1
2
3
4
5
6
7
8
9<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>com.fatesolo.dubbo</groupId>
<artifactId>dubbo-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
</project>
3. 创建其余module:
1) 创建dubbo-api:1
mvn archetype:generate -DgroupId=com.fatesolo.dubbo -DartifactId=dubbo-api -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
2) 创建dubbo-server:1
mvn archetype:generate -DgroupId=com.fatesolo.dubbo -DartifactId=dubbo-server -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
3) 创建dubbo-client:1
mvn archetype:generate -DgroupId=com.fatesolo.dubbo -DartifactId=dubbo-client -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
4. 测试多module项目
1) 修改各pom文件,令dubbo-server依赖dubbo-api,dubbo-client依赖dubbo-server。
dubbo-parent:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38<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>com.fatesolo.dubbo</groupId>
<artifactId>dubbo-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>dubbo-api</module>
<module>dubbo-server</module>
<module>dubbo-client</module>
</modules>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.fatesolo.dubbo</groupId>
<artifactId>dubbo-api</artifactId>
<version>${version}</version>
</dependency>
<dependency>
<groupId>com.fatesolo.dubbo</groupId>
<artifactId>dubbo-server</artifactId>
<version>${version}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
dubbo-api:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20<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>
<artifactId>dubbo-parent</artifactId>
<groupId>com.fatesolo.dubbo</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>dubbo-api</artifactId>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
</project>
dubbo-server:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25<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>
<artifactId>dubbo-parent</artifactId>
<groupId>com.fatesolo.dubbo</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>dubbo-server</artifactId>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<dependency>
<groupId>com.fatesolo.dubbo</groupId>
<artifactId>dubbo-api</artifactId>
</dependency>
</dependencies>
</project>
dubbo-client:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25<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>
<artifactId>dubbo-parent</artifactId>
<groupId>com.fatesolo.dubbo</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>dubbo-client</artifactId>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<dependency>
<groupId>com.fatesolo.dubbo</groupId>
<artifactId>dubbo-server</artifactId>
</dependency>
</dependencies>
</project>
2) 在dubbo-api中创建子包com.fatesolo.dubbo.api,创建实例类TestApi:1
2
3
4
5
6
7
8
9package com.fatesolo.dubbo.api;
public class TestApi {
public String testAPi() {
return "api";
}
}
3) 在dubbo-server中创建子包com.fatesolo.dubbo.server,创建实例类TestServer:1
2
3
4
5
6
7
8
9
10
11
12package com.fatesolo.dubbo.server;
import com.fatesolo.dubbo.api.TestApi;
public class TestServer {
public String testServer() {
TestApi api = new TestApi();
return "server " + api.testAPi();
}
}
4) 在dubbo-client中修改index.jsp:1
2
3
4
5
6
7
8
9<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="com.fatesolo.dubbo.server.TestServer" %>
<!DOCTYPE html>
<html>
<body>
<% TestServer server = new TestServer(); %>
<h2><%=server.testServer()%></h2>
</body>
</html>
5) 进入到Dubbo-Test文件夹,键入命令:1
mvn package
查看各个module,可以看到都已经生成了各自的包,其中dubbo-client-1.0-SNAPSHOT.war包的lib中已经包含了dubbo-api和dubbo-server的jar包。
6) 将dubbo-client-1.0-SNAPSHOT.war部署到Tomcat,运行并访问http://localhost:8080/dubbo-client-1.0-SNAPSHOT ,得到如下结果:1
server api
作者 [@FateSolo]
2017 年 05月 24日