1. 回顾web
在前文的示例中,是将Ribbon与Eureka配合使用的。可是现实中可能不具有这样的条件,例如一些遗留的微服务,它们可能并无注册到Eureka Server上,spring
甚至根本不是使用Spring Cloud开发的,此时要如何使用Ribbon实现负载均衡架构
2. 脱离Eureka使用Ribbonapp
> 复制项目 microservice-consumer-movie-ribbon,将ArtifactId修改成 microservice-consumer-movie-without-eureka负载均衡
> 为了更具说服力,将Eureka的依赖替换为Ribbon依赖,即将ide
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
替换为微服务
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
> 去掉启动类上的@EnableDiscoveryClient注解spa
package com.itmuch.cloud.microserviceconsumermoviewithouteureka; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; import org.springframework.web.client.RestTemplate; @SpringBootApplication public class MicroserviceConsumerMovieWithoutEurekaApplication { public static void main(String[] args) { SpringApplication.run(MicroserviceConsumerMovieWithoutEurekaApplication.class, args); } @Bean @LoadBalanced // 实现负载均衡
public RestTemplate restTemplate() { return new RestTemplate(); } }
> 将application.yml修改以下:rest
server:
port: 8010
spring:
application:
name: microservice-consumer-movie
microservice-provider-user:
ribbon:
listOfServers: localhost:8000,localhost:8001
其中,属性microservice-provider-user.ribbon.listOfServers用于为名为microservice-provider-user的Ribbon客户端设置请求的地址列表日志
> 启动两个以上的 microservice-simple-provider-user 实例
> 启动 microservice-consumer-without-eureka
> 屡次访问 http://localhost:8010/log-instance,控制台打印相似以下日志
由结果可知,尽管电影微服务和用户微服务并无注册到Eureka上,Ribbon仍可正常工做,请求依旧会分摊到两个用户微服务节点上
3. 总结
本文讲解了脱离Eureka使用Ribbon的状况。
下文将讲解使用Feign实现声明式REST调用,敬请期待~~~
4. 参考
周立 --- 《Spring Cloud与Docker微服务架构与实战》