简介
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;
}
}
5.启动ribbon项目后刷新注册中心界面,就会发现client-ribbon已经注册到注册中心了
在浏览器中输入http://localhost:8764/find,多请求几次,会发现ribbon是对eureka-service是进行交替消费的