Eureka注册中心
Eureka 是 Netflix 发布的一个开源的服务发现组件,主要提供了以下两个作用:
服务注册和发现:Eureka 可以让微服务应用程序在启动时自动向 Eureka 注册中心注册自己,包括服务实例的 IP 地址、端口号、主机名等元数据信息。同时,客户端也可以通过 Eureka 注册中心查询并发现可用的服务实例。
高可用性和容错性:由于 Eureka 的架构采用了分布式的设计模式,通过维护多个 Eureka Server 的集群来保证服务的高可用性和容错性。这样即使某个 Eureka Server 发生故障或宕机,其他 Eureka Server 仍然可以继续服务,从而确保整个服务注册和发现系统不会出现单点故障。
总之,Eureka 提供了一种方便的方式来实现服务注册和发现,并且通过分布式架构来保证服务的高可用性和容错性,是构建微服务架构中不可或缺的重要组件。
实践的步骤包括:
搭建eureka-server
1.创建eureka-server服务
在cloud-demo父工程下,创建一个子模块(普通的maven工程):
2.引入SpringCloud为eureka提供的starter依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
3.给eureka-server服务编写一个启动类,一定要添加一个@EnableEurekaServer注解,开启eureka的注册中心功能:
package cn.itcat.eureka;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer //启eureka的注册中心功能
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class,args);
}
}
4.编写一个application.yml文件,内容如下:
server:
port: 10086
spring:
application:
name: eureka-server
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka
5.启动微服务,然后在浏览器访问:http://127.0.0.1:10086
看到下面结果应该是成功了:
服务注册
将user-service和order-service注册到eureka-server中去。
1.在user-service和order-service的pom文件中,引入下面的eureka-client依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2.配置文件
在user-service和order-service中,修改application.yml文件,添加服务名称、eureka地址:
user-service
spring:
application:
name: userservice #服务名称
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka
order-service
spring:
application:
name: orderservice #服务名称
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka
3.启动多个user-service实例
为了演示一个服务有多个实例的场景,添加一个SpringBoot的启动配置,再启动一个user-service。
首先,复制原来的user-service启动配置:
启动:
浏览器中刷新
注册成功!
服务发现
服务拉取和负载均衡
最后,我们要去eureka-server中拉取user-service服务的实例列表,并且实现负载均衡。
不过这些动作不用我们去做,只需要添加一些注解即可。
在order-service的OrderApplication中,给RestTemplate这个Bean添加一个@LoadBalanced注解:
修改order-service服务中的cn.itcast.order.service包下的OrderService类中的queryOrderById方法。修改访问的url路径,用服务名代替ip、端口:
访问http://localhost:8080/order/102
8081和8082都访问到了
直接负载均衡
负载均衡原理
SpringCloud底层其实是利用了一个名为Ribbon的组件,来实现负载均衡功能的。
自定义负载均衡策略
通过定义IRule实现可以修改负载均衡规则,有两种方式:
1.代码方式:在order-service中的OrderApplication类中,定义一个新的IRule:
//修改负载均衡规则为随机(全局)
@Bean
public IRule randomRule(){
return new RandomRule();
}
2.配置文件方式:在order-service的application.yml文件中,添加新的配置也可以修改规则:
userservice: # 给某个微服务(指定)配置负载均衡规则,这里是userservice服务
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则
测试
8081接收到请求101,102,103
8082接收到请求104
饥饿加载
Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长。
而饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载:
ribbon:
eager-load:
enabled: true
clients: userservice #配置一个
ribbon:
eager-load:
enabled: true
clients: #配置多个
-userservice
-xxservice
-xxservice
评论区