1. Dubbo简介

  Apache Dubbo 是一款微服务开发框架,它提供了 RPC通信 与 微服务治理 两大关键能力。这意味着,使用 Dubbo 开发的微服务,将具备相互之间的远程发现与通信能力, 同时利用 Dubbo 提供的丰富服务治理能力,可以实现诸如服务发现、负载均衡、流量调度等服务治理诉求。同时 Dubbo 是高度可扩展的,用户几乎可以在任意功能点去定制自己的实现,以改变框架的默认行为来满足自己的业务需求。

  官网:​​https://dubbo.apache.org/​

2. 相关博客

  windows安装zookeeper3.7.x

3. 初始化数据库

# 创建数据库:dubbo-demo
# 初始化表结构,即基础数据
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
`user_code` VARCHAR ( 64 ) NOT NULL COMMENT '用户编码',
`user_name` VARCHAR ( 50 ) NULL COMMENT '用户名称',
`status` CHAR ( 1 ) NOT NULL DEFAULT '0' COMMENT '用户状态(0-可用,1-删除,2-禁用)',
PRIMARY KEY ( `user_code` )
) COMMENT '用户表';

INSERT INTO `t_user` VALUES ('1', '张三', '0');
INSERT INTO `t_user` VALUES ('2', '李四', '1');
INSERT INTO `t_user` VALUES ('3', '王五', '2');


4. 示例代码

4.1 创建接口工程

  接口工程主要存放实体类和定义接口。

  • 创建工程
    SpringBoot + Dubbo + Zookeeper +Mybatis-Plus + Mysql 搭建简单示例工程_spring
  • 修改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">
<modelVersion>4.0.0</modelVersion>

<groupId>com.c3stones</groupId>
<artifactId>spring-boot-dubbo-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spring-boot-dubbo-api</name>
<description>Spring Boot Dubbo Api</description>

<properties>
<java.version>1.8</java.version>
<mybatis-plus.version>3.3.1</mybatis-plus.version>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
</properties>

<dependencies>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
</dependencies>

</project>


  • 创建实体类
import java.io.Serializable;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;

/**
* 用户Entity
*
* @author CL
*/
@TableName(value = "t_user")
public class User extends Model<User> implements Serializable {

private static final long serialVersionUID = 1L;

/**
* 用户编码
*/
@TableId(type = IdType.INPUT)
private String userCode;

/**
* 用户名称
*/
private String userName;

/**
* 用户状态(0-可用,1-删除,2-禁用)
*/
private String status;

public User() {
}

public User(String userCode, String userName) {
this.userCode = userCode;
this.userName = userName;
}

public String getUserCode() {
return userCode;
}

public void setUserCode(String userCode) {
this.userCode = userCode;
}

public String getUserName() {
return userName;
}

public void setUserName(String userName) {
this.userName = userName;
}

public String getStatus() {
return status;
}

public void setStatus(String status) {
this.status = status;
}

}


  • 创建Service
import com.baomidou.mybatisplus.extension.service.IService;
import com.c3stones.entity.User;

/**
* 用户Service
*
* @author CL
*/
public interface UserService extends IService<User> {

}


  • 创建状态枚举(公共)
/**
* 状态枚举
*
* @author CL
*
*/
public enum Status {

/**
* 正常状态
*/
NORMAL("0", "正常"),
/**
* 删除状态
*/
DELETE("1", "删除"),
/**
* 禁用状态
*/
DISABLE("2", "禁用");

/**
* 状态值
*/
private String value;

/**
* 状态标签
*/
private String label;

private Status(String value, String label) {
this.value = value;
this.label = label;
}

public String getValue() {
return value;
}

public void setValue(String value) {
this.value = value;
}

public String getLabel() {
return label;
}

public void setLabel(String label) {
this.label = label;
}

/**
* 翻译状态
*
* @param value 状态值
* @return
*/
public static String transf(String value) {
for (Status s : Status.values()) {
if (value.equals(s.getValue())) {
return s.label;
}
}
return null;
}

}


4.2 创建生产者服务

  生产者服务主要存放Mapper和Mapper.xml,并实现Service。

  • 创建工程
    SpringBoot + Dubbo + Zookeeper +Mybatis-Plus + Mysql 搭建简单示例工程_zookeeper_02
  • 修改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">
<modelVersion>4.0.0</modelVersion>

<groupId>com.c3stones</groupId>
<artifactId>spring-boot-dubbo-provider</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spring-boot-dubbo-provider</name>
<description>Spring Boot Dubbo Provider</description>

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
<relativePath />
</parent>

<properties>
<api.version>0.0.1-SNAPSHOT</api.version>
<dubbo.version>2.0.0</dubbo.version>
<zk.version>0.11</zk.version>
</properties>

