Spring Cloud实例教程二 Spring Cloud Ribbon 客户端负载均衡


前面我们已经完成了注册中心和服务提供者两个基础组件。本文就介绍使用Spring Cloud Ribbon在客户端负载均衡的调用服务。

使用Spring Cloud Ribbon实现服务消费者

新建spring-cloud-sample-tutorial-consumer项目

在spring-cloud-sample-tutorial下新建spring-cloud-sample-tutorial-consumer子项目

添加ribbon和eureka依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-ribbon</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

配置applicatioin.properties,注册中心地址

spring.application.name=consumer
server.port=30001
eureka.client.service-url.defaultZone=http://localhost:10001/eureka/,http://localhost:10002/eureka/

编写UserController,添加@LoadBalanced注解,启用Ribbon负载均衡

@Controller
@RequestMapping("user")
public class UserController {

    @Bean
    @LoadBalanced
    RestTemplate initRestTemplate(){
        return new RestTemplate();
    }

    @Autowired
    private RestTemplate restTemplate;

    @RequestMapping("add")
    @ResponseBody
    public String add(String userName, String age){
        return restTemplate.getForEntity("http://PRODUCER/user/add",String.class,userName,age).getBody();
    }
}

编写ConsumerApplication,添加@EnableEurekaClient,启用服务注册

@EnableEurekaClient
@SpringBootApplication
public class ConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class,args);
    }
}

集群部署Producer

为了模拟集群的Producer,在producer项目中新建application-profile1.properties和application-profile2.properties。

application-profile1.properties

spring.application.name=producer
server.port=20001
eureka.client.service-url.defaultZone=http://localhost:10001/eureka/,http://localhost:10002/eureka/

application-profile2.properties

spring.application.name=producer
server.port=20002
eureka.client.service-url.defaultZone=http://localhost:10001/eureka/,http://localhost:10002/eureka/

为了测试负载的效果,我们把被调用服务的端口打出来

@Controller
@RequestMapping("user")
public class UserController {
    private Logger logger = LoggerFactory.getLogger(getClass());

    @Autowired
    private DiscoveryClient client;
    @RequestMapping("add")
    @ResponseBody
    public String addUser(String userName, String age) {
        return "Success from " + client.getLocalServiceInstance().getHost() + ":" + client.getLocalServiceInstance().getPort() ;
    }
}

启动测试

启动注册中心

分别配置Active Profiles为profile1和profile2,启动两次,完成注册中心集群的服务启动。

启动服务提供者

按上面同样的方法,启动服务提供者。

启动服务消费者

服务提供者单机就可以了,正常启动ConsumerApplication即可。

验证

从浏览器输入http://localhost:30001/user/add

再次访问:

可以看到,我们的负载均衡调用服务,已经成功了,默认是按轮训的方式做负载均衡。

总结

本文介绍并完成了使用Spring Cloud Ribbon进行客户端负载均衡的调用。

接下来我们继续介绍怎么使用Spring Cloud进行服务监控。

源码下载

原创文章,转载请注明出处:转载自小马过河 - Spring Cloud实例教程二 Spring Cloud Ribbon 客户端负载均衡


马军伟
关于作者 马军伟
写的不错,支持一下

先给自己定个小目标,日更一新。