Dubbo SpringBoot

1、根 pom

  1. <properties>
  2. <dubbo.version>3.0.5</dubbo.version>
  3. </properties>
  4. <dependencies>
  5. <dependency>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-web</artifactId>
  8. </dependency>
  9. <dependency>
  10. <groupId>org.springframework.boot</groupId>
  11. <artifactId>spring-boot-starter-test</artifactId>
  12. <scope>test</scope>
  13. </dependency>
  14. <dependency>
  15. <groupId>org.apache.dubbo</groupId>
  16. <artifactId>dubbo-spring-boot-starter</artifactId>
  17. <version>${dubbo.version}</version>
  18. </dependency>
  19. <dependency>
  20. <groupId>org.apache.dubbo</groupId>
  21. <artifactId>dubbo-dependencies-zookeeper</artifactId>
  22. <version>${dubbo.version}</version>
  23. <type>pom</type>
  24. </dependency>
  25. </dependencies>

2、Api Module

maven 项目

2.1 RpcResult

  1. @Data
  2. public class RpcResult <T> implements Serializable {
  3. /**
  4. * 是否响应成功
  5. */
  6. private Boolean success;
  7. /**
  8. * 响应状态码
  9. */
  10. private Integer code;
  11. /**
  12. * 响应数据
  13. */
  14. private T data;
  15. /**
  16. * 错误信息
  17. */
  18. private String message;
  19. private RpcResult() {
  20. this.code = 200;
  21. this.success = true;
  22. }
  23. private RpcResult(T obj) {
  24. this.code = 200;
  25. this.data = obj;
  26. this.success = true;
  27. }
  28. private RpcResult(ResultCodeEnum resultCode) {
  29. this.success = false;
  30. this.code = resultCode.getCode();
  31. this.message = resultCode.getMessage();
  32. }
  33. public static<T> RpcResult success(){
  34. return new RpcResult();
  35. }
  36. public static<T> RpcResult<T> success(T data){
  37. return new RpcResult<T>(data);
  38. }
  39. public static<T> RpcResult<T> failure(ResultCodeEnum resultCode){
  40. return new RpcResult<T>(resultCode);
  41. }
  42. @Override
  43. public String toString() {
  44. return "RpcResult{" +
  45. "success=" + success +
  46. ", code=" + code +
  47. ", data=" + data +
  48. ", message='" + message + '\'' +
  49. '}';
  50. }
  51. }

2.2 ResultCodeEnum

  1. public enum ResultCodeEnum {
  2. /** */
  3. SUCCESS(200, "success"),
  4. ORDER_NOT_FOUND(2000, "order not found");
  5. /**
  6. * 响应状态码
  7. */
  8. private Integer code;
  9. /**
  10. * 响应信息
  11. */
  12. private String message;
  13. ResultCodeEnum(Integer code, String msg) {
  14. this.code = code;
  15. this.message = msg;
  16. }
  17. public Integer getCode() {
  18. return code;
  19. }
  20. public String getMessage() {
  21. return message;
  22. }
  23. public void setMessage(String message) {
  24. this.message = message;
  25. }
  26. }

2.3 OrderDubboService 接口

  1. public interface OrderDubboService {
  2. RpcResult<Object> getOrder();
  3. }

3、 Provider Module

OrderDubboServiceImpl 实现接口

  1. @DubboService
  2. public class OrderDubboServiceImpl implements OrderDubboService {
  3. @Override
  4. public RpcResult<Object> getOrder() {
  5. return RpcResult.success("provider --> " + LocalDateTime.now());
  6. }
  7. }

application.yml

  1. server:
  2. # 服务端口
  3. port: 7777
  4. spring:
  5. application:
  6. name: order-provider
  7. # dubbo 相关配置(dubbo 的配置不再以 Spring 开头)
  8. dubbo:
  9. application:
  10. # 应用名称
  11. name: order-provider
  12. scan:
  13. # 接口实现者(服务实现)包
  14. base-packages: com.cug.provider.impl
  15. # 注册中心信息
  16. registry:
  17. address: zookeeper://127.0.0.1:2181
  18. protocol:
  19. # 协议名称
  20. name: dubbo
  21. # 协议端口, dubbo-admin 占用 20880 端口
  22. port: 20881

4、 Consumer Module

controller

  1. @RestController
  2. @RequestMapping("/order")
  3. public class TestController {
  4. @DubboReference
  5. private OrderDubboService orderDubboService;
  6. @GetMapping("getOrder")
  7. public RpcResult<Object> getOrder() {
  8. return orderDubboService.getOrder();
  9. }
  10. }

application.yml

  1. server:
  2. port: 7000
  3. spring:
  4. application:
  5. name: order-consumer
  6. # dubbo 相关配置
  7. dubbo:
  8. application:
  9. name: order-consumer
  10. registry:
  11. address: zookeeper://127.0.0.1:2181

5、ZooKeeper

启动 zkServer.cmd

6、启动 dubbo-admin

编译源码

  1. ## 1、 下载代码:
  2. git clone https://github.com/apache/dubbo-admin.git
  3. ## 2、在 dubbo-admin-server/src/main/resources/application.properties 中指定注册中心地址
  4. ## 3、构建
  5. mvn clean package -Dmaven.test.skip=true
  6. ## 4、启动
  7. ## 启动 dubbo-admin-server, 在 application.properties 中添加 server.port=8088
  8. mvn --projects dubbo-admin-server spring-boot:run
  9. ## 启动 dubbo-admin-ui, 修改 vue.config.js 中 proxy.target --> http://localhost:8088
  10. npm run dev ## 如果有 error , 则先 npm run build
  11. ## 5、访问
  12. http://localhost:8082
  13. ## 每次修改配置文件后,都需要重新构建,即:mvn clean package -Dmaven.test.skip=true

7、测试

1、启动 Provider Module 2、启动 Consumer Module 3、http://localhost:7000/order/getOrder