使用ribbon的appliction.properties配置文件和注册到eureka的客户端没有什么明显区别
一、maven依赖
eureka-client依赖包含了ribbon所需的依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>
二、客户端调用
消费者项目调用生产者的接口,多个生产者在eureka注册的应用别名都是provider,在springboot启动类中添加如下注解就可以为provider进行负载均衡调用
@SpringBootApplication
@EnableEurekaClient
@RibbonClient("PROVIDER")
public class ConsumerOrderRibbonApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerOrderRibbonApplication.class, args);
}
}
controller层对provider的接口调用
@RestController
public class OrderController {
/**
* spring提供的一个用于访问rest接口的对象
*/
@Autowired
private RestTemplate restTemplate;
@GetMapping("/order/{id}")
public User getOrder(@PathVariable Integer id) {
//找提供者
return restTemplate.getForObject("http://PROVIDER/user/" + id, User.class);
}
}
三、自定义ribbon负载均衡算法
ribbon默认的负载均衡算法是循环的轮询,在此可以自定义轮询方式改为随机轮询
需要写一个配置类为TestConfig,此配置类不能被springboot启动类扫描到,把这个类与启动类放在同一个包下,默认是会被启动类扫描到,所以自定义一个注解ExcludeFromComponentScan用于标记,此注解什么都不写
public @interface ExcludeFromComponentScan {
}
然后就可以编写自定义负载均衡算法的配置类了
@Configuration
@ExcludeFromComponentScan
public class TestConfig {
@Bean
public IRule ribbonRule() {
//随机算法 这样负载均衡就不是默认的轮询了
return new RandomRule();
}
}
然后在springboot启动类中使用TestConfig类的ribbon负载均衡算法,并让springboot不扫描TestConfig类就行了
@SpringBootApplication
@EnableEurekaClient
@RibbonClient(name = "PROVIDER", configuration = TestConfig.class)
@ComponentScan(excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION, value = ExcludeFromComponentScan.class)})
public class ConsumerOrderRibbonApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerOrderRibbonApplication.class, args);
}
}
