SpringCloud之Nacos注册中心
上一节中,我们已经搭建完nacos的环境,接下来就是代码中引用它了。
服务提供者
现在我们创建一个springboot项目,这个项目作为服务提供端。这个项目向注册中心提供服务接口,供客户端来调用。
首先,就是pom.xml中添加依赖关系
<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>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.2</version>
<optional>true</optional>
</dependency>
</dependencies>
为了方便,我们在main函数类写一个接口
@EnableDiscoveryClient
@SpringBootApplication
public class TestApplication {
public static void main(String[] args) {
SpringApplication.run(TestApplication.class, args);
}
@Slf4j
@RestController
static class TestController {
@GetMapping("/hello")
public String hello(@RequestParam String name) {
log.info("invoked name = " + name);
return "hello " + name;
}
}
}
注意这个注解@EnableDiscoveryClient。这里就开启了服务注册中心,当项目启动完之后,这个项目就自动的注册到注册中心了。
配置
最关键的就是配置信息
spring.application.name=alibaba-nacos-discovery-server
server.port=8001
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
其中spring.cloud.nacos.discovery.server-addr就是我们刚搭建的nacos环境地址。我们现在可以尝试启动项目,看看nacos界面有没有新的服务注册进来。
启动成功了,界面中也有了新的服务。这个服务就是我们刚创建的服务提供者。
服务消费者
我们要消费这个服务,就要创建服务消费的项目,利用注册中心,来消费里面的服务接口。
还是一样创建一个空的springboot项目,我们在main类中调用服务提供者的接口。
@EnableDiscoveryClient
@SpringBootApplication
public class TestApplication {
public static void main(String[] args) {
SpringApplication.run(TestApplication.class, args);
}
@Slf4j
@RestController
static class TestController {
@Autowired
LoadBalancerClient loadBalancerClient;
@GetMapping("/test")
public String test() {
// 通过spring cloud common中的负载均衡接口选取服务提供节点实现接口调用
ServiceInstance serviceInstance = loadBalancerClient.choose("alibaba-nacos-discovery-server");
String url = serviceInstance.getUri() + "/hello?name=" + "nn";
RestTemplate restTemplate = new RestTemplate();
String result = restTemplate.getForObject(url, String.class);
return "Invoke : " + url + ", return : " + result;
}
}
}
配置信息
spring.application.name=alibaba-nacos-discovery-client-common
server.port=9000
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
注意的地方就是
ServiceInstance serviceInstance = loadBalancerClient.choose("alibaba-nacos-discovery-server");
我们通过服务名称来调用里面的接口。这里就体现出了注册中心在其中的作用了。服务消费者,通过从注册中心获取服务列表,缓存到本地,服务消费者通过本地服务列表来调用服务接口。这样就实现了简单微服务的整个接口调用方向。