目录
我搭建所使用的Spring Boot版本是2.1.8.RELEASE,dubbo-spring-boot-starter的版本是2.7.3,ZooKeeper的版本是3.4.14。
1 API模块
API模块由服务提供方为服务消费方暴露接口,一般将接口和pojo放入其中,提供者和消费者引入该模块即可。创建一个Spring Boot模块,命名为dubbo-user-interface。
1.1 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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.8.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.hys</groupId>
<artifactId>dubbo-user-interface</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>dubbo-user-interface</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.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-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
1.2 UserService
package com.hys.dubbo.user.service;
public interface UserService {
String sayHello(String name);
}
2 服务提供者模块
创建一个Spring Boot模块,命名为dubbo-user-provider。
2.1 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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.8.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.hys</groupId>
<artifactId>dubbo-user-provider</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>dubbo-user-provider</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>com.hys</groupId>
<artifactId>dubbo-user-interface</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</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>2.7.3</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.14</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>2.13.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2.2 application.properties
dubbo.application.name=dubbo-user-provider
dubbo.registry.protocol=zookeeper
dubbo.registry.address=192.168.253.129:2181,192.168.253.129:2182,192.168.253.129:2183
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
dubbo.monitor.protocol=registry
2.3 启动类
package com.hys.dubbo;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@EnableDubbo
@SpringBootApplication
public class DubboUserProviderApplication {
public static void main(String[] args) {
SpringApplication.run(DubboUserProviderApplication.class, args);
}
}
2.4 UserServiceImpl
package com.hys.dubbo.user.service.impl;
import com.hys.dubbo.user.service.UserService;
import org.apache.dubbo.config.annotation.Service;
@Service(version = "1.0.0", timeout = 10000, interfaceClass = UserService.class)
public class UserServiceImpl implements UserService {
@Override
public String sayHello(String name) {
return "Hello " + name + " !";
}
}
这里需要注意的是@Service注解使用的是Dubbo而不是Spring的注解。
3 服务消费者模块
创建一个Spring Boot模块,命名为dubbo-user-consumer。
3.1 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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.8.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.hys</groupId>
<artifactId>dubbo-user-consumer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>dubbo-user-consumer</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>com.hys</groupId>
<artifactId>dubbo-user-interface</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.14</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>2.13.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
3.2 application.properties
server.port=8081
dubbo.application.name=dubbo-user-consumer
dubbo.registry.address=zookeeper://192.168.253.129:2181,192.168.253.129:2182,192.168.253.129:2183
dubbo.monitor.protocol=registry
3.3 启动类
package com.hys.dubbo;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@EnableDubbo
@SpringBootApplication
public class DubboUserConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(DubboUserConsumerApplication.class, args);
}
}
3.4 UserController
package com.hys.dubbo.user.controller;
import com.hys.dubbo.user.service.UserService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/dubbo")
public class UserController {
@Reference(version = "1.0.0")
private UserService userService;
@RequestMapping("/sayHello/{name}")
public String sayHello(@PathVariable("name") String name) {
String result = userService.sayHello(name);
return result;
}
}
4 运行及结果
分别启动上述三个Spring Boot模块,页面访问http://localhost:8081/dubbo/sayHello/Robert Hou,结果如下所示:
由上可以看到,访问成功,并且在ZooKeeper中可以看到已经含有Dubbo的相关注册信息了:
5 Dubbo Admin
新版本Dubbo Admin的运行需要依赖于Node.js,在官网上下载即可:
下载完成后打开cmd,输入npm查看该命令是否可用:
然后输入以下的命令来配置国内的镜像站(不配置的话,在后续打包的过程中会等待非常久的时间):
npm config set registry=https://registry.npm.taobao.org
配置好了后会在C盘用户下生成一个.npmrc的文件:
打开后里面的内容即是我们刚才配置的镜像地址:
之后,我们克隆dubbo-admin的项目代码到当前的工作空间:
git clone https://github.com/apache/dubbo-admin.git
克隆完毕后,我的idea工作空间如下所示:
修改其中dubbo-admin-server子模块中的application.properties文件中的内容,将其中ZooKeeper的注册信息改成相应的内容(如果是本地开启的ZooKeeper,则不需要更改。我是虚拟机搭建的ZooKeeper伪集群,需要更改):
# centers in dubbo2.7
admin.registry.address=zookeeper://192.168.101.128:2181,192.168.101.128:2182,192.168.101.128:2183
admin.config-center=zookeeper://192.168.101.128:2181,192.168.101.128:2182,192.168.101.128:2183
admin.metadata-report.address=zookeeper://192.168.101.128:2181,192.168.101.128:2182,192.168.101.128:2183
最后就是利用idea自身的maven插件进行打包,如果打包成功后,会在dubbo-admin\dubbo-admin-distribution\target路径下生成一个dubbo-admin-0.1.jar文件,如下所示:
java -jar运行它,页面访问http://localhost:8080,即可看到管理页面: