当前位置:   article > 正文

Dubbo学习笔记(二)——dubbo-admin的搭建&使用_dubbo admin使用教程

dubbo admin使用教程

目录

一、前置条件

二、dubbo-admin搭建

三、dubbo项目开发实战 ★★★

四、dubbo-admin的使用


dubbo-admin是什么?

https://cn.dubbo.apache.org/zh-cn/overview/what/overview/  (官方文档内容,请阅读完)

一、前置条件

maven、jdk、zookeeper、Node.js已经安装好。

1. maven需要配置环境变量,否则在 dubbo-admin\dubbo-admin-server 目录下执行 mvn 命令是会提示“'mvn' 不是内部或外部命令”。       

2. Node.js官网下载Node.js (nodejs.org)

    下载好之后傻瓜式安装即可。安装好之后,任意位置打开cmd窗口执行如下两个命令进行验证是否安装成功即可(内置了npm)。

        

3. zookeeper启动正常运行

二、dubbo-admin搭建

官方指导步骤:

1. dubbo-admin的下载:在github上搜索便可找到,然后下载zip包解压即可,或者使用git clone命令下载。下载地址如下:

GitHub - apache/dubbo-admin: The ops and reference implementation for Apache Dubbo

然后打开dubbo-admin-server/src/main/resources/application.properties这个文件修改注册中心地址与启动着的zookeeper保持一致(默认如下,不需要改):

  1. spring.profiles.active=dev
  2. server.port=38080
  3. dubbo.protocol.port=30880
  4. dubbo.application.qos-port=32222
  5. # centers in dubbo, if you want to add parameters, please add them to the url
  6. admin.registry.address=zookeeper://127.0.0.1:2181
  7. admin.config-center=zookeeper://127.0.0.1:2181
  8. admin.metadata-report.address=zookeeper://127.0.0.1:2181
  9. admin.root.user.name=root
  10. admin.root.user.password=root

2.  打包:进入dubbo-admin根目录后打开cmd窗口,执行如下命令进行打包。(之前踩坑了,一直在\dubbo\dubbo-admin\dubbo-admin-server这个目录下执行)

mvn clean package -Dmaven.test.skip=true

看到上面都是SUCCESS,表示打包成功了。 

然后,可以进入各模块验证一下:

  • dubbo-admin\dubbo-admin-ui\target:dubbo-admin-ui-0.7.0-SNAPSHOT.jar
  • dubbo-admin\dubbo-admin-server\target:dubbo-admin-server-0.7.0-SNAPSHOT.jar
  • dubbo-admin\dubbo-admin-distribution\target目录下有两个jar包:dubbo-admin-0.7.0-SNAPSHOT.jar 和 dubbo-admin-distribution-0.7.0-SNAPSHOT.jar
  • dubbo-admin\dubbo-admin-test\target:这个不要也无所谓。

3. 运行jar。进入 dubbo-admin-distribution 或 dubbo-admin-server 的target目录,打开cmd窗口,执行命令:java -jar dubbo-admin-0.7.0-SNAPSHOT.jar 即可。

4. 打开浏览器,输出   http://localhost:38080 即可看到效果:

总结:

一、搭建这个浪费了不少时间,原因可能为:

(1)执行命令一直错误地在dubbo-admin-server目录下,而没有在根目录dubbo-admin下;

(2)dubbo-admin-ui模块打包一直出现问题,报错日志没看到关键位置,不仅要看cause by,更要看报错ERROR的提示信息:有个包一直下载不下来;

Central Repository: com/github/eirslett/frontend-maven-plugin/1.11.0 (apache.org)

解决方案之一:可以到上面那个仓库下载对应的jar并做替换。但是要到dubbo-admin-ui下的pom文件中注释掉下面这段代码:

  1. <goals>
  2. <goal>npm</goal>
  3. </goals>

(3)Node.js没有正确安装;

(4)下次如果再遇到问题,解决不了,可以参考以下文章:

三、dubbo项目开发实战 ★★★

参考官网网址:2 - Dubbo Spring Boot Starter 开发微服务应用 | Apache Dubbo

目标:从零上手开发基于 Dubbo 3.1.5 Spring Boot 的微服务开发,了解 Dubbo 3.1.5 Spring Boot 配置方式。(基于注解的方式)

