Dubbo第一章:Dubbo-admin编译和Dubbo简单入门

Dear 丶 2022-06-04 09:36 291阅读 0赞

背景

Dubbo的开源人梁飞在内部的交流会上宣布重启dubbo的维护和更新,具体PPT内容请看我的个人订阅号。

因此本文基于2017-12-10号的维护的版本dubbo-2.5.7。

这里为何从Dubbo-admin开始,这不是最重要的部分,但是却是dubbo源码编译最简单的部分。

准备工作

按照zookeeper服务(参考单机安装zookeeper安装)

下载dubbo源码
https://github.com/alibaba/dubbo/releases/tag/dubbo-2.5.7

当然也可以直接从我的github上面直接下载已经编译好了的war包
https://github.com/BambooZhang/dubbo-study

dubbo-admin编译

解压后这里只用到一个项目就是dubbo-admin

  1. cd D:\git_space\dubbo-dubbo-2.5.7\dubbo-dubbo-2.5.7\dubbo-admin
  2. mvn package -Dmaven.skip.test=true

出现下面的结果则说明编译成功

  1. [INFO]
  2. [INFO] --- maven-war-plugin:2.2:war (default-war) @ dubbo-admin ---
  3. [INFO] Packaging webapp
  4. [INFO] Assembling webapp [dubbo-admin] in [D:\git_space\dubbo-dubbo-2.5.7\dubbo-dubbo-2.5.7\dubbo-admin\target\dubbo-admin-2.5.7]
  5. [INFO] Processing war project
  6. [INFO] Copying webapp resources [D:\git_space\dubbo-dubbo-2.5.7\dubbo-dubbo-2.5.7\dubbo-admin\src\main\webapp]
  7. [INFO] Webapp assembled in [880 msecs]
  8. [INFO] Building war: D:\git_space\dubbo-dubbo-2.5.7\dubbo-dubbo-2.5.7\dubbo-admin\target\dubbo-admin-2.5.7.war
  9. [INFO] WEB-INF\web.xml already added, skipping
  10. [INFO] ------------------------------------------------------------------------
  11. [INFO] BUILD SUCCESS
  12. [INFO] ------------------------------------------------------------------------
  13. [INFO] Total time: 24.516 s
  14. [INFO] Finished at: 2017-12-10T17:38:17+08:00
  15. [INFO] Final Memory: 19M/244M
  16. [INFO] ------------------------------------------------------------------------

部署dubbo-admin到tomcat

把target\dubbo-admin-2.5.7下面的文件都拷贝到tomcat/webapps/ROOT下面

这里写图片描述

修改配置dubbo.properties
zookeeper地址修改为自己安装的ip地址,默认是127.0.0.1

  1. dubbo.registry.address=zookeeper://192.168.0.91:2181
  2. dubbo.admin.root.password=root
  3. dubbo.admin.guest.password=guest

启动dubbo-admin

首先启动zookeeper服务,在启动tomcat
启动完成访问localhost:8080
默认账号密码都是root
这里写图片描述

Dubbo服务提供者和消费者demo

dubbo-admin-2.5.7.war管理中心
dubbo-provider服务器提供者
dubbo-consumer服务器消费者

spring版本:4.3.9.RELEASE

dubbo-provider服务器提供者

这里写图片描述

