1.引言
上一篇文章,我们搭建好了nacos管理控制台。本篇文章来体验一下nacos作为服务注册与发现组件,这里我选择了通过springcloud alibaba整合nacos的方式,但是你需要注意,并不是说使用nacos一定要与springcloud alibaba框架整合,事实上,nacos可以与任何服务进行整合,提供了丰富的客户端支持能力,比如
- java
- spring
- springboot
- springcloud
就是说,nacos提供了客户端支持任何java项目,甚至计划提供其它异构服务的的客户端
- node.js
- c++
- shell
- python
控制面板截图

从图上看,还提供了各种应用接入的示例代码,很贴心!对不对。
下面我们创建两个服务,一个服务提供者,一个服务消费者,体验一下nacos作为服务注册发现组件的强大之处。
2.搭建服务提供者
2.1.导入依赖
springcloud alibaba整合使用nacos服务注册发现组件,需要引入依赖
xml
<!--nacos discovery依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2.2.编写配置
yaml
server:
port: ${server.port:8080}
spring:
application:
name: follow-me-springloud-nacos-provider
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
2.3.编写应用
2.3.1.启动类
java
/**
* <p>
* 启动类
* </p>
*
* @author [email protected]
*/
@SpringBootApplication
public class FollowMeNacosProviderApplication {
public static void main(String[] args) {
SpringApplication.run(FollowMeNacosProviderApplication.class, args);
}
}
2.3.2.rest接口
java
/**
* <p>
* 提供者controller
* </p>
*
* @author [email protected]
*/
@RestController
@RequestMapping("provider")
@Slf4j
public class ProviderController {
@Value("${server.port}")
private String serverPort;
@RequestMapping("test")
public String test(){
log.info("当前服务实例接收到请求,端口:{}", serverPort);
return "ProviderController---test.ok.port=" + serverPort;
}
}
2.3.3.启动服务
启动时,分别通过端口:8080、8081启动两个实例,从nacos控制台上,可以看到注册上来的服务提供者。
访问8080:http://127.0.0.1:8080/provider/test
访问8081:http://127.0.0.1:8081/provider/test

3.搭建服务消费者
3.1.导入依赖
xml
<!--nacos discovery依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
3.2.编写配置
yaml
server:
port: 8090
spring:
application:
name: follow-me-springloud-nacos-consumer
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
3.3.编写应用
3.3.1.启动类
java
/**
* <p>
* 启动类
* </p>
*
* @author [email protected]
*/
@SpringBootApplication
public class FollowMeNacosConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(FollowMeNacosConsumerApplication.class, args);
}
}
3.3.2.配置类
使用RestTemplate实现远程调用,且配合Ribbon组件实现负载均衡。
java
/**
* <p>
* 消费者配置类
* </p>
*
* @author [email protected]
*/
@Configuration
public class ConsumerConfiguration {
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
3.3.3.rest接口
需要注意,在RestTemplate远程调用时,是通过服务提供者的服务名称:follow-me-springloud-nacos-provider,即通过nacos服务发现获取服务实例,完成应用处理。
java
/**
* <p>
* 消费者controller
* </p>
*
* @author [email protected]
*/
@RestController
@RequestMapping("consumer")
@Slf4j
public class ConsumerController {
@Autowired
private RestTemplate restTemplate;
@RequestMapping("test")
public String test(){
log.info("准备调用服务提供者api:follow-me-springloud-nacos-provider");
String result = restTemplate.getForObject("http://follow-me-springloud-nacos-provider/provider/test", String.class);
3.3.4.启动服务
启动消费者服务,从nacos管理控制台看到消费者服务已经注册上来。

3.3.5.验证
访问消费者端点:http://127.0.0.1:8090/consumer/test,观察两个provider实例控制台输出,实现了负载均衡,刷新六次,观察是否两个提供者实例控制台各输出3次
消费者控制台

服务提供者8080控制台

服务提供者8081控制台

到此,我们通过springcloud alibaba整合nacos完成了一个有代表意义的服务注册与发现,体验还不错吧!