地址信息获取:
1)服务提供者启动时,向Eureka注册自己的信息
2)Eureka保存这些信息
3)消费者根据服务名向Erueka拉去提供者信息
多选一:
1)使用负载均衡技术,从多个服务列表中,选择一个
监测健康状态
1)服务提供者每隔30s会向Eureka发送自己的心跳数据,即是否正常工作
2)如果不工作了会从保存的服务列表中剔除
3)消费者根据最新的服务列表能够或者服务者健康状况
1)创建项目:引入spring-cloud-starter-netflix-eureka-server的依赖
//服务端依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
2)编写启动类,添加@EnableEurekaServer注解
@EnableEurekaServer //自动装配Eureka注解
@SpringBootApplication //SpringBoot启动类注解
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class,args);
}
}
3)添加application.yml文件,并编写如下配置
server:
port: 10086 #注册的端口
spring:
application:
name: eurekaserver #服务注册名字
eureka:
client:
service-url: #服务注册访问地址
defaultZone: http://127.0.0.1:10086/eureka/
//客户端依赖
<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/
order-service虽然是消费者,但与user-service一样都是eureka的client端,同样可以实现服务注册:
//客户端依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
spring:
application:
name: orderservice
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka/
服务拉取是基于服务名称获取服务列表,然后在对服务列表做负载均衡
String url = "http://userservice/user/" + order.getUserId();
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
1)order-serice发起请求:http://userservice/use/1
2)获取url中服务的id(userservice)
3)在Eureka中拉去userservice
4)返回服务列表(8081/8082)
5)服务负载均衡策略:IRule
6)选择某个服务:8081
7)修改原来的url,发起请求
8)请求服务8081
@Bean
public IRulerandomRule(){
return new RandomRule();
}
userservice:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule#负载均衡规则
Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长。
而饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载:
ribbon:
eager-load:
enabled: true # 开启饥饿加载
clients:userservice # 指定对userservice这个服务饥饿加载
参考文献
1)黑马程序员SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课