目标: 建立多个微服务,并实现微服务之间的调用。
技术点
- 微服务间调用 Feign
- 微服务注册/配置中心 Nacos
步骤
1.1 引入feign
@FeignClient(name = "orm-demo")
public interface ProjectClient {
/**
* 测试远程调用
*
*/
@GetMapping("/project/")
PageInfo<Object> getProjectList();
}
feign:
client:
config:
default:
connectTimeout: 5000
readTimeout: 5000
loggerLevel: basic
然后client 就可以直接使用了。封装的比较好。
1.2 引入nacos
在Spring Cloud里面无缝对接。
bootstrap.properties里面定义
##### nacos(注册中心和配置中心)地址
spring.cloud.nacos.server-addr=localhost:8848
#spring.cloud.nacos.username=nacos
#spring.cloud.nacos.password=nacos
spring.cloud.nacos.config.file-extension=yml
spring.cloud.nacos.config.shared-dataids=common.yml
spring.cloud.nacos.config.refreshable-dataids=common.yml
使用@EnableDiscoveryClient注解
/**
* @author zlt
*/
@EnableDiscoveryClient
@SpringBootApplication
public class CodeGeneratorApp {
public static void main(String[] args) {
SpringApplication.run(CodeGeneratorApp.class, args);
}
}
加入@LoadBalanced 实现负载均衡。
@EnableDiscoveryClient
public class NacosConsumerApplication {
@LoadBalanced
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(NacosConsumerApplication.class, args);
}
@RestController
public class TestController {
private final RestTemplate restTemplate;
@Autowired
public TestController(RestTemplate restTemplate) {this.restTemplate = restTemplate;}
@RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
public String echo(@PathVariable String str) {
return restTemplate.getForObject("http://service-provider/echo/" + str, String.class);
}
}
}
问题
- 如何实现负载均衡,如何做SpringCloud的性能优化和配置优化,据说要结合Ribben, 具体怎么做后续 研究。