pom

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>com.bamboo</groupId>
  5. <artifactId>dubbo-provider</artifactId>
  6. <version>0.0.1-SNAPSHOT</version>
  7. <packaging>jar</packaging>
  8. <name>dubbo-provider</name>
  9. <url>http://maven.apache.org</url>
  10. <repositories>
  11. <repository>
  12. <id>maven-ali</id>
  13. <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
  14. <releases>
  15. <enabled>true</enabled>
  16. </releases>
  17. <snapshots>
  18. <enabled>true</enabled>
  19. <updatePolicy>always</updatePolicy>
  20. <checksumPolicy>fail</checksumPolicy>
  21. </snapshots>
  22. </repository>
  23. </repositories>
  24. <properties>
  25. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  26. <spring.version>4.3.9.RELEASE</spring.version>
  27. </properties>
  28. <dependencies>
  29. <dependency>
  30. <groupId>com.alibaba</groupId>
  31. <artifactId>dubbo</artifactId>
  32. <version>2.5.7</version>
  33. <exclusions>
  34. <exclusion>
  35. <groupId>org.springframework</groupId>
  36. <artifactId>spring</artifactId>
  37. </exclusion>
  38. </exclusions>
  39. </dependency>
  40. <dependency>
  41. <groupId>com.github.sgroschupf</groupId>
  42. <artifactId>zkclient</artifactId>
  43. <version>0.1</version>
  44. </dependency>
  45. <!-- spring相关 -->
  46. <dependency>
  47. <groupId>org.springframework</groupId>
  48. <artifactId>spring-core</artifactId>
  49. <version>${spring.version}</version>
  50. </dependency>
  51. <dependency>
  52. <groupId>org.springframework</groupId>
  53. <artifactId>spring-beans</artifactId>
  54. <version>${spring.version}</version>
  55. </dependency>
  56. <dependency>
  57. <groupId>org.springframework</groupId>
  58. <artifactId>spring-context</artifactId>
  59. <version>${spring.version}</version>
  60. </dependency>
  61. <dependency>
  62. <groupId>org.springframework</groupId>
  63. <artifactId>spring-jdbc</artifactId>
  64. <version>${spring.version}</version>
  65. </dependency>
  66. <dependency>
  67. <groupId>org.springframework</groupId>
  68. <artifactId>spring-web</artifactId>
  69. <version>${spring.version}</version>
  70. </dependency>
  71. <dependency>
  72. <groupId>org.springframework</groupId>
  73. <artifactId>spring-webmvc</artifactId>
  74. <version>${spring.version}</version>
  75. </dependency>
  76. <dependency>
  77. <groupId>org.springframework</groupId>
  78. <artifactId>spring-aop</artifactId>
  79. <version>${spring.version}</version>
  80. </dependency>
  81. <dependency>
  82. <groupId>org.springframework</groupId>
  83. <artifactId>spring-tx</artifactId>
  84. <version>${spring.version}</version>
  85. </dependency>
  86. <dependency>
  87. <groupId>org.springframework</groupId>
  88. <artifactId>spring-orm</artifactId>
  89. <version>${spring.version}</version>
  90. </dependency>
  91. <dependency>
  92. <groupId>org.springframework</groupId>
  93. <artifactId>spring-context-support</artifactId>
  94. <version>${spring.version}</version>
  95. </dependency>
  96. <dependency>
  97. <groupId>org.springframework</groupId>
  98. <artifactId>spring-test</artifactId>
  99. <version>${spring.version}</version>
  100. </dependency>
  101. <dependency>
  102. <groupId>org.springframework</groupId>
  103. <artifactId>spring-jms</artifactId>
  104. <version>${spring.version}</version>
  105. </dependency>
  106. <dependency>
  107. <groupId>junit</groupId>
  108. <artifactId>junit</artifactId>
  109. <version>3.8.1</version>
  110. <scope>test</scope>
  111. </dependency>
  112. </dependencies>
  113. </project>

applicationProvider.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans
  5. http://www.springframework.org/schema/beans/spring-beans.xsd
  6. http://code.alibabatech.com/schema/dubbo
  7. http://code.alibabatech.com/schema/dubbo/dubbo.xsd ">
  8. <!-- 具体的实现bean -->
  9. <bean id="providerService" class="com.bamboo.dubbo_provider.ProviderServiceImpl" />
  10. <!-- 提供方应用信息,用于计算依赖关系 -->
  11. <dubbo:application name="dubbo_provider" />
  12. <!-- 使用multicast广播注册中心暴露服务地址
  13. <dubbo:registry address="multicast://localhost:1234" />-->
  14. <!-- 使用zookeeper注册中心暴露服务地址 127.0.0.1:2181 -->
  15. <dubbo:registry address="zookeeper://192.168.0.91:2181" />
  16. <!-- 用dubbo协议在20880端口暴露服务 -->
  17. <dubbo:protocol name="dubbo" port="29014" />
  18. <!-- 声明需要暴露的服务接口 -->
  19. <dubbo:service interface="com.bamboo.service.ProviderService" ref="providerService" />
  20. </beans>

java

service

  1. package com.bamboo.service;
  2. public interface ProviderService {
  3. public String sayHello(String name);
  4. }