<dependencies>
<!-- API接口 -->
<dependency>
<groupId>com.c3stones</groupId>
<artifactId>spring-boot-dubbo-api</artifactId>
<version>${api.version}</version>
</dependency>
<!-- Dubbo -->
<dependency>
<groupId>com.alibaba.spring.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>${dubbo.version}</version>
</dependency>
<!-- Zookeeper -->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>${zk.version}</version>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
<exclusion>
<artifactId>slf4j-log4j12</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

</project>


  • 创建配置文件
      在resources目录下,创建application.yml。
server:
port: 7001

dubbo:
application:
name: dubbo-provider
registry:
protocol: zookeeper
address: 127.0.0.1:2181
monitor:
protocol: register

spring:
datasource:
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/dubbo-demo?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
username: root
password: 123456

# Mybatis-plus配置
mybatis-plus:
mapper-locations: classpath:mapper/*.xml
global-config:
db-config:
id-type: AUTO
# configuration:
# log-impl: org.apache.ibatis.logging.stdout.StdOutImpl


  • 创建Mapper
import org.apache.ibatis.annotations.Mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.c3stones.entity.User;

/**
* 用户Mapper
*
* @author CL
*
*/
@Mapper
public interface UserMapper extends BaseMapper<User> {

}


  • 创建Service实现
import org.springframework.stereotype.Component;

import com.alibaba.dubbo.config.annotation.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.c3stones.entity.User;
import com.c3stones.mapper.UserMapper;
import com.c3stones.service.UserService;

/**
* 用户Service实现
*
* @author CL
*/
@Service
@Component
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {

}


  • 创建启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;

/**
* 生产者启动类
*
* @author CL
*/
@EnableDubbo
@SpringBootApplication
public class ProviderApplication {

public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}

}


4.3 创建消费者服务

  消费者服务主要调用生产者服务,并暴露接口。

  • 创建工程
    SpringBoot + Dubbo + Zookeeper +Mybatis-Plus + Mysql 搭建简单示例工程_maven_03
  • 修改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">
<modelVersion>4.0.0</modelVersion>

<groupId>com.c3stones</groupId>
<artifactId>spring-boot-dubbo-consumer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spring-boot-dubbo-consumer</name>
<description>Spring Boot Dubbo Consumer</description>

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
<relativePath />
</parent>

<properties>
<api.version>0.0.1-SNAPSHOT</api.version>
<dubbo.version>2.0.0</dubbo.version>
<zk.version>0.11</zk.version>
</properties>

<dependencies>
<!-- API接口 -->
<dependency>
<groupId>com.c3stones</groupId>
<artifactId>spring-boot-dubbo-api</artifactId>
<version>${api.version}</version>
</dependency>
<!-- Dubbo -->
<dependency>
<groupId>com.alibaba.spring.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>${dubbo.version}</version>
</dependency>
<!-- Zookeeper -->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>${zk.version}</version>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
<exclusion>
<artifactId>slf4j-log4j12</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

</project>


  • 创建配置文件
      在resources目录下,创建application.yml。
server:
port: 7002

dubbo:
application:
name: dubbo-consumer
registry:
protocol: zookeeper
address: 127.0.0.1:2181
monitor:
protocol: register


  • 创建Controller
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.alibaba.dubbo.config.annotation.Reference;
import com.c3stones.entity.User;
import com.c3stones.enums.Status;
import com.c3stones.service.UserService;

/**
* 用户Controller
*
* @author CL
*/
@RestController
@RequestMapping(value = "user")
public class UserController {

@Reference
private UserService userService;

/**
* 查询用户信息
*
* @param userCode 用户编码
* @return 用户信息
*/
@RequestMapping(value = "get")
public User get(String userCode) {
User user = userService.getById(userCode);
if (user != null) {
user.setStatus(Status.transf(user.getStatus()));
}
return user;
}
}


  • 创建启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;

import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;

/**
* 消费者启动类
*
* @author CL
*/
@EnableDubbo
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class ConsumerApplication {

public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}

}


  • 启动zookeeper
  • 启动生产者
  • 启动消费者

5. 测试

# 请求1:查询用户编码为1的用户信息
curl http://127.0.0.1:7002/user/get?userCode=1

# 响应1:
{"userCode":"1","userName":"张三","status":"正常"}

# 请求2:查询用户编码为1的用户信息
curl http://127.0.0.1:7002/user/get?userCode=2

# 响应2:
{"userCode":"2","userName":"李四","status":"删除"}

# 请求3:查询用户编码为1的用户信息
curl http://127.0.0.1:7002/user/get?userCode=3

# 响应3:
{"userCode":"3","userName":"王五","status":"禁用"}


6. 项目地址

  ​​spring-boot-dubbo-demo​