环境:Windows、JDK8

项目结构:

如上所示,共有 3 个模块,其中 interface 模块被 consumer 和 provider 两个模块共同依赖,存储 RPC 通信使用的 API 接口。

具体代码编写步骤:

第一大步: 创建 dubbo-spring-boot-demo01 的maven工程作为父项目,并删除src文件夹,在父pom中添加一些依赖,pom中全部内容如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <groupId>org.wuya</groupId>
  7. <artifactId>dubbo-spring-boot-demo01</artifactId>
  8. <version>1.0-SNAPSHOT</version>
  9. <packaging>pom</packaging>
  10. <modules>
  11. <module>dubbo-spring-boot-demo-interface</module>
  12. <module>dubbo-spring-boot-demo-provider</module>
  13. <module>dubbo-spring-boot-demo-consumer</module>
  14. </modules>
  15. <properties>
  16. <dubbo.version>3.1.5</dubbo.version>
  17. <!-- 第一次忘记添加SpringBoot版本了,报错信息 org.springframework.boot:spring-boot-dependencies:pom:${spring-boot.version} was
  18. not found in https://repo.maven.apache.org/maven2 during a previous attempt. -->
  19. <spring-boot.version>2.7.8</spring-boot.version>
  20. <maven.compiler.source>8</maven.compiler.source>
  21. <maven.compiler.target>8</maven.compiler.target>
  22. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  23. </properties>
  24. <dependencyManagement>
  25. <dependencies>
  26. <!-- Spring Boot -->
  27. <dependency>
  28. <groupId>org.springframework.boot</groupId>
  29. <artifactId>spring-boot-dependencies</artifactId>
  30. <version>${spring-boot.version}</version>
  31. <type>pom</type>
  32. <scope>import</scope>
  33. </dependency>
  34. <!-- Dubbo -->
  35. <dependency>
  36. <groupId>org.apache.dubbo</groupId>
  37. <artifactId>dubbo-bom</artifactId>
  38. <version>${dubbo.version}</version>
  39. <type>pom</type>
  40. <scope>import</scope>
  41. </dependency>
  42. <!-- Zookeeper -->
  43. <!-- NOTICE: Dubbo only provides dependency management module for Zookeeper, add Nacos or other product dependency directly if you want to use them. -->
  44. <dependency>
  45. <groupId>org.apache.dubbo</groupId>
  46. <artifactId>dubbo-dependencies-zookeeper-curator5</artifactId>
  47. <version>${dubbo.version}</version>
  48. <type>pom</type>
  49. </dependency>
  50. </dependencies>
  51. </dependencyManagement>
  52. <build>
  53. <pluginManagement>
  54. <plugins>
  55. <plugin>
  56. <groupId>org.springframework.boot</groupId>
  57. <artifactId>spring-boot-maven-plugin</artifactId>
  58. <version>${spring-boot.version}</version>
  59. </plugin>
  60. </plugins>
  61. </pluginManagement>
  62. </build>
  63. </project>

第二大步:创建共享API模块 dubbo-spring-boot-demo-interface,创建UserService接口,UserService接口和pom文件中内容如下:

服务接口UserService 是 Dubbo 中沟通消费端和服务端的桥梁。 后续服务端发布的服务,消费端订阅的服务都是围绕着 UserService 接口展开的。

第三大步:创建服务提供方 dubbo-spring-boot-demo-provider 模块,并完善代码;

