@LoadBalanced负载均衡轮询

2019-01-14  本文已影响0人  2B键盘

三个注意事项

1.记得自己写一个启动类,我这边就不写了。

2.还有就是本文的所有类必须和启动类在同一个包下,不然需要在启动类配置@ComponentScan注解来手动配置扫描的包。

3.在这边的负载均衡是本地负载均衡

使用@LoadBalanced进行负载均衡轮询

首先创建一个eureka-client项目,取名为server-hello!
注意:这是个client项目

第二步:在之前的client-hello中创建一个controller类,取名为OrderController
以下是我的代码


package com.keyboard.client;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author 2B键盘
 * @version 1.0.0
 * @date 2019/1/8 1:49
 * @descripting TODO
 */
@RestController
public class OrderController {

    @Value("${server.port}")
    String port;
    
    @RequestMapping("/order")
    public String order(){
        return "我是ClientHello服务的order接口,来自"+port+"端口";
    }

}

上面完成后,再在server-hello中也创建一个controller取名为TemplateController
以下是我的代码


package com.keyboard.app;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class TemplateController {
    /**
     * RestTemplate是为了远程调用使用的
     * 大家应该都知道,我们如果使用java获取一个url的返回信息
     * 我们一般都会使用HttpClient来进行调用,RestTemplate的底层就是HttpClient
     */
    @Autowired
    private RestTemplate restTemplate;
    
    @RequestMapping("/transfer")
    public String templateTransfer() {
        //url别名,这边的client-hello就是注册中心的注册别名
        //配置在yml文件的spring-application-name下
        String url = "http://client-hello/order";
        return "transfer:" + restTemplate.getForObject(url,String.class);
    }
    
}

如果运行以上代码你会发现会启动报错,Bean注入失败!
因为springcloud默认是没有注入RestTemplate的Bean的,所以你需要自己手动配置一下Bean
配置方法参考以下代码


package com.keyboard.app;

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class BeanConfig {

    @Bean
    //此注解表示开启负载均衡器
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
    
}

最后再运行会然后调用transfer接口会发现已经调用成功了。
但是细心的朋友会发现,只有一个client服务谈何负载均衡?

这边的话大家可以修改一下client-hello的端口号再启动一个,然后再调用transfer就会发现它调用的order接口中的端口号不断的在变化,就说明它已经在进行负载均衡轮询机制了

上一篇 下一篇

猜你喜欢

热点阅读