概要
- 官网地址:Nacos官网和帮助文档
- Nacos安装:Linux安装Nacos1.3.1(还没安装的先看这篇文章安装)
- Nacos主要作用:服务注册与发现、配置管理
- 本篇主要介绍的是服务注册与发现部分
定义
- 各个微服务项目将自己的 spring.application.name、ip 注册到Nacos
- 注册的同时也会把Nacos的注册信息下载一份到本地,这样在调用其他服务接口时,只需要知道对方的name和接口地址即可,不用管具体IP是多少
- 假设中途Nacos挂掉停止服务了,微服务也能继续互相调用接口。这是因为,之前的name+ip的绑定关系已经下载到本地了,具体接口的调用不需要经过Nacos
Spring Cloud Alibaba 实现 Nacos
创建个父工程,引入相关依赖,这边使用的版本如下
Spring Boot | Spring Cloud | Spring Cloud Alibaba |
2.1.13.RELEASE | Greenwich.SR6 | 2.1.3.RELEASE |
父工程 pom.xml 主要部分
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.13.RELEASE</version>
</parent>
<properties>
<spring-cloud-version>Greenwich.SR6</spring-cloud-version>
<spring-cloud-alibaba-version>2.1.3.RELEASE</spring-cloud-alibaba-version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud-version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba-version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!--Spring Boot-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--Spring Cloud-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
创建生产者模块
application.yml
spring:
application:
name: test-provider
cloud:
nacos:
discovery:
server-addr: 192.168.25.131:8848
server:
port: 8010
management:
endpoints:
web:
exposure:
include: "*"
启动类加上 @EnableDiscoveryClient 注解
@SpringBootApplication
@EnableDiscoveryClient
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}
定义接口,打印传递的name参数,并打印出当前端口号
@RestController
public class HelloController {
@Value("${server.port}")
private String port;
@RequestMapping(value = "/echo/{name}", method = RequestMethod.GET)
public String echo(@PathVariable String name){
return "Hello Nacos:" + name + ",Port:" + port;
}
}
运行生产者模块,测试echo接口正常访问就行。然后打开Nacos管理界面,会发现当前服务已注册到Nacos
创建消费者模块
代码和生产者基本一样,这里贴出不一样的点:
application.yml 端口号改成8020
server:
port: 8020
因为要用 RestTemplate 调用接口,所以需要声明Bean
@Configuration
public class ConsumerConf {
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
定义消费者接口,内部具体实现是调用生产者服务接口
@RestController
public class HelloController {
@Autowired
private RestTemplate restTemplate;
@RequestMapping(value = "/echo/{name}", method = RequestMethod.GET)
public String echo(@PathVariable String name){
return restTemplate.getForObject("http://test-provider/echo/" + name,String.class);
}
}
启动消费者模块,查看Nacos管理界面,这时候发现多了个test-consumer,说明消费者也成功注册到Nacos了。
测试
我们的消费者是8020端口,用postman打开http://localhost:8020/echo/zhangsan,正常输出了生产者接口实现的代码。
工程代码已上传网盘,有需要可以下载学习。
链接:https://pan.baidu.com/s/1cKChm5-lVeMtnZL1Ma1B6w
提取码:xnhj