(1)pom.xml文件编写:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <parent>
  7. <groupId>org.wuya</groupId>
  8. <artifactId>dubbo-spring-boot-demo01</artifactId>
  9. <version>1.0-SNAPSHOT</version>
  10. </parent>
  11. <artifactId>dubbo-spring-boot-demo-provider</artifactId>
  12. <properties>
  13. <maven.compiler.source>8</maven.compiler.source>
  14. <maven.compiler.target>8</maven.compiler.target>
  15. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  16. </properties>
  17. <dependencies>
  18. <!-- 记得导入依赖:这个公共API模块-->
  19. <dependency>
  20. <groupId>org.wuya</groupId>
  21. <artifactId>dubbo-spring-boot-demo-interface</artifactId>
  22. <version>1.0-SNAPSHOT</version>
  23. </dependency>
  24. <!-- dubbo -->
  25. <dependency>
  26. <groupId>org.apache.dubbo</groupId>
  27. <artifactId>dubbo-spring-boot-starter</artifactId>
  28. </dependency>
  29. <dependency>
  30. <groupId>org.apache.dubbo</groupId>
  31. <artifactId>dubbo-dependencies-zookeeper-curator5</artifactId>
  32. <type>pom</type>
  33. <exclusions>
  34. <exclusion>
  35. <artifactId>slf4j-reload4j</artifactId>
  36. <groupId>org.slf4j</groupId>
  37. </exclusion>
  38. </exclusions>
  39. </dependency>
  40. <!-- spring boot starter -->
  41. <dependency>
  42. <groupId>org.springframework.boot</groupId>
  43. <artifactId>spring-boot-starter</artifactId>
  44. </dependency>
  45. </dependencies>
  46. </project>

(2)定义服务端的实现:公共API模块中定义了服务接口UserService之后,可以在服务端这一侧定义对应的实现,这部分的实现相对于消费端来说是远端的实现,本地没有相关的信息。 

  1. package org.wuya;
  2. import org.apache.dubbo.config.annotation.DubboService;
  3. import org.springframework.beans.factory.annotation.Value;
  4. import java.util.ArrayList;
  5. import java.util.List;
  6. @DubboService //暴露服务
  7. public class UserServiceImpl implements UserService{
  8. @Value("${server.port}")
  9. private String port;
  10. @Override
  11. public List<String> findAllAddrById(String userId) {
  12. List<String> addrList = new ArrayList<>();
  13. addrList.add("北京市昌平区6号");
  14. addrList.add("南京市钟鼓楼");
  15. System.out.println(this.port);//为了测试负载均衡
  16. return addrList;
  17. }
  18. }

 (3)配置服务端 Yaml 配置文件

  1. server:
  2. port: 20880 # 默认就是20880,在dubbo-admin可视化管理中心可以看到
  3. dubbo:
  4. application:
  5. name: dubbo-spring-boot-demo-provider
  6. protocol:
  7. name: dubbo
  8. port: -1
  9. registry:
  10. # address: zookeeper://${zookeeper.address:127.0.0.1}:2181
  11. address: zookeeper://127.0.0.1:2181

(4)基于 Spring 配置服务端启动类:在这个启动类中,配置了一个 ProviderApplication 去读取我们前面定义的 application.yml 配置文件并启动应用。

  1. package org.wuya;
  2. import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
  3. import org.springframework.boot.SpringApplication;
  4. import org.springframework.boot.autoconfigure.SpringBootApplication;
  5. @SpringBootApplication()
  6. @EnableDubbo()
  7. public class ProviderApplication {
  8. public static void main(String[] args) {
  9. SpringApplication.run(ProviderApplication.class,args);
  10. }
  11. }

第四大步:创建服务提供方 dubbo-spring-boot-demo-consumer 模块,并完善代码;

(1)编写pom文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <parent>
  7. <groupId>org.wuya</groupId>
  8. <artifactId>dubbo-spring-boot-demo01</artifactId>
  9. <version>1.0-SNAPSHOT</version>
  10. </parent>
  11. <artifactId>dubbo-spring-boot-demo-consumer</artifactId>
  12. <properties>
  13. <maven.compiler.source>8</maven.compiler.source>
  14. <maven.compiler.target>8</maven.compiler.target>
  15. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  16. </properties>
  17. <dependencies>
  18. <!-- 记得导入依赖:这个公共API模块-->
  19. <dependency>
  20. <groupId>org.wuya</groupId>
  21. <artifactId>dubbo-spring-boot-demo-interface</artifactId>
  22. <version>1.0-SNAPSHOT</version>
  23. </dependency>
  24. <!-- dubbo -->
  25. <dependency>
  26. <groupId>org.apache.dubbo</groupId>
  27. <artifactId>dubbo-spring-boot-starter</artifactId>
  28. </dependency>
  29. <dependency>
  30. <groupId>org.apache.dubbo</groupId>
  31. <artifactId>dubbo-dependencies-zookeeper-curator5</artifactId>
  32. <type>pom</type>
  33. <exclusions>
  34. <exclusion>
  35. <artifactId>slf4j-reload4j</artifactId>
  36. <groupId>org.slf4j</groupId>
  37. </exclusion>
  38. </exclusions>
  39. </dependency>
  40. <!-- spring boot starter -->
  41. <dependency>
  42. <groupId>org.springframework.boot</groupId>
  43. <artifactId>spring-boot-starter</artifactId>
  44. </dependency>
  45. <!-- 除了这个依赖,其他的都与provider中的一模一样 -->
  46. <!-- web依赖,通过浏览器发http请求进行服务调用测试 -->
  47. <!-- @ResponseBody、@GetMapping、@RequestMapping 这些注解都是导入这个依赖才能使用 -->
  48. <dependency>
  49. <groupId>org.springframework.boot</groupId>
  50. <artifactId>spring-boot-starter-web</artifactId>
  51. <version>2.1.10.RELEASE</version>
  52. </dependency>
  53. </dependencies>
  54. </project>

