一、简介
在微服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于http restful的。Spring cloud有两种服务调用方式:
一种是ribbon+restTemplate,
另一种是feign。
ribbon是一个负载均衡客户端,可以很好的控制htt和tcp的一些行为。Feign默认集成了ribbon。
ribbon
核心组件有三个
-
- Rule - 从服务列表中如何获取一个有效服务
- Ping - 后台运行线程用来判断服务是否可用
- ServerList - 服务列表
二、准备
1.服务注册中心
2.服务提供方:多个service
三、使用Ribbon实现客户端负载均衡的消费者
1.pom.xml
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.3.5.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Brixton.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
2.@EnableDiscoveryClient
注解来添加发现服务能力
3.通过@LoadBalanced注解表明这个restRemplate开启负载均衡的功能。
RestTemplate
构建RestTemplate
对应的bean,在method上使用注解@LoadBalanced表示restTemplate使用LoadBalancerClient
执行请求
@Configuration public class RibbonConfig { /** * LoadBalanced 注解表明restTemplate使用LoadBalancerClient执行请求 */ @Bean @LoadBalanced public RestTemplate restTemplate() { RestTemplate template = new RestTemplate(); SimpleClientHttpRequestFactory factory = (SimpleClientHttpRequestFactory) template.getRequestFactory(); factory.setConnectTimeout(3000); factory.setReadTimeout(3000); return template; } }
4.controller直接注入resttemplate,调用服务,即可
注:如果使用了feign,Feign默认集成了ribbon,无须任何配置,调用服务,请求会自动轮询到每个服务端来处理。