簡介
SpringCloudRibbon是Netflix下的一個開源項目,是基於NetflixRibbon實現的,主要作用是基於HTTP和TCP爲客戶端做負載均衡,其默認是採用的輪詢方式進行負載均衡,通過SpringCloud進行封裝後可以非常方便的進行Rest請求。
爲了測試ribbon的負載均衡我們可以再創建一個eureka-service1,也可以在idea中設置啓動多實例,修改一下端口號爲8763,這樣就相當於一個集羣了。
接下來就是創建ribbon
1.首先創建一個名稱爲ribbon的springboot項目再在properties中加入相關配置
spring.application.name=client-ribbon
server.port=8764
eureka.client.serviceUrl.defaultZone=http://user:pwd@localhost:8761/eureka/
#實例改爲IP顯示,默認false
eureka.instance.prefer-ip-address=true
#自定義註冊中心服務實例顯示格式
#默認是${spring.cloud.client.hostname}:${spring.application.name}:${spring.application.instance_id:${server.port}}
eureka.instance.instance-id=${spring.application.name}:${server.port}
2.加入對應的pom文件
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
在spring-cloud-starter-netflix-eureka-client JAR裏已經包含了我們所需要的Ribbon了,所以就不用重複添加了
3.在SpringBoot的啓動類上加上@EnableEurekaClient註解,向註冊中心進行註冊,再注入一個Bean restTemplate,並加上@LoadBalanced註解,給與了restTemplate負載均衡的功能。
//可以是其他的註冊中心 如:zookeeper,
//@EnableDiscoveryClient
//註冊中心必須是eureka
@EnableEurekaClient
@SpringBootApplication
public class RibbonApplication {
public static void main(String[] args) {
SpringApplication.run(RibbonApplication.class, args);
}
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
4.寫一個測試service,用restTemplate來消費eureka-service,這裏一定要用服務ID不能用IP+端口號來進行調用
@Service
public class RibbonService {
@Autowired
private RestTemplate restTemplate;
public String ribbon(String name) {
//必須使用服務名稱,不能使用IP:端口號
String address="http://eureka-service/find;
return restTemplate.getForObject(address,String.class);
}
}
再寫一個Controller對Service進行調用
@Slf4j
@RestController
public class RibbonController {
@Autowired
private RibbonService ribbonService;
@RequestMapping(value = "find", method = RequestMethod.GET)
public String ribbon() {
String result = ribbonService.ribbon();
log.info("返回結果:{}", result);
return result;
}
}
在瀏覽器中輸入http://localhost:8764/find,多請求幾次,會發現ribbon是對eureka-service是進行交替消費的