Nacos+SpringCloud服务注册与发现
我们在学习集成一些技术时,完全按照文档一步一步来,可是到最后还是可能会出错
往往是因为 版本 不兼容的 问题,我们先看 nacos client 和 SpringCloud集成 对应的版本
注意:版本 2.1.x.RELEASE 对应的是 Spring Boot 2.1.x 版本。版本 2.0.x.RELEASE 对应的是 Spring Boot 2.0.x 版本,版本 1.5.x.RELEASE 对应的是 Spring Boot 1.5.x 版本。
选择好一个合适的版本
服务提供者 nacos-server
引入依赖
SpringBoot-Web和SpringCloudAlibaba-Nacos-Discovery
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.2.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
</dependencies>
在bootstrap.properties中配置
server.port=8070
# 服务名
spring.application.name=nacos-provider
# 服务注册发现的 Nacos Server 地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
启动类 上 启用注解
@SpringBootApplication
@EnableDiscoveryClient // 启用 服务注册发现 客户端
public class NacosProviderApplication {
public static void main(String[] args) {
SpringApplication.run(NacosProviderApplication.class, args);
}
// 提供一个 controller http接口
// http://localhost:8070/echo/xxx
@RestController
class EchoController {
@RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)
public String echo(@PathVariable String string) {
return "Hello Nacos Discovery " + string;
}
}
}
完成后,启动项目,去nacos看一下
可以看到服务已经注册到了nacos server上了
服务消费者 nacos-consumer
引入依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.2.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
</dependencies>
配置bootstrap.properties文件
server.port=8080
# 服务名称
spring.application.name=nacos-consumer
# nacos 服务地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
启动类上 使用 启用注解
@SpringBootApplication
@EnableDiscoveryClient // 启用 服务注册发现 客户端
public class NacosConsumerApplication {
@Bean
@LoadBalanced // ribbon 负载均衡
public RestTemplate restTemplate() {
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(NacosConsumerApplication.class, args);
}
@RestController
class TestController {
@Autowired
public RestTemplate restTemplate;
@RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
public String echo(@PathVariable String str) {
// 远程 调用 nacos-provider 的 服务接口
return restTemplate.getForObject("http://nacos-provider/echo/" + str, String.class);
}
}
}
启动项目,nacos 看一下
两个服务都有了
访问消费者提供的http接口
http://localhost:8080/echo/2021
一个简单的服务注册发现,并使用消费者 调用 就实现了
扩展-Nacos命名空间
假如 要注册的 服务 不在 public 空间
在项目的配置文件 bootstrap.properties 中:
# 配置 nacos 服务注册 的 命名空间
spring.cloud.nacos.discovery.namespace=14dbb2cf-e01a-426e-8c28-f9d384371962
启动 项目 重新去 nacos server里查看下
# 配置 nacos 服务注册 的 命名空间
spring.cloud.nacos.discovery.namespace=14dbb2cf-e01a-426e-8c28-f9d384371962