Dubbo SpringBoot
1、根 pom
<properties>
<dubbo.version>3.0.5</dubbo.version>
</properties>
<dependencies>
<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>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>${dubbo.version}</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<version>${dubbo.version}</version>
<type>pom</type>
</dependency>
</dependencies>
2、Api Module
maven 项目
2.1 RpcResult
@Data
public class RpcResult <T> implements Serializable {
/**
* 是否响应成功
*/
private Boolean success;
/**
* 响应状态码
*/
private Integer code;
/**
* 响应数据
*/
private T data;
/**
* 错误信息
*/
private String message;
private RpcResult() {
this.code = 200;
this.success = true;
}
private RpcResult(T obj) {
this.code = 200;
this.data = obj;
this.success = true;
}
private RpcResult(ResultCodeEnum resultCode) {
this.success = false;
this.code = resultCode.getCode();
this.message = resultCode.getMessage();
}
public static<T> RpcResult success(){
return new RpcResult();
}
public static<T> RpcResult<T> success(T data){
return new RpcResult<T>(data);
}
public static<T> RpcResult<T> failure(ResultCodeEnum resultCode){
return new RpcResult<T>(resultCode);
}
@Override
public String toString() {
return "RpcResult{" +
"success=" + success +
", code=" + code +
", data=" + data +
", message='" + message + '\'' +
'}';
}
}
2.2 ResultCodeEnum
public enum ResultCodeEnum {
/** */
SUCCESS(200, "success"),
ORDER_NOT_FOUND(2000, "order not found");
/**
* 响应状态码
*/
private Integer code;
/**
* 响应信息
*/
private String message;
ResultCodeEnum(Integer code, String msg) {
this.code = code;
this.message = msg;
}
public Integer getCode() {
return code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
2.3 OrderDubboService 接口
public interface OrderDubboService {
RpcResult<Object> getOrder();
}
3、 Provider Module
OrderDubboServiceImpl 实现接口
@DubboService
public class OrderDubboServiceImpl implements OrderDubboService {
@Override
public RpcResult<Object> getOrder() {
return RpcResult.success("provider --> " + LocalDateTime.now());
}
}
application.yml
server:
# 服务端口
port: 7777
spring:
application:
name: order-provider
# dubbo 相关配置(dubbo 的配置不再以 Spring 开头)
dubbo:
application:
# 应用名称
name: order-provider
scan:
# 接口实现者(服务实现)包
base-packages: com.cug.provider.impl
# 注册中心信息
registry:
address: zookeeper://127.0.0.1:2181
protocol:
# 协议名称
name: dubbo
# 协议端口, dubbo-admin 占用 20880 端口
port: 20881
4、 Consumer Module
controller
@RestController
@RequestMapping("/order")
public class TestController {
@DubboReference
private OrderDubboService orderDubboService;
@GetMapping("getOrder")
public RpcResult<Object> getOrder() {
return orderDubboService.getOrder();
}
}
application.yml
server:
port: 7000
spring:
application:
name: order-consumer
# dubbo 相关配置
dubbo:
application:
name: order-consumer
registry:
address: zookeeper://127.0.0.1:2181
5、ZooKeeper
启动 zkServer.cmd
6、启动 dubbo-admin
编译源码
## 1、 下载代码:
git clone https://github.com/apache/dubbo-admin.git
## 2、在 dubbo-admin-server/src/main/resources/application.properties 中指定注册中心地址
## 3、构建
mvn clean package -Dmaven.test.skip=true
## 4、启动
## 启动 dubbo-admin-server, 在 application.properties 中添加 server.port=8088
mvn --projects dubbo-admin-server spring-boot:run
## 启动 dubbo-admin-ui, 修改 vue.config.js 中 proxy.target --> http://localhost:8088
npm run dev ## 如果有 error , 则先 npm run build
## 5、访问
http://localhost:8082
## 每次修改配置文件后,都需要重新构建,即:mvn clean package -Dmaven.test.skip=true
7、测试
1、启动 Provider Module 2、启动 Consumer Module 3、http://localhost:7000/order/getOrder