上篇SpringCloud系列(五)——Ribbon实现简单说明了ribbon的实现方法,现在继续Springcloud集成Ribbon。
首先在 SpringCloud系列(二)——Eureka简介三个项目上进行改变。
Server端保持不变。
Provider端通过端口号输入在Eureka服务器上注册两个服务实例:
@SpringBootApplication
@EnableEurekaClient
public class ProviderApp {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String port = scan.nextLine();
new SpringApplicationBuilder(ProviderApp.class).properties("server.port=" + port).run(args);
}
}
Invoker端:
- 把上一篇的MyRule类拿到过,忘记说ribbon人的maven坐标:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
- 通过@Bean注入MyRule
public class MyConfig {
@Bean
public IRule getRule(){
return new MyRule();
}
}
- 配置RibbonClient,Spring-lb-provider为服务名称,跟Provider端的名称一样:
//@RibbonClient(name = "Spring-lb-provider",configuration = MyConfig.class)
public class MyClient {
}
- 另外还可以在配置文件 application.yml进行RibbonClient配置:
Spring-lb-provider:
ribbon:
NFLoadBalancerRuleClassName: org.haiyu.cloud.MyRule
- 通过@Autowired注入LoadBalancerClient ,并在Controller类前添加@Configuration:
@Autowired
private LoadBalancerClient client;
@RequestMapping(value = "/lb", method = RequestMethod.GET,
produces = MediaType.APPLICATION_JSON_VALUE)
public ServiceInstance lb(){
ServiceInstance si = client.choose("Spring-lb-provider");
return si;
}