1、Dubbo的前世今生
2011年10月27日,阿里巴巴开源了自己的SOA服务化治理方案的核心框架Dubbo,服务治理和SOA的设计理念开始逐渐在国内软件行业中落地,并被广泛应用。
- 早期版本的dubbo遵循SOA的思想,是面向服务架构的重要组件。
- 如今版本的Dubbo作为Spring Cloud的二进制通信方案来发挥Dubbo的性能优势
2、Dubbo的快速入门
2.1、Dubbo的基本架构
节点角色说明:
节点 | 角色说明 |
Provider | 暴露服务的服务提供方。 |
Consumer | 调用远程服务的服务消费方。 |
Registry | 服务注册与发现的注册中心。 |
Monitor | 统计服务的调用次数和调用时间的监控中心。 |
调用关系说明:
- 服务容器负责启动,加载,运行服务提供者。
- 服务提供者在启动时,向注册中心注册自己提供的服务。
- 服务消费者在启动时,向注册中心订阅自己所需的服务。
- 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
- 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
- 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
2.2、Nacos
Nacos是阿里巴巴的产品,是一个集服务发现,配置管理的平台,在国内受欢迎程度较高。
1、找到今日资料中的nacos安装包
2、解压到没有中文和特殊字符的目录
3、进入bin目录,执行启动命令
1. #进入bin目录 2. cd bin 3. #启动 4. startup.cmd -m standalone
4、浏览器查看:http://127.0.0.1:8848/nacos
2.3、管理后台
DubboAdmin是阿里巴巴管理提供的管理控制台,可以实现服务查询,详情展示,服务测试等功能。借由DubboAdmin可以更好的帮助开发人员对服务进行管理和监控
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 -D maven.test.skip=true 6. #4、启动 7. mvn --projects dubbo-admin-server spring-boot:run 8. #或者 9. cd dubbo-admin-distribution/target; java -jar dubbo-admin-0.1.jar 10. #5、访问 http://localhost:8080
2.4、入门案例
需求:使用Dubbo构建分布式架构,完成根据用户id查询用户
2.4.1、服务提供者
搭建环境
(1)创建user-provider模块导入依赖
1. <dependencies> 2. <dependency> 3. <groupId>org.projectlombok</groupId> 4. <artifactId>lombok</artifactId> 5. </dependency> 6. <dependency> 7. <groupId>org.springframework.boot</groupId> 8. <artifactId>spring-boot-starter-web</artifactId> 9. </dependency> 10. <dependency> 11. <groupId>mysql</groupId> 12. <artifactId>mysql-connector-java</artifactId> 13. </dependency> 14. <!--mybatis--> 15. <dependency> 16. <groupId>org.mybatis.spring.boot</groupId> 17. <artifactId>mybatis-spring-boot-starter</artifactId> 18. </dependency> 19. 20. <!--dubbo的起步依赖--> 21. <dependency> 22. <groupId>org.apache.dubbo</groupId> 23. <artifactId>dubbo-spring-boot-starter</artifactId> 24. <version>2.7.8</version> 25. </dependency> 26. 27. <dependency> 28. <groupId>org.apache.dubbo</groupId> 29. <artifactId>dubbo-registry-nacos</artifactId> 30. <version>2.7.8</version> 31. </dependency> 32. </dependencies>
(2)编写引导类
1. package cn.itcast.user; 2. 3. import org.mybatis.spring.annotation.MapperScan; 4. import org.springframework.boot.SpringApplication; 5. import org.springframework.boot.autoconfigure.SpringBootApplication; 6. 7. @MapperScan("cn.itcast.user.mapper") 8. @SpringBootApplication 9. public class UserProviderApplication { 10. 11. public static void main(String[] args) { 12. SpringApplication.run(UserProviderApplication.class, args); 13. } 14. 15. }
代码实现
(1)UserServiceImpl
1. package cn.itcast.user.service; 2. 3. 4. import cn.itcast.user.api.UserService; 5. import cn.itcast.user.domain.User; 6. import cn.itcast.user.mapper.UserMapper; 7. import org.apache.dubbo.config.annotation.DubboService; 8. import org.springframework.beans.factory.annotation.Autowired; 9. 10. @DubboService 11. public class UserServiceImpl implements UserService { 12. 13. @Autowired 14. private UserMapper userMapper; 15. 16. //根据id查询用户名称 17. public String queryUsername(Long id) { 18. return userMapper.findById(id).getUsername(); 19. } 20. }
配置文件
1. server: 2. port: 18081 3. spring: 4. datasource: 5. url: jdbc:mysql://localhost:3306/dubbo-demo?useSSL=false 6. username: root 7. password: root 8. driver-class-name: com.mysql.jdbc.Driver 9. application: 10. name: user-provider 11. logging: 12. level: 13. cn.itcast: debug 14. pattern: 15. dateformat: HH:mm:ss:SSS 16. dubbo: 17. protocol: 18. name: dubbo 19. port: 20881 20. registry: 21. address: nacos://127.0.0.1:8848 22. scan: 23. base-packages: cn.itcast.user.service
2.4.2、服务消费者
搭建环境
(1)创建user-consumer模块导入依赖
1. <dependencies> 2. <dependency> 3. <groupId>org.projectlombok</groupId> 4. <artifactId>lombok</artifactId> 5. </dependency> 6. <dependency> 7. <groupId>org.springframework.boot</groupId> 8. <artifactId>spring-boot-starter-web</artifactId> 9. </dependency> 10. 11. 12. <!--dubbo的起步依赖--> 13. <dependency> 14. <groupId>org.apache.dubbo</groupId> 15. <artifactId>dubbo-spring-boot-starter</artifactId> 16. <version>2.7.8</version> 17. </dependency> 18. 19. <dependency> 20. <groupId>org.apache.dubbo</groupId> 21. <artifactId>dubbo-registry-nacos</artifactId> 22. <version>2.7.8</version> 23. </dependency> 24. </dependencies>
(2)配置引导类
1. package cn.itcast.user; 2. 3. import org.springframework.boot.SpringApplication; 4. import org.springframework.boot.autoconfigure.SpringBootApplication; 5. 6. 7. @SpringBootApplication 8. public class UserConsumerApplication { 9. 10. public static void main(String[] args) { 11. SpringApplication.run(UserConsumerApplication.class, args); 12. } 13. }
代码实现
1. package cn.itcast.user.controller; 2. 3. 4. import cn.itcast.user.api.UserService; 5. import cn.itcast.user.domain.User; 6. import lombok.extern.slf4j.Slf4j; 7. import org.apache.dubbo.config.annotation.DubboReference; 8. import org.springframework.web.bind.annotation.GetMapping; 9. import org.springframework.web.bind.annotation.PathVariable; 10. import org.springframework.web.bind.annotation.RequestMapping; 11. import org.springframework.web.bind.annotation.RestController; 12. 13. @Slf4j 14. @RestController 15. @RequestMapping("/user") 16. public class UserController { 17. 18. //引用远程服务 19. @DubboReference 20. private UserService userService; 21. 22. @GetMapping("/username/1") 23. public String findUserName(@PathVariable("id") Long id) { 24. return userService.queryUsername(id); 25. } 26. }
配置文件
1. server: 2. port: 18080 3. spring: 4. application: 5. name: user-consumer 6. logging: 7. level: 8. cn.itcast: debug 9. pattern: 10. dateformat: HH:mm:ss:SSS 11. dubbo: 12. registry: 13. address: nacos://127.0.0.1:8848