原理
- eureka从服务列表拉取服务节点信息
- ribbon从拉取的节点信息列表,通过负载均衡算法找到其中一个服务
- 通过TestTempalte发送http请求
pom依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--- eureka-client -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
yml
server:
port: 80 #服务端口号
spring:
application:
name: cloud-order-service
eureka:
client:
fetch-registry: true
register-with-eureka: true
service-url:
defaultZone: http://eureka7002.com:7002,http://eureka7001.com:7001
注入RestTemplate
@Component
@Configuration
public class AppConfiguration {
@LoadBalanced // 负载均衡
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
RestTemplate 调用
@Autowired
private RestTemplate restTemplate;
private String url = "http://CLOUD-PAYMENT-SERVICE";
@RequestMapping("/get/{id}")
public BaseResult findById(@PathVariable("id") Integer id) {
ResponseEntity<BaseResult> forEntity = restTemplate.getForEntity(url + "/payment/get/" + id, BaseResult.class);
BaseResult body = forEntity.getBody();
return body;
}
启动类
@EnableEurekaClient
@SpringBootApplication
public class OrderMain80 {
public static void main(String[] args) {
SpringApplication.run(OrderMain80.class);
}
}
更改负载均衡算法
配置负载均衡
@Configuration
public class CloudRondowRule {
@Bean
public IRule iRule() {
return new RandomRule();
}
}
可以使用自己实现 IRule 算法替换
警告:
警告:
警告:
该配置所造的位置不能被 @ComponentScan 扫描到,不然,所有的ribbon客户端都会使用这个。(一个项目可能需要调用不同的服务)
启动类指定负载均衡
@EnableEurekaClient
@SpringBootApplication
// 在启动该微服务的时候就能去加载我们自定义的Ribbon配置类,从而使配置生效(使用多个微服务时,可以使用 RibbonClients ,单个微服务时,直接使用 RibbonClient)
@RibbonClients(
{@RibbonClient(name = "CLOUD-PAYMENT-SERVICE", configuration = CloudRondowRule.class)
}
)public class OrderMain80 {
public static void main(String[] args) {
SpringApplication.run(OrderMain80.class);
}
}