ProviderServiceImpl

  1. package com.bamboo.dubbo_provider;
  2. import com.bamboo.service.ProviderService;
  3. public class ProviderServiceImpl implements ProviderService {
  4. public String sayHello(String name) {
  5. return "Hello:"+name+"你好,你好~~";
  6. }
  7. }

main.java

  1. package com.bamboo.dubbo_provider;
  2. import java.io.IOException;
  3. import org.springframework.context.support.ClassPathXmlApplicationContext;
  4. /**
  5. * dubbo 服务提供端
  6. * @author bamboo
  7. */
  8. public class App
  9. {
  10. public static void main(String[] args) {
  11. ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
  12. new String[]{"applicationProvider.xml"});
  13. context.start();
  14. System.out.println("提供者服务已注册成功");
  15. System.out.println("请按任意键取消提供者服务");
  16. try {
  17. System.in.read();//让此程序一直跑,表示一直提供服务
  18. } catch (IOException e) {
  19. e.printStackTrace();
  20. }
  21. }
  22. }

运行

  1. log4j:WARN No appenders could be found for logger (org.springframework.core.env.StandardEnvironment).
  2. log4j:WARN Please initialize the log4j system properly.
  3. 提供者服务已注册成功
  4. 请按任意键取消提供者服务

dubbo-consumer服务器消费者

这里写图片描述

pom

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>com.bamboo</groupId>
  5. <artifactId>dubbo-consumer</artifactId>
  6. <version>0.0.1-SNAPSHOT</version>
  7. <packaging>jar</packaging>
  8. <name>dubbo-consumer</name>
  9. <url>http://maven.apache.org</url>
  10. <repositories>
  11. <repository>
  12. <id>maven-ali</id>
  13. <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
  14. <releases>
  15. <enabled>true</enabled>
  16. </releases>
  17. <snapshots>
  18. <enabled>true</enabled>
  19. <updatePolicy>always</updatePolicy>
  20. <checksumPolicy>fail</checksumPolicy>
  21. </snapshots>
  22. </repository>
  23. </repositories>
  24. <properties>
  25. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  26. <spring.version>4.3.9.RELEASE</spring.version>
  27. </properties>
  28. <dependencies>
  29. <!-- 添加dubbo依赖 -->
  30. <dependency>
  31. <groupId>com.alibaba</groupId>
  32. <artifactId>dubbo</artifactId>
  33. <version>2.5.7</version>
  34. <exclusions>
  35. <exclusion>
  36. <groupId>org.springframework</groupId>
  37. <artifactId>spring</artifactId>
  38. </exclusion>
  39. </exclusions>
  40. </dependency>
  41. <!-- 添加zk客户端依赖 -->
  42. <dependency>
  43. <groupId>com.github.sgroschupf</groupId>
  44. <artifactId>zkclient</artifactId>
  45. <version>0.1</version>
  46. </dependency>
  47. <!-- spring相关 -->
  48. <dependency>
  49. <groupId>org.springframework</groupId>
  50. <artifactId>spring-core</artifactId>
  51. <version>${spring.version}</version>
  52. </dependency>
  53. <dependency>
  54. <groupId>org.springframework</groupId>
  55. <artifactId>spring-beans</artifactId>
  56. <version>${spring.version}</version>
  57. </dependency>
  58. <dependency>
  59. <groupId>org.springframework</groupId>
  60. <artifactId>spring-context</artifactId>
  61. <version>${spring.version}</version>
  62. </dependency>
  63. <dependency>
  64. <groupId>org.springframework</groupId>
  65. <artifactId>spring-jdbc</artifactId>
  66. <version>${spring.version}</version>
  67. </dependency>
  68. <dependency>
  69. <groupId>org.springframework</groupId>
  70. <artifactId>spring-web</artifactId>
  71. <version>${spring.version}</version>
  72. </dependency>
  73. <dependency>
  74. <groupId>org.springframework</groupId>
  75. <artifactId>spring-webmvc</artifactId>
  76. <version>${spring.version}</version>
  77. </dependency>
  78. <dependency>
  79. <groupId>org.springframework</groupId>
  80. <artifactId>spring-aop</artifactId>
  81. <version>${spring.version}</version>
  82. </dependency>
  83. <dependency>
  84. <groupId>org.springframework</groupId>
  85. <artifactId>spring-tx</artifactId>
  86. <version>${spring.version}</version>
  87. </dependency>
  88. <dependency>
  89. <groupId>org.springframework</groupId>
  90. <artifactId>spring-orm</artifactId>
  91. <version>${spring.version}</version>
  92. </dependency>
  93. <dependency>
  94. <groupId>org.springframework</groupId>
  95. <artifactId>spring-context-support</artifactId>
  96. <version>${spring.version}</version>
  97. </dependency>
  98. <dependency>
  99. <groupId>org.springframework</groupId>
  100. <artifactId>spring-test</artifactId>
  101. <version>${spring.version}</version>
  102. </dependency>
  103. <dependency>
  104. <groupId>org.springframework</groupId>
  105. <artifactId>spring-jms</artifactId>
  106. <version>${spring.version}</version>
  107. </dependency>
  108. <dependency>
  109. <groupId>junit</groupId>
  110. <artifactId>junit</artifactId>
  111. <version>3.8.1</version>
  112. <scope>test</scope>
  113. </dependency>
  114. </dependencies>
  115. </project>

