1. SpringCloud常用组件表
- 服务的注册和发现。(eureka,nacos,consu1)
- 服务的负载均衡。(ribbon,dubbo)
- 服务的相互调用。(openFeign,dubbo)
- 服务的容错。(hystrix,sentinel)
- 服务网关。(gateway,zuul)
- 服务配置的统一管理。(config-server,nacos,apollo)
- 服务消息总线。(bus)
服务安全组件。(security,oauth2.0) - 服务监控。(admin)(jvm)
- 链路追踪。(sleuth+zipkin)
2.落地实现
目前开发中常用的落地实现有三种:
3.Eureka
3.1 CAP原理
CAP原则又称CAP定理,指的是在一个分布式系统中,
- 一致性(Consistency)
- 可用性(Availability)
- 分区容错性(Partition tolerancQ)(这个特性是不可避免的)CAP原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。
3.2 快速入门
3.3 Eureka Server
3.3.1如何实现一个注册服务中心
- 需要解决的问题
3.3.1 配置文件
server:
port: 8761 #默认端口
spring:
application:
name: eureka-server #应用名称
eureka: # eureka的配置分为三类 server client 实例的 eureka-server既是服务端又是客户端
server:
eviction-interval-timer-in-ms: 10000 # 服务端间隔多少毫秒做定期删除的操作
renewal-percent-threshold: 0.85 # 续约百分比 超过85%的应用没有和你续约 那么eureka会保护服务 不会剔除任何一个
instance: # 实例的配置
instance-id: ${eureka.instance.hostname}:${spring.application.name}:${server.port} # 主机名称 : 应用名称 : 端口号
hostname: localhost # 主机名称 或者服务的ip
prefer-ip-address: true # 以ip的形式显示具体的服务信息
lease-renewal-interval-in-seconds: 5 # 服务实例的续约的时间间隔
3.3.2 启动注解
@EnableEurekaServer // 开启Eureka注册中心
3.4 Eureka Client
3.4.1 配置文件
server:
port: 8081
spring:
application:
name: eureka-client-a
# 注册的含义是什么? 就是将自己的一些信息(什么信息ip port...) 发送过去 (发到哪里)
eureka:
client: # 客户端的相关配置
service-url: # 指定注册的地址
defaultZone: http://localhost:8761/eureka
register-with-eureka: true # 可以不往eureka-server注册
fetch-registry: true # 应用是否去拉去服务列表到本地
registry-fetch-interval-seconds: 10 # 为了缓解服务列表的脏读问题 时间越短脏读越少 性能消耗大
instance:
hostname: localhost # 应用的主机名称 最好写主机ip
instance-id: ${eureka.instance.hostname}:${spring.application.name}:${server.port}
prefer-ip-address: true # 显示ip
lease-renewal-interval-in-seconds: 10 # 示例续约的时间
3.4.2 启动注解
@EnableEurekaClient
3.5 web配置页面
- 一个应用可以有多个实例,每个实例id唯一。
实例id组成为三部分
3.6 集群设置
3.6.1 Eureka Server 集群设置
-
配置文件
client: service-url: defaultZone: http://peer1:8761/eureka,http://peer3:8763/eureka,http://peer2:8762/eureka
3.7 Eureka 概念的理解
3.7.1 服务的注册
当项目启动时(
eureka 的客户端),就会向 eureka-server 发送自己的元数据(原始数据)
(运行的 ip,端口 port,健康的状态监控等,因为使用的是 http/ResuFul 请求风格),
eureka-server 会在自己内部保留这些元数据(内存中)。(有一个服务列表)(
restful 风
格,以 http 动词的请求方式,完成对 url 资源的操作)
3.7.2 服务的续约
项目启动成功了,除了向 eureka-server 注册自己成功,还会定时的向 eureka-server 汇
报自己,心跳,表示自己还活着。(修改一个时间)
3.7.3 服务的下线(主动下线)
当项目关闭时,会给 eureka-server 报告,说明自己要下机了。
3.7.4 服务的剔除(被动下线,主动剔除)
当项目超过了指定时间没有向 eureka-server 汇报自己,那么 eureka-server 就会认为此
节点死掉了,会把它剔除掉,也不会放流量和请求到此节点了。
7.2.3 服务注册总结
重要的类:
DiscoveryClient 里面的 register()方法完后注册的总体构造
AbstractJerseyEurekaHttpClient 里面的 register()方法具体发送注册请求(
post)
InstanceRegistry 里面 register()方法接受客户端的注册请求
PeerAwareInstanceRegistryImpl 里面调用父类的 register()方法实现注册
AbstractInstanceRegistry 里面的 register()方法完成具体的注册保留数据到 map 集合
保存服务实例数据的集合:
第一个 key 是应用名称(全大写) spring.application.name
Value 中的 key 是应用的实例 id
eureka.instance.instance-id
Value 中的 value 是 具体的服务节点信息
private final ConcurrentHashMap<String, Map<String,Lease<InstanceInfo>>> registry
= new ConcurrentHashMap<String, Map<String,Lease<InstanceInfo>>>();
3.8 服务发现
@Autowired
private DiscoveryClient discoveryClient;
@GetMapping("test")
public String doDiscovery(String serviceName){
// 这就是服务发现 通过服务的应用名 找到服务的具体信息
List<ServiceInstance> instances = discoveryClient.getInstances(serviceName);
instances.forEach(System.out::println);
ServiceInstance serviceInstance = instances.get(0);
String ip = serviceInstance.getHost();
int port = serviceInstance.getPort();
System.out.println(ip+":"+port);
// 这里去找b的ip和port
return instances.get(0).toString();
}
标签:服务,ip,eureka,注册,Eureka,server,port
From: https://www.cnblogs.com/firsthelloworld/p/17439920.html