三个注意事项
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接口中的端口号不断的在变化,就说明它已经在进行负载均衡轮询机制了
网友评论