applicationConsumer.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans
  5. http://www.springframework.org/schema/beans/spring-beans.xsd
  6. http://code.alibabatech.com/schema/dubbo
  7. http://code.alibabatech.com/schema/dubbo/dubbo.xsd ">
  8. <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
  9. <dubbo:application name="dubbo_consumer" />
  10. <!-- 使用multicast广播注册中心暴露发现服务地址127.0.0.1:2181 -->
  11. <dubbo:registry protocol="zookeeper" address="zookeeper://192.168.0.91:2181" />
  12. <!-- 生成远程服务代理,可以和本地bean一样使用demoService -->
  13. <dubbo:reference id="providerService" interface="com.bamboo.service.ProviderService" />
  14. </beans>

###java
service

  1. package com.bamboo.service;
  2. public interface ProviderService {
  3. public String sayHello(String name);
  4. }

main

  1. package com.bamboo.dubbo_consumer;
  2. import java.io.IOException;
  3. import org.springframework.context.support.ClassPathXmlApplicationContext;
  4. import com.bamboo.service.ProviderService;
  5. /**
  6. * dubbo 服务消费端
  7. * @author bamboo
  8. *
  9. */
  10. public class App
  11. {
  12. public static void main(String[] args) {
  13. ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
  14. new String[] { "applicationConsumer.xml" });
  15. context.start();
  16. ProviderService providerService = (ProviderService) context.getBean("providerService");
  17. System.out.println(providerService.sayHello("bamboo"));
  18. System.out.println("Press any key to exit.");
  19. try {
  20. System.in.read();
  21. } catch (IOException e) {
  22. e.printStackTrace();
  23. }
  24. }
  25. }

运行

  1. log4j:WARN No appenders could be found for logger (org.springframework.core.env.StandardEnvironment).
  2. log4j:WARN Please initialize the log4j system properly.
  3. Hello:bamboo你好,你好~~
  4. Press any key to exit.

查看监控列表
这里写图片描述

dubboadmin扩展功能

容错与屏蔽
顾名思义就是当服务提供者出现异常时,消费者是否能够正常处理异常返回预想格式服务,防止崩溃信息抛出到客户

服务降级
超时降级 —— 主要配置好超时时间和超时重试次数和机制,并使用异步机制探测恢复情况
失败次数降级 —— 主要是一些不稳定的API,当失败调用次数达到一定阀值自动降级,同样要使用异步机制探测回复情况
故障降级 —— 如要调用的远程服务挂掉了(网络故障、DNS故障、HTTP服务返回错误的状态码和RPC服务抛出异常),则可以直接降级
限流降级 —— 当触发了限流超额时,可以使用暂时屏蔽的方式来进行短暂的屏蔽

负载均衡
dubbo提供了三个基本的负载均衡策略,分别是 随机访问、轮询、最少并发
https://blog.csdn.net/qq_22152261/article/details/80300597

发表评论

表情:
评论列表 (有 0 条评论,291人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Dubbo简单入门【1】

    一、Dubbo是什么 以下笔记学习自:[Dubbo 官方文档][Dubbo] 1. 本质:一个Jar包,一个可以进行远程服务调用的分布式框架 分布式: 不