小小最近开始学习dubbo了,这次进行相关的学习。
思维导图如下
dubbo 是一款高性能的分布式服务框架,高性能的,透明化的RPC远程调用方案,SOA服务治理方案,与Spring 体系同时并驾崎岖于Java体系生态中。
每天为上千个服务提供,使用以及应用。
在上方的词语中,出现了,分布式服务,RPC远程调用执行方案,SOA服务治理方案,这里对这几个词语进行依次解释。
分布式服务 包含,服务注册中心和服务治理中心,对微服务进行有效的治理。
RPC 远程调用方案 RPC为一种通信方式,用于进行远程通信。
SOA服务治理 一种面向服务的体系架构。
dubbo的logo
网站需要由单一的架构演化到分布式架构,以及流动计算架构,如图所示。
网站演化图
在上图中,网站由最初的一个应用,即单一应用架构,由jsp,hibernate等逐步应用,当流量变大时,逐步发展到垂直应用架构,对机器进行拆分,拆分出多个,用F5等应用,进行负载均衡,流量越来越大,进行分布式服务架构,此时,应用之间交互相当复杂,把核心的抽取出来,使用RPC进行远程调用。流量达到越来越大,此时,增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率,即资源调度与治理,即SOA。
在整个过程中,逐步的衍生出了一些问题,需要解决以下的问题。
1 依赖管理,服务逐渐的变的更加的多,服务的URL配置变的更加的艰难,负债均衡保持单点的压力相当的大,此时需要注册中心,管理相关的依赖管理,以及服务注册等。
2 路由透明,服务的注册,由原先的手动,变成了自动化,这里全部依赖于路由透明。
3 服务治理,当单一节点出现故障的时候,链路出现血崩的时候,如何治理服务。这里需要服务治理。对微服务进行相关的治理。
由此Dubbo应生而出,提供了以上问题的解决方案。
dubbo主要应用于中大型应用,主要解决中大型应用的各种疑难问题。即分布式应用架构。
Dubbo 对应于计算机核心知识的生产者与消费者的问题
生产者与消费者是经典的并发协助的经典问题,该问题描述了共享固定大小缓冲区的两个进程——即所谓的“生产者”和“消费者”——在实际运行时会发生的问题。生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。与此同时,消费者也在缓冲区消耗这些数据。该问题的关键就是要保证生产者不会在缓冲区满时加入数据,消费者也不会在缓冲区中空时消耗数据。
Dubbo的核心应用为生产者与消费者问题
此时节点调用关系如上所示
具有以下的特点,连通性,健壮性,伸缩性和升级性。
连通性指注册中心负责注册与查找。监控中心负责进行相关的统计,注册中心和其余服务都是连通的,监控中心与其他服务也是连通的。
健壮性指,监控中心宕机的时候,其余应用也可使用。
伸缩性,可以动态的部署集群。
升级性,未来可以进行逐步的升级。
这里安装zk节点。使用docker镜像安装
PS C:/Users/Administrator/Desktop/试写参考> docker pull zookeeper:3.5 3.5: Pulling from library/zookeeper afb6ec6fdc1c: Pull complete ee19e84e8bd1: Pull complete 6ac787417531: Pull complete f3f781d4d83e: Pull complete 424c9e43d19a: Pull complete f0929561e8a7: Pull complete f1cf0c087cb3: Pull complete 2f47bb4dd07a: Pull complete Digest: sha256:883b014b6535574503bda8fc6a7430ba009c0273242f86d401095689652e5731 Status: Downloaded newer image for zookeeper:3.5 docker.io/library/zookeeper:3.5 PS C:/Users/Administrator/Desktop/试写参考> PS C:/Users/Administrator/Desktop/试写参考> docker create --name zddk -p 2181:2181 zookeeper:3.5 15b27748e07dc6cf44ca7943c49f9881e6d488a7cc5c61bfc5d3170a58321ff9 PS C:/Users/Administrator/Desktop/试写参考> docker start zk zk PS C:/Users/Administrator/Desktop/试写参考> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d3eb0b087850 zookeeper "/docker-entrypoint.…" 2 weeks ago Up 22 seconds 2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp, 8080/tcp zk PS C:/Users/Administrator/Desktop/试写参考>
先拉取镜像,再创建相关的容器,最后启动docker容器。
选择新的maven工程
创建工程目录如下
添加服务提供方
添加相关依赖
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>untitled9</artifactId> <groupId>org.example</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>service-dubbo</artifactId> <dependencies> <!--添加SpringBoot测试--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>0.2.0</version> </dependency> <!--添加dubbo依赖--> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.6.4</version> </dependency> </dependencies> </project>
package com.ming.pojo; import java.io.Serial; import java.io.Serializable; // 使用dubbo要求传输的对象必须实现序列化接口 public class User implements Serializable { private static final long serialversionUID = -809897897879L; private Long id; private String username; private String password; private Integer age; public static long getSerialversionUID() { return serialversionUID; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
package com.ming.pojo; import java.util.List; public interface UserService { List<User> queryAll(); }
package com.ming.pojo; import com.alibaba.dubbo.config.annotation.Service; import java.util.ArrayList; import java.util.List; @Service(version = "${dubbo.service.version}") // 声明一个服务 public class UserServiceImpl implements UserService { public List<User> queryAll() { // 实现查询 List<User> list = new ArrayList<User>(); for(int i = 0; i < 10; i++){ User user = new User(); user.setAge(10 + i); user.setId(Long.valueOf(i + 1)); user.setPassword("123456"); user.setUsername("username_" + 1); list.add(user); } return list; } }
// 版本 dubbo: service: version: 1.0.0 protocol: name: dubbo port: 20880 // 服务扫描 scan: basePackages: com.ming.pojo application: name: dubbo-provider-demo //zk registry: address: zookeeper://172.0.0.1:2181 client: zkclient
启动以后,查看注册中心,已经注册
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>untitled9</artifactId> <groupId>org.example</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>consumer-dubbo</artifactId> <dependencies> <!--添加springboot依赖,非web项目--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.13</version> </dependency> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency> <!--引入service的依赖--> <dependency> <groupId>cn.itcast.dubbo</groupId> <artifactId>itcast-dubbo-service</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies> </project>
@RunWith(SpringRunner.class) @SpringBootTest public class TestUserService { @Reference(version="1.0.0") private UserService userService; @TestpublicvoidtestQueryAll(){ List<User>users=this.userService.queryAll(); } for(Useruser:users){ System.out.println(user); } }
spring: application: name: ming-consumer port: 9091 dubbo: registry: address: zookeeper://172.0.0.1:2181 client: zkclient
Java 基本语法,计算机科学的基础知识体系
刚刚走入社会,或正在实习的,大学生们