1. Dubbo简介

  Apache Dubbo 是一款微服务开发框架,它提供了 RPC通信 与 微服务治理 两大关键能力。这意味着,使用 Dubbo 开发的微服务,将具备相互之间的远程发现与通信能力, 同时利用 Dubbo 提供的丰富服务治理能力,可以实现诸如服务发现、负载均衡、流量调度等服务治理诉求。同时 Dubbo 是高度可扩展的,用户几乎可以在任意功能点去定制自己的实现,以改变框架的默认行为来满足自己的业务需求。

  官网:​​https://dubbo.apache.org/​

2. 相关博客

  windows安装zookeeper3.7.x

3. 初始化数据库

# 创建数据库:dubbo-demo
# 初始化表结构,即基础数据
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
`user_code` VARCHAR ( 64 ) NOT NULL COMMENT '用户编码',
`user_name` VARCHAR ( 50 ) NULL COMMENT '用户名称',
`status` CHAR ( 1 ) NOT NULL DEFAULT '0' COMMENT '用户状态(0-可用,1-删除,2-禁用)',
PRIMARY KEY ( `user_code` )
) COMMENT '用户表';

INSERT INTO `t_user` VALUES ('1', '张三', '0');
INSERT INTO `t_user` VALUES ('2', '李四', '1');
INSERT INTO `t_user` VALUES ('3', '王五', '2');


4. 示例代码

4.1 创建接口工程

  接口工程主要存放实体类和定义接口。

  • 创建工程
    SpringBoot + Dubbo + Zookeeper +Mybatis-Plus + Mysql 搭建简单示例工程_spring
  • 修改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">
<modelVersion>4.0.0</modelVersion>

<groupId>com.c3stones</groupId>
<artifactId>spring-boot-dubbo-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spring-boot-dubbo-api</name>
<description>Spring Boot Dubbo Api</description>

<properties>
<java.version>1.8</java.version>
<mybatis-plus.version>3.3.1</mybatis-plus.version>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
</properties>

<dependencies>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
</dependencies>

</project>


  • 创建实体类
import java.io.Serializable;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;

/**
* 用户Entity
*
* @author CL
*/
@TableName(value = "t_user")
public class User extends Model<User> implements Serializable {

private static final long serialVersionUID = 1L;

/**
* 用户编码
*/
@TableId(type = IdType.INPUT)
private String userCode;

/**
* 用户名称
*/
private String userName;

/**
* 用户状态(0-可用,1-删除,2-禁用)
*/
private String status;

public User() {
}

public User(String userCode, String userName) {
this.userCode = userCode;
this.userName = userName;
}

public String getUserCode() {
return userCode;
}

public void setUserCode(String userCode) {
this.userCode = userCode;
}

public String getUserName() {
return userName;
}

public void setUserName(String userName) {
this.userName = userName;
}

public String getStatus() {
return status;
}

public void setStatus(String status) {
this.status = status;
}

}


  • 创建Service
import com.baomidou.mybatisplus.extension.service.IService;
import com.c3stones.entity.User;

/**
* 用户Service
*
* @author CL
*/
public interface UserService extends IService<User> {

}


  • 创建状态枚举(公共)
/**
* 状态枚举
*
* @author CL
*
*/
public enum Status {

/**
* 正常状态
*/
NORMAL("0", "正常"),
/**
* 删除状态
*/
DELETE("1", "删除"),
/**
* 禁用状态
*/
DISABLE("2", "禁用");

/**
* 状态值
*/
private String value;

/**
* 状态标签
*/
private String label;

private Status(String value, String label) {
this.value = value;
this.label = label;
}

public String getValue() {
return value;
}

public void setValue(String value) {
this.value = value;
}

public String getLabel() {
return label;
}

public void setLabel(String label) {
this.label = label;
}

/**
* 翻译状态
*
* @param value 状态值
* @return
*/
public static String transf(String value) {
for (Status s : Status.values()) {
if (value.equals(s.getValue())) {
return s.label;
}
}
return null;
}

}


4.2 创建生产者服务

  生产者服务主要存放Mapper和Mapper.xml,并实现Service。

  • 创建工程
    SpringBoot + Dubbo + Zookeeper +Mybatis-Plus + Mysql 搭建简单示例工程_zookeeper_02
  • 修改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">
<modelVersion>4.0.0</modelVersion>

<groupId>com.c3stones</groupId>
<artifactId>spring-boot-dubbo-provider</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spring-boot-dubbo-provider</name>
<description>Spring Boot Dubbo Provider</description>

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
<relativePath />
</parent>

<properties>
<api.version>0.0.1-SNAPSHOT</api.version>
<dubbo.version>2.0.0</dubbo.version>
<zk.version>0.11</zk.version>
</properties>

