美文网首页
@LoadBalanced负载均衡轮询

@LoadBalanced负载均衡轮询

作者: 2B键盘 | 来源:发表于2019-01-14 03:03 被阅读0次

    三个注意事项

    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接口中的端口号不断的在变化,就说明它已经在进行负载均衡轮询机制了

    相关文章

      网友评论

          本文标题:@LoadBalanced负载均衡轮询

          本文链接:https://www.haomeiwen.com/subject/npbrdqtx.html