前言
在好多微服务同时注册进一个注册中心的时候,就会出现单点登录的问题,这时候就可以增加注册中心的个数,从而解决单点登录的问题,但是还是会出现之访问一个注册中心的问题,这时候就要用eureka
自带的ribbon
来实现负载均衡了。
开搞
1.在现有的springboot项目中创建两个eureka
微服务,带启动类,并且用的是maven创建的(eureka中相互注册)
eureka:
instance:
hostname: eureka
client:
fetch-registry: false #是否从eureka中获取注册信息
register-with-eureka: false #是否将自己注册进eureka,本身就在,无需注册
service-url:
defaultZone: http://localhost:第一个端口/eureka/,http://localhost:第二个端口/eureka/
2.注册中心的同级目录下创建两个客户端微服务,带启动类,spring.application.name
都叫client
3.两个客户端都注册进两个注册中心
eureka:
instance:
prefer-ip-address: true
client:
service-url:
defaultZone: http://localhost:第一个端口/eureka/,http://localhost:第二个端口/eureka/
4.两个客户端都写同一个方法
@RestController
public class Client2Controller {
@Value("${server.port}")
private String port;
@GetMapping("/home")
public String homePage() {
return "这是客户端1或2,端口是" + " : " + port;
}
}
5..注册中心的同级目录下创建ribbon
微服务,也同时注册进两个注册中心
defaultZone: http://localhost:第一个端口/eureka/,http://localhost:第二个端口/eureka/
6.写config
@Configuration
public class LoadConfig {
@Bean
@LoadBalanced//开启ribbon
public RestTemplate getRestTemplate() {
return new RestTemplate();//远程调用
}
@Bean
public IRule getIRule() {
/*
每一个类就是一种负载均衡算法
RoundRobinRule 轮询
RandomRule 随机
AvailabilityFilteringRule 会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,还有并发的连接数超过阈值的服务,然后对剩余的服务列表进行轮询
WeightedResponseTimeRule 权重 根据平均响应时间计算所有服务的权重,响应时间越快服务权重越大被选中的概率越高。刚启动时,如果统计信息不足,则使用轮询策略,等信息足够,切换到 WeightedResponseTimeRule
RetryRule 重试 先按照轮询策略获取服务,如果获取失败则在指定时间内重试,获取可用服务
BestAvailableRule 选过滤掉多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务
ZoneAvoidanceRule 符合判断server所在区域的性能和server的可用性选择服务
*/
// 默认轮询算法
return new RoundRobinRule() ;
}
}
7.写controller
@RestController
@RequestMapping("test")
public class ConsumeController {
@Autowired
private RestTemplate restTemplate;
@GetMapping("/showInfo")
public String showInfo() {
return restTemplate.getForObject("http://client/home", String.class);//获取某一个客户端的那个方法
}
}
8.两个eureka
的控制台


9.访问ribbon
的controller
的那个方法,之前默认用的是轮询算法


网友评论