<dependencies>
<!-- API接口 -->
<dependency>
<groupId>com.c3stones</groupId>
<artifactId>spring-boot-dubbo-api</artifactId>
<version>${api.version}</version>
</dependency>
<!-- Dubbo -->
<dependency>
<groupId>com.alibaba.spring.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>${dubbo.version}</version>
</dependency>
<!-- Zookeeper -->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>${zk.version}</version>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
<exclusion>
<artifactId>slf4j-log4j12</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

</project>


  • 创建配置文件
      在resources目录下,创建application.yml。
server:
port: 7001

dubbo:
application:
name: dubbo-provider
registry:
protocol: zookeeper
address: 127.0.0.1:2181
monitor:
protocol: register

spring:
datasource:
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/dubbo-demo?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
username: root
password: 123456

# Mybatis-plus配置
mybatis-plus:
mapper-locations: classpath:mapper/*.xml
global-config:
db-config:
id-type: AUTO
# configuration:
# log-impl: org.apache.ibatis.logging.stdout.StdOutImpl


  • 创建Mapper
import org.apache.ibatis.annotations.Mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.c3stones.entity.User;

/**
* 用户Mapper
*
* @author CL
*
*/
@Mapper
public interface UserMapper extends BaseMapper<User> {

}


  • 创建Service实现
import org.springframework.stereotype.Component;

import com.alibaba.dubbo.config.annotation.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.c3stones.entity.User;
import com.c3stones.mapper.UserMapper;
import com.c3stones.service.UserService;

/**
* 用户Service实现
*
* @author CL
*/
@Service
@Component
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {

}


  • 创建启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;

/**
* 生产者启动类
*
* @author CL
*/
@EnableDubbo
@SpringBootApplication
public class ProviderApplication {

public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}

}


4.3 创建消费者服务

  消费者服务主要调用生产者服务,并暴露接口。

  • 创建工程
    SpringBoot + Dubbo + Zookeeper +Mybatis-Plus + Mysql 搭建简单示例工程_maven_03
  • 修改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">
<modelVersion>4.0.0</modelVersion>

<groupId>com.c3stones</groupId>
<artifactId>spring-boot-dubbo-consumer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spring-boot-dubbo-consumer</name>
<description>Spring Boot Dubbo Consumer</description>

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
<relativePath />
</parent>

<properties>
<api.version>0.0.1-SNAPSHOT</api.version>
<dubbo.version>2.0.0</dubbo.version>
<zk.version>0.11</zk.version>
</properties>

<dependencies>
<!-- API接口 -->
<dependency>
<groupId>com.c3stones</groupId>
<artifactId>spring-boot-dubbo-api</artifactId>
<version>${api.version}</version>
</dependency>
<!-- Dubbo -->
<dependency>
<groupId>com.alibaba.spring.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>${dubbo.version}</version>
</dependency>
<!-- Zookeeper -->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>${zk.version}</version>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
<exclusion>
<artifactId>slf4j-log4j12</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

</project>


  • 创建配置文件
      在resources目录下,创建application.yml。
server:
port: 7002

dubbo:
application:
name: dubbo-consumer
registry:
protocol: zookeeper
address: 127.0.0.1:2181
monitor:
protocol: register


  • 创建Controller
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.alibaba.dubbo.config.annotation.Reference;
import com.c3stones.entity.User;
import com.c3stones.enums.Status;
import com.c3stones.service.UserService;

/**
* 用户Controller
*
* @author CL
*/
@RestController
@RequestMapping(value = "user")
public class UserController {

@Reference
private UserService userService;

/**
* 查询用户信息
*
* @param userCode 用户编码
* @return 用户信息
*/
@RequestMapping(value = "get")
public User get(String userCode) {
User user = userService.getById(userCode);
if (user != null) {
user.setStatus(Status.transf(user.getStatus()));
}
return user;
}
}


  • 创建启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;

import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;

/**
* 消费者启动类
*
* @author CL
*/
@EnableDubbo
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class ConsumerApplication {

public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}

}


  • 启动zookeeper
  • 启动生产者
  • 启动消费者

5. 测试

# 请求1:查询用户编码为1的用户信息
curl http://127.0.0.1:7002/user/get?userCode=1

# 响应1:
{"userCode":"1","userName":"张三","status":"正常"}

# 请求2:查询用户编码为1的用户信息
curl http://127.0.0.1:7002/user/get?userCode=2

# 响应2:
{"userCode":"2","userName":"李四","status":"删除"}

# 请求3:查询用户编码为1的用户信息
curl http://127.0.0.1:7002/user/get?userCode=3

# 响应3:
{"userCode":"3","userName":"王五","status":"禁用"}


6. 项目地址

  ​​spring-boot-dubbo-demo​

7. 扩展

  Dubbo管理控制台搭建请浏览:Dubbo-Admin:Dubbo控制台搭建