这个要求服务统一注册到注册中心,然后调用的时候就不需要通过ip来调用,直接通过服务名即可。
spring-cloud-starter-alibaba-nacos-discovery
依赖
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> </dependencies>EnableDiscoveryClient
注解
@SpringBootApplication @EnableDiscoveryClient public class ProviderApplication { public static void main(String[] args) { SpringApplication.run(ProviderApplication.class,args); } }application.yaml
配置如下,这里需要指定spring.application.name
spring: application: name: lou-nacos-service-provider cloud: nacos: discovery: server-addr: 127.0.0.1:8848 server: port: 8080@LoadBalanced
。
@Configuration public class ConsumerConfiguration { @Bean @LoadBalanced public RestTemplate restTemplate(){ return new RestTemplate(); } }lou-nacos-service-provider
来访问。
@RestController public class TestController { private final RestTemplate restTemplate; @Autowired public TestController(RestTemplate restTemplate) { this.restTemplate = restTemplate; } @GetMapping("hello/{name}") public String hello(@PathVariable("name") String name) { return restTemplate.getForObject("http://lou-nacos-service-provider/hello/" + name, String.class); } }spring-cloud-starter-openfeign
依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>EnableFeignClients
@SpringBootApplication @EnableDiscoveryClient @EnableFeignClients//启用 public class ConsumerApplication { public static void main(String[] args) { SpringApplication.run(ConsumerApplication.class,args); } }nacos为服务提供了自动的负载均衡,默认使用轮询
的策略。