赞
踩
Eureka作为一个注册中心,服务提供者把服务注册到注册中心,服务消费者去注册中心拉取信息, 然后通过负载均衡得到对应的服务器去访问。
服务提供者每隔30s向注册中心发送请求,报告自己的状态,当超过一定时间没有发送时,注册中心会认为该服务宕机,会把它剔除。
需要自己手动编写这个程序和导入依赖
- server:
- port: 10086 #端口设置
-
- spring:
- application:
- name: eureka-server #服务名称
-
- eureka:
- client:
- service-url:
- defaultZone: http://127.0.0.1:10086/eureka
- register-with-eureka: true # false表示不向注册中心注册自己。
- fetch-registry: false # false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
-
- <dependencies>
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
- </dependency>
- </dependencies>
往服务提供者的依赖里面加入依赖
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
- </dependency>
在配置文件里面加入如下内容用于连接注册中心将并自己注册进去
- spring:
- application:
- name: userservice
- eureka:
- client:
- service-url:
- defaultZone: http://127.0.0.1:10086/eureka
将直连方式改成使用服务名进行连接,会根据负载均衡策略进行选择服务提供者
@LoadBalanced是Spring Cloud中提供的一个注解,它用于将一个RestTemplate对象标记为支持负载均衡的,从而可以针对服务名称进行REST调用。
轮询、权重、区域划分、随机,最小连接数、最少负载等
注意:不能有两种负载均衡方式,会出现不知道匹配哪一个方式而报500错误
IRule是负载均衡的核心算法类,若未定义是用什么算法,默认使用轮询RoundRobinRule
里面包括7种算法提供使用(若不想使用这7种算法,可以自定义算法)
可以通过javaBean,也可以通过配置文件
通过javaBean是全局配置,通过配置文件是指定某一个服务配置
- @Bean
- public IRule randomRule(){
- return new RandomRule();
- }
写在服务调用者中
- userservice: # 给某个微服务配置负载均衡规则,这里是userservice服务
- ribbon:
- NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则
Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长。
而饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载:
- ribbon:
- eager-load:
- enabled: true
- clients: userservice # 指定被调用微服务饥渴加载
Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的框架。
相比于Eureka在市面上更流行
在父工程中引入阿里巴巴的依赖
通过导入此依赖,你在项目中直接使用Spring Cloud Alibaba的其他组件时,只需声明组件的groupId和artifactId,而无需指定版本号,因为版本管理已经由这个BOM统一处理。
- <dependencyManagement>
- <dependency>
- <groupId>com.alibaba.cloud</groupId>
- <artifactId>spring-cloud-alibaba-dependencies</artifactId>
- <version>2.2.6.RELEASE</version>
- <type>pom</type>
- <scope>import</scope>
- </dependency>
在需要被注入的工程中加入这个依赖
该依赖包含了自动配置的类,可以在Spring Boot应用中自动配置Nacos作为服务发现的组件。这意味着你无需手动编写大量的配置代码,Spring框架会在应用启动时自动读取Nacos的配置信息,帮助你的服务注册到Nacos服务列表中,并能够发现和调用其他已注册的服务。
- <dependency>
- <groupId>com.alibaba.cloud</groupId>
- <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
- </dependency>
在被注册到nacos中的工程添加配置信息
- spring:
- cloud:
- nacos:
- server-addr: localhost:8848
能访问同集群下的服务,则不会访问其他集群下的服务,只有该集群下没有服务,才会访问其他的集群下的服务
集群访问方式有两种方式
一种是配置文件进行配置
- userservice:
- ribbon:
- NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则
一种是全局配置(使用java代码进行配置)
- @Bean
- public IRule nacosRule(){
- return new NacosRule();
- }
但是NacosRule是同集群内随机挑选,不会考虑机器的性能问题。
因此,Nacos提供了权重配置来控制访问频率,权重越大则访问频率越高。
给微服务配置命名空间,将服务调用者设置到另一个命名空间,两个命名空间相互隔离,因此,服务调用者调用不到另一个命名空间的服务提供者了
- spring:
- cloud:
- nacos:
- server-addr: localhost:8848
- discovery:
- cluster-name: HZ
- namespace: 492a7d5d-237b-46a1-a99a-fa8e98e4b0f9 # 命名空间,填ID
结果
Nacos的服务实例分为两种l类型:
- spring:
- cloud:
- nacos:
- discovery:
- ephemeral: false # 设置为非临时实例
非临时服务实例宕机后,不会从nacos中进行删除
Nacos是Alibaba的产品,支持AP和CP模型,Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;
AP和CP仅存在于微服务中
AP指的是可用性,指的是在节点N1上进行写操作的时候,N2可以继续进行其他操作,但是这样的话就违背了一致性
CP指的是一致性,指的是在节点N1上进行写操作的时候,N2可以不继续进行其他操作,必须保持数据一致,因此就违背了可用性。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。