spring-Cloud-netflix-快速入门(一)-环境搭建与组件介绍
基础业务环境搭建
业务介绍
以简单的部门管理为基础,对第一代微服务进行全面了解。
并且可以通过本教程可以快速上手微服务开发,此篇博客作为后面集成微服务其他组件的基础环境。
业务:
增加部门
查询部门
模块划分
------dept-api(通用实体)<br/>
------dept-producer(生产者)<br/>
------dept-consumer(消费者)<br/>
SQL
/*
Navicat Premium Data Transfer
Source Server : mysql
Source Server Type : MySQL
Source Server Version : 50611
Source Host : localhost:3306
Source Schema : sqltest
Target Server Type : MySQL
Target Server Version : 50611
File Encoding : 65001
Date: 15/07/2022 10:53:14
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for dept
-- ----------------------------
DROP TABLE IF EXISTS `dept`;
CREATE TABLE `dept` (
`deptno` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '部门ID',
`dname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '部门名称',
`db_source` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '数据源',
PRIMARY KEY (`deptno`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
-- ----------------------------
-- Records of dept
-- ----------------------------
INSERT INTO `dept` VALUES (1, '康世行部门', 'sqltest');
SET FOREIGN_KEY_CHECKS = 1;
源码下载地址:
https://github.com/kangshihang1998/springCloudNetFlixDemo
测试
启动两个基础服务
查询部门
localhost:9001/deptConsumer/queryDeptConsumer/1
添加部门
localhost:9001/deptConsumer/addDeptConsumer/测试部门
微服务组件介绍
Eureka(注册中心)
官方解释
云端服务发现,一个基于 REST 的服务,用于定位服务,以实现云端中间层服务发现和故障转移。
个人理解
以上面的部门管理为例:
消费者是通过rest接口的方式调用生产者,正常的情况下可以通过 restTemplate 访问指定的rest接口获取响应结果。
rest接口结构:http://ip:端口号:接口映射地址
从上面的rest接口结构来看,完全可能出现ip地址更换或者端口号更换的情况。这样只要更换了其中一个就需要在消费端进行统一个更改,否则消费者调用接口会出现接口找不到的情况!
Eureka:
这个时候Eureka 的好处就可以体现了,为了解决上面的这种情况,Eureka 让生产者和消费者主动的把自己的 ip 地址,端口号和服务名字 发送给Eureka.
然后由Eureka 保存生产者和消费者的ip,端口,服务名 这些信息。
消费者
现在消费者还是使用restTemplate 调用生产者,不同的是ip:port 部分换成了 服务名称,调用格式示例如下:
服务名称 接口映射地址 参数 返回值类型
FrontResult forObject = restTemplate.getForObject(REST_URL_PREFIX + "/dept/queryDept/" + deptno, FrontResult.class);
参考博客
如果想直接搭建Eureka 可以直接参考下面这篇博客
springCloud.微服务.零基础搭建注册中心(Eureka)(一)_康世行的博客-CSDN博客
组件中文参考地址
ZUUl(网关)
官方解释
Zuul 是在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架。Zuul 相当于是设备和 Netflix 流应用的 Web 网站后端所有请求的前门。
个人理解
还是以上面部门管理为例,目前有两个模块 生产者,消费者。这两个模块之间调用可以通过注册中心解除耦合,并且不用关心对方的具体地址。只需要根据服务名称去注册中心获取,也就是说即使这个服务对应了多个实例,也不会出问题(因为使用到了负载均衡,选一个给客户端使用后面文章会介绍)。一个服务多个实例的选择过程和网关有点类似,就是从多个实例中选择一个和网关很像。唯一区别是网关的是有条件的,根据条件进行模块的选择。
根据上面的这个例子,我们可以明白。网关最大的作用是服务的选择,根据不同的条件跳转到不同的服务。假设现在给部门管理功能添加一个管理页面,并且这个页面会调用 消费者模块提供的服务和生产者模块提供的服务。这个时候前端需要准备两个 baseUrl 来调用不同模块提供的服务,所以这个时候可以使用网关统一baseUrl地址,在路径上加上服务标识用于服务转发。
比如 :生产者路径上加上 production 标识 消费者路径加上 consumer 标识,如下示例
网关baseUrl : locahost:9527
生产者:
locahost:9527/production/具体接口映射
消费者:
locahost:9527/consumer /具体接口映射
组件中文参考地址
Config(配置中心)
官方解释
配置管理工具包,让你可以把配置放到远程服务器,集中化管理集群配置,目前支持本地存储、Git以及Subversion。
个人理解
这个比较简单,就是把springboot 本地的yml 文件,移动到第三方平台让代码和配置分离(gitee/github)。方便进行配置的热更新,当然这个版本的配置中心要想实现热更新还的配合其他插件,具体的就不在者介绍了。单独的config只是实现了配置和代码分离,可以在不改变代码的情况下修改配置,只是需要重新启动jar包。
组件中文参考地址
Hystrix(服务熔断降级)
官方解释
熔断器,容错管理工具,旨在通过熔断机制控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。
个人理解
熔断器提供了两种功能,消费者端使用的 服务降级和生产者端使用的服务熔断。两者的目的都是避免服务雪崩,避免因为生产者服务不可用导致,消费者服务也不可用的情况。
组件中文参考地址
DashBoard(单服务监控)
官方解释
Hystrix 仪表板不应部署在不受信任的网络上,也无需外部身份验证和授权。具体来说,hystrix-dashboard不提供任何默认的安全保护,可以根据用户提供的URL执行服务器端请求。
个人理解
针对服务熔断和降级的流量监控
组件中文参考地址
Turbine (多服务监控)
官方解释
Turbine是聚合服务器发送事件流数据的一个工具,用来监控集群下hystrix的metrics情况。
个人理解
DashBoard 这个只能监控一个服务,Turbine 可以监控服务名称来监控多个服务的多个实例。功能和DashBoard 是一样的,监控服务熔断和降级的流量情况。
组件中文参考地址
合服务器发送事件流数据的一个工具,用来监控集群下hystrix的metrics情况。
个人理解
DashBoard 这个只能监控一个服务,Turbine 可以监控服务名称来监控多个服务的多个实例。功能和DashBoard 是一样的,监控服务熔断和降级的流量情况。
组件中文参考地址