Dubbo学习笔记 一:使用Maven构建多module项目


项目地址:
https://github.com/FateSolo/Dubbo-Test

目录:

对于一个使用了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
9
package 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
12
package 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日