1. 创建maven聚合工程,结构如下:
2. 父工程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>
<packaging>pom</packaging>
<modules>
<module>dubbo-common</module>
<module>dubbo-provider</module>
<module>dubbo-consumer</module>
<module>dubbo-admin-server</module>
<module>dubbo-admin-ui</module>
</modules>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.zcy</groupId>
<artifactId>dubbo-project</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>dubbo-project</name>
<description>Spring Boot project for Dubbo</description>
<properties>
<java.version>1.8</java.version>
<dubbo.version>2.7.7</dubbo.version>
<zookeeper.version>3.6.1</zookeeper.version>
<curator.version>5.1.0</curator.version>
<zkclient.version>0.1</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.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--dubbo依赖-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>${dubbo.version}</version>
</dependency>
<!--zookeeper依赖-->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>${zookeeper.version}</version>
<exclusions>
<exclusion>
<artifactId>slf4j-log4j12</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>${zkclient.version}</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>${curator.version}</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>${curator.version}</version>
</dependency>
</dependencies>
</project>
3. 创建一个公用服务接口项目dubbo-common
定义一个用户服务接口
package com.zcy.dubbo.service;
import com.zcy.dubbo.entity.SysUser;
import java.util.List;
public interface SysUserService {
String get();
}
4. 创建一个服务提供者项目dubbo-provider
配置application.yml
spring:
application:
name: dubbo-provider
server:
port: 7001
配置dubbo参数
dubbo:
application:
id: dubbo-provider
name: dubbo-provider #应用名称
version: 1.0.0
protocol:
id: dubbo #协议名称
name: dubbo #协议名称
port: 12345 #协议端口
registry:
id: zk-registry #注册中心id
protocol: zookeeper #注册中心协议
address: zookeeper://192.168.131.138:2181 #注册中心地址
timeout: 60000 #超时时间
scan:
base-packages: com.zcy.service.impl
monitor:
protocol: registry # 注册监控中心
metadata-report:
address: zookeeper://192.168.131.138:2181 #注册dubbo控制台就能查看元数据
定义一个service实现类
package com.zcy.service.impl;
import com.zcy.dubbo.entity.SysUser;
import com.zcy.dubbo.service.SysUserService;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.stereotype.Service;
import java.util.List;
@DubboService
@Service
public class UserServiceImpl implements SysUserService {
@Override
public String get() {
return "hello dubbo";
}
}
在SpringBoot入口加上启用注解
package com.zcy;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@EnableDubbo//启用dubbo
@SpringBootApplication
public class ProviderApplicationRun {
public static void main(String[] args) {
SpringApplication.run(ProviderApplicationRun.class, args);
}
}
5. 创建一个服务消费者项目dubbo-consumer
配置application.yml
spring:
application:
name: dubbo-consumer
server:
port: 9001
配置dubbo参数
dubbo:
application:
name: dubbo-consumer
scan:
base-packages: com.zcy.controller
registry:
id: zk-registry #注册中心id
protocol: zookeeper #注册中心协议
address: zookeeper://192.168.131.138:2181 #注册中心地址
timeout: 60000 #超时时间
monitor:
protocol: registry # 注册监控中心
定义一个controller
package com.zcy.controller;
import com.zcy.dubbo.entity.SysUser;
import com.zcy.dubbo.service.SysUserService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/user")
@RestController
public class UserController {
@DubboReference
private SysUserService userService;
@GetMapping
public Stringget() {
return userService.get();
}
}
启用dubbo
package com.zcy;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@EnableDubbo //启用dubbo
@SpringBootApplication
public class ConsumerApplicationRun {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplicationRun.class, args);
}
}
6. 创建一个Dubbo控制台dubbo-admin-server
拉取项目git clone https://github.com/apache/dubbo-admin.git
修改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>
<artifactId>dubbo-project</artifactId>
<groupId>com.zcy</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>dubbo-admin-server</artifactId>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-openapi</artifactId>
<version>1.6.0</version>
<exclusions>
<exclusion>
<artifactId>guava</artifactId>
<groupId>com.google.guava</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>1.3.0</version>
<exclusions>
<exclusion>
<artifactId>guava</artifactId>
<groupId>com.google.guava</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>23.0</version>
</dependency>
<dependency>
<groupId>com.ecwid.consul</groupId>
<artifactId>consul-api</artifactId>
<version>1.4.5</version>
</dependency>
<dependency>
<groupId>com.pszymczyk.consul</groupId>
<artifactId>embedded-consul</artifactId>
<version>2.1.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.6.1</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.6.1</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-serialization-kryo</artifactId>
<version>2.7.7</version>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>2.23.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-test</artifactId>
<version>5.1.0</version>
<exclusions>
<exclusion>
<artifactId>guava</artifactId>
<groupId>com.google.guava</groupId>
</exclusion>
<exclusion>
<artifactId>netty</artifactId>
<groupId>io.netty</groupId>
</exclusion>
</exclusions>
<scope>test</scope>
</dependency>
</dependencies>
</project>
修改zookeeper连接org.apache.dubbo.admin.config.ConfigCenter
123行左右
@Bean
@DependsOn("governanceConfiguration")
Registry getRegistry() {
Registry registry = null;
if (registryUrl == null) {
if (StringUtils.isBlank(registryAddress)) {
throw new ConfigurationException("Either config center or registry address is needed, please refer to https://github.com/apache/incubator-dubbo-admin/wiki/Dubbo-Admin-configuration");
}
registryUrl = formUrl(registryAddress, registryGroup, username, password);
// 设置超时时间
registryUrl = registryUrl.addParameter("timeout", "60000");
}
RegistryFactory registryFactory = ExtensionLoader.getExtensionLoader(RegistryFactory.class).getAdaptiveExtension();
registry = registryFactory.getRegistry(registryUrl);
return registry;
}
7. 创建一个Dubbo控制台界面dubbo-admin-ui
拉取项目
git clone https://github.com/apache/dubbo-admin.git
8.zookeeper安装配置
9.源码链接
git clone https://github.com/zhuangchongyi/dubbo-project.git