Spring cloud
分布式架构,降低开发难度,一站式解决方案
目标:理解微服务,并通过SpringCloud体系搭建微服务架构
微服务体积小,能独立部署和运行,轻量级的通信机制和架构,微服务之间是松耦合的。
原则:单一职责--->每个服务只处理自己的业务逻辑
服务自治--->开发、运维、测试都独立
轻量通信
接口明确--->服务间调用,接口要更通用、更灵活
第一部分:spring eureka
服务注册中心:eureka提供服务注册与发现的功能
服务提供者:提供服务应用,它将自己提供的服务注册到eureka以供其他应用发现
服务消费者:从服务中心获取服务名列表从而使消费者可以知道何处调用所需服务
- 搭建高可用的服务注册中心
- 增加节点配置:application-peer0.properties
application-peer1.properties
- 通过控制台启动注册中心:
java -jar eureka-server-xxx-jar -spring profiles.action=peer0
java -jar eureka-server-xxx-jar -spring profiles.action=peer1
- 启动客户端注册服务:java -jar customer-server-xxx-jar --server.port=10000
java -jar customer-server-xxx-jar --server.port=10020
application-peer0.properties
# 服务端口
server.port=1111
spring.application.name=eureka-server
# 注册中心ip地址
eureka.instance.hostname=peer0
# 注册地址
eureka.client.serviceUrl.defaultZone=http://peer1:1112/eureka/
# 设置为false,代表不向注册中心注册自己
eureka.client.register-with-eureka=false
# 设置为false,代表不需要去检索服务信息
eureka.client.fetch-registry=false
# 关闭eureka的自我抱回
eureka.server.enable-self-preservation=false
第二部分:spring ribbon
loadBalance:将任务通过一定机制分摊到多个操作单元上进行执行,从而共同完成工作任务
作用:系统高可用性 网络压力的延缓 处理能力扩容
关于Ribbon:
基于http和tcp的客户端负载均衡工具
存在于微服务和基础设施中
实现微服务之间的调用,请求转发
使用Ribbon:
- 服务提供者只需要启动多个服务实例并注册到一个注册中心或者多个相关联的服务中心
- 消费者直接通过调用被@loadBalance注解修饰过的restTemplate来实现面向服务的接口调用
第三部分:spring zuul
边缘服务:即对外服务
存在问题:维护路由规则与服务实例列表相对麻烦
边缘服务的安全性代码有大量冗余
解决方案:api网关,整个微服务架构的系统门面,所有的外部客户端都要经过它来调度和过滤
添加依赖:
<groupId>org.springframework.cloud <groupId/>
<artifactId>spring-cloud-starter-neffix-zuul<artifactId/>
<groupId>org.springframework.cloud <groupId/>
<artifactId>spring-cloud-starter-neffix-erueka-client<artifactId/>
添加注解:@EnableZuulProxy
资源文件配置
zuul.routes.customer-url.path=/customer/**
zuul.routes.customer-url.serviceId=Feign-Customer
Eureka.client.serviceUrl.defautZone=http://peer0:1111/eureka/