web依赖是多个依赖的集成,如下图:

(2)编写配置文件

  1. server:
  2. port: 8081
  3. dubbo:
  4. application:
  5. name: dubbo-spring-boot-demo-consumer
  6. protocol:
  7. name: dubbo
  8. port: -1
  9. registry:
  10. # address: zookeeper://${zookeeper.address:127.0.0.1}:2181
  11. address: zookeeper://127.0.0.1:2181
  12. #关闭启动时检查
  13. consumer:
  14. check: false

 (3)编写 Service 和 controller 的代码

  1. package org.wuya.controller;
  2. import org.springframework.stereotype.Controller;
  3. import org.springframework.web.bind.annotation.GetMapping;
  4. import org.springframework.web.bind.annotation.RequestMapping;
  5. import org.springframework.web.bind.annotation.ResponseBody;
  6. import org.wuya.service.OrderService;
  7. import javax.annotation.Resource;
  8. import java.util.List;
  9. //这种写法错误哦,会报错:javax.servlet.ServletException: No adapter for handler [org.wuya.controller.OrderController@6f7004d9]:
  10. // The DispatcherServlet configuration needs to include a HandlerAdapter that supports this handler
  11. //@Controller("/order")
  12. @Controller
  13. @RequestMapping("/order")
  14. public class OrderController {
  15. @Resource
  16. private OrderService orderService;
  17. @GetMapping("/userId") //用@RequestMapping也行
  18. @ResponseBody
  19. public List<String> selectAddrByUserId(String userId){
  20. return orderService.selectAddrByUserId(userId);
  21. }
  22. }

 通过@DubboReference 从 Dubbo 获取了一个 RPC 订阅,这个 userService 可以像本地调用一样直接调用。

(4)编写消费端启动类

  1. package org.wuya;
  2. import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
  3. import org.springframework.boot.SpringApplication;
  4. import org.springframework.boot.autoconfigure.SpringBootApplication;
  5. @SpringBootApplication
  6. @EnableDubbo
  7. public class ConsumerApplication {
  8. public static void main(String[] args) {
  9. SpringApplication.run(ConsumerApplication.class,args);
  10. }
  11. }

至此,搭建完毕。

第五大步:验证。首先启动zk server端,接下来依次启动服务提供方启动类ProviderApplication 和 服务消费方启动类ConsumerApplication;然后在浏览器端输入以下url回车进行访问,查看效果:

完整访问路径:​​​​​​​localhost:8081/order/userId?userId=3

只有一个参数时可以简写为:localhost:8081/order/userId?3

切记url格式为:(url与参数之间用?连接,参数名和参数值用=连接,多个参数用&连接)

协议名://ip+port+请求url?param1=value&param2=value¶m3=value

效果:

D:\JavaTools\dubbo\dubbo-admin\dubbo-admin-distribution\target>java -jar dubbo-admin-0.7.0-SNAPSHOT.jar

通过上面命令行的方式启动dubbo-admin项目后,在浏览器端(http://localhost:38080/)打开控制台后,可以看到注册的服务。

四、dubbo-admin的使用

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/169648
推荐阅读
相关标签
  

闽ICP备14008679号