演示服务为:order-service,user-service , order-service为消费者
父工程的pom.xml配置
4.0.0
cn.itcast.demo
cloud-demo
1.0
user-service
order-service
eureka-service
pom
org.springframework.boot
spring-boot-starter-parent
2.3.9.RELEASE
UTF-8
UTF-8
1.8
Hoxton.SR10
5.1.47
2.1.1
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
mysql
mysql-connector-java
${mysql.version}
org.mybatis.spring.boot
mybatis-spring-boot-starter
${mybatis.version}
org.projectlombok
lombok
1.创建一个Eureka服务,和普通的maven项目一样创建的
2.引入依赖
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
org.springframework.boot
spring-boot-autoconfigure
3.编写启动类,添加@EnableEurekaServer注解
4.编写Eureka服务的配置文件 application.yml
server:
port: 1008 #服务端口
spring:
application:
name: eurekaserver #eureka的服务名称
eureka:
client:
service-url:
defaultZone: http://localhost:1008/eureka/
5.服务注册
1.order-service,user-service 引入下方依赖
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
2.给他们添加配置文件,name修改为服务名称,可以自己设置
spring:
application:
name: orderserver #order的服务名称
eureka:
client:
service-url:
defaultZone: http://localhost:1008/eureka/
以上步骤完成后
把服务全部启动,浏览器打开http://localhost:1008/就可以看到Eureka管理对应的服务
1.在order-service配置文件加入以下配置,userservice为user-service 的服务名称
userservice:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则
2.在order-service完成服务拉取,order-service启动类加入注解:@LoadBalanced
3.修改OrderService的代码,修改访问的url路径,用服务名代替ip、端口:
配置完成后,启动多个user-service服务,在order-service里拉取user-service服务时,则可以随机挑选user-service服务
通过定义IRule实现可以修改负载均衡规则,有两种方式:
1.代码方式:在order-service中的OrderApplication类中,定义一个新的IRule:
@Bean
public IRule randomRule(){
return new RandomRule();
}
2.配置文件方式:在order-service的application.yml文件中,添加新的配置也可以修改规则:
userservice:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则
Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长。
而饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载:
ribbon:
eager-load:
enabled: true # 开启饥饿加载
clients: # 指定对userservice这个服务饥饿加载
- userservice
耗时对比
1.没有开启饥饿加载第一次访问耗时,花费了460毫秒
2.开启饥饿加载第一次访问耗时,花费了287毫秒
相比之下,快了非常多