spring-cloud(4)、客户端负载均衡 — Ribbon

  前面的博客说了注册中心配置中心,忽略掉了客户端和服务端之前的调用,当系统同一个功能有多个服务实例的话,就需要客户端以某种策略去调用服务端,常用的就是以负载均衡的方式调用。所以,下面说的是客户端的负载均衡器。同样,沿用前面的Module,但是为了清晰测试会做一点点改动。

  • 服务端

  服务端这边有一个/home的接口,为了不和配置中心的返回结果重复,故修改返回值,代码如下   @RequestMapping("/home")

  • 客户端
    @RequestMapping("/home")
    public String hello(){
        System.out.println("call home");
        return "test - home";
    }

  首先,客户端需要增加 spring-cloud-starter-ribbon 的依赖,POM文件需要需要增加以下内容

      <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-ribbon</artifactId>
        </dependency>

  然后,因为接口增多,考虑到职能单一原则,故拆解原有的ClientApp,分离出web层,专门处理HTTP接口,也将原来的接口分离出去,并且在ClientApp里面增加RestTemplate,作为调用的客户端

package com.fzhsh.cloud.clent;

@SpringBootApplication
@EnableDiscoveryClient
public class ClientApp {

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

    public static void main(String[] args) {
        SpringApplication.run(ClientApp.class, args);
    }
}

  接着,IndexController主要封装HTTP接口,并且新增了调用Server的接口,RestTemplate的server域名,就是服务端Module在配置文件里面配置的spring.application.name

package com.fzhsh.cloud.clent.web;

@RestController
public class IndexController {

    @Value("${name}")
    private String name;

    @Autowired
    private DiscoveryClient discoveryClient;

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/get")
    public String get(){
        return restTemplate.getForObject("http://server/home", String.class);
    }

    @GetMapping("/show")
    public String getUrl(){
        List<ServiceInstance> list = discoveryClient.getInstances("server");
        if(list != null && !list.isEmpty()) {
            return list.get(0).getUri().toString();
        }
        return "no service info";
    }

    @GetMapping("/value")
    public String getValue(){
        return name;
    }
}

  最后测试,访问http://localhost:8080/get,显示结果,并且服务端Module的控制台打印调用,也可以逻辑增加打印语句,至此,调用成功。这里涉及到负载均衡算法,暂时不谈,后面有时间再细说

test - home

  控制台打印

call home
  • 参考资料

http://cloud.spring.io/spring-cloud-static/Dalston.SR1/#spring-cloud-ribbon

 

posted @ 2017-06-10 22:15  風之殤  阅读(101)  评论(0)    收藏  举报