new module:
demoribbon,
dependency:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
application.properpites:
server.port = 8763
eureka.client.serviceUrl.defaultZone= http://localhost:8761/eureka/
spring.application.name= SPRING-CLIENT-02
SPRING-CLIENT-01.ribbon.NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
DemoribbonApplication:
package com.huizhi.demoribbon;
import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
@EnableEurekaClient
public class DemoribbonApplication {
public static void main(String[] args) {
SpringApplication.run(DemoribbonApplication.class, args);
}
// 将RestTemplate注入到spring容器中
// LoadBalanced负载均衡默认为轮询
// 通过注入在controller中就可以使用调用生产者实例
@Bean
@LoadBalanced
RestTemplate restTemplate(){
return new RestTemplate();
}
@Bean
public IRule ribbonRule() {
return new RandomRule(); //这里配置策略,和配置文件对应
}
}
Controller:
package com.huizhi.demoribbon.controller;
import com.huizhi.demoribbon.service.RibbonService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/getInfo")
public class Controller {
@Autowired
RibbonService ribbonService;
private static final Logger logger = LoggerFactory.getLogger(Controller.class);
@Value("${server.port}")
String port;
@Value("${spring.application.name}")
String serviceName;
@RequestMapping("/show")
public String getInfo(){
return "I'm form service:"+serviceName+",port:"+port;
}
@RequestMapping("/hellol")
public String showInfol(){
System.out.println("find port");
logger.info("find port");
return ribbonService.port();
}
}
IRibbonService:
package com.huizhi.demoribbon.service;
public interface IRibbonService {
}
RibbonService:
package com.huizhi.demoribbon.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
@Service
public class RibbonService implements IRibbonService {
@Autowired
RestTemplate restTemplate;
@Autowired
LoadBalancerClient loadBalancerClient;
public String port() {
this.loadBalancerClient.choose("SPRING-CLIENT-01");
String info = restTemplate.getForObject("http://SPRING-CLIENT-01/getInfo/port", String.class);
return restTemplate.getForObject("http://SPRING-CLIENT-01/getInfo/port", String.class);
}
}