Nacos快速入门(三):Spring Cloud Alibaba Nacos实现服务注册与发现
1、前言
Spring Cloud Alibaba 是阿里巴巴提供的微服务开发一站式解决方案,目前已经加入Spring Cloud项目,跟随Spring Cloud一起维护。集成Nacos需要使用Spring Cloud Alibaba Nacos模块。
拓展阅读:Spring Cloud 加盟重量级成员Spring Cloud Alibaba,打造更符合中国国情的微服务体系
2、启动nacos服务
在上文《Nacos快速入门(二):Nacos集群安装部署》谈的了nacos的集群部署,如果你没有那么多linux机器来搭建集群,可以本地启动非集群模式nacos服务:
- Linux/Unix/Mac:sh startup.sh -m standalone
- Windows:cmd startup.cmd -m standalone
Windows下可以直接双击nacos/bin目录下的startup.cmd
3、搭建服务接入nacos注册中心
搭建spring boot项目nacos-spring-cloud-discovery-example,编辑pom.xml
<properties>
<spring-boot.version>2.0.4.RELEASE</spring-boot.version>
<spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
<spring-cloud-alibaba.version>0.2.2.RELEASE</spring-cloud-alibaba.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<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>org.springframework.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
附录:Spring Cloud Alibaba & Spring Cloud & Spring Boot兼容版本
Spring Cloud Alibaba依赖坐标的groupId
有两个,对应的版本是不一样的
- 项目孵化期间,使用的
groupId
为org.springframework.cloud
,兼容版本:
Spring Boot | Spring Cloud | Spring Cloud Alibaba |
---|---|---|
2.1.x | Greenwich | 0.9.x |
2.0.x | Finchley | 0.2.x |
1.5.x | Edgware | 0.1.x |
1.5.x | Dalston | 0.1.x |
- 项目孵化之后,使用的
groupId
为com.alibaba.cloud
,兼容版本:
Spring Cloud Version | Spring Cloud Alibaba Version | Spring Boot Version |
---|---|---|
-------- | -------- | -------- |
Spring Cloud Greenwich | 2.1.x.RELEASE | 2.1.x.RELEASE |
Spring Cloud Finchley | 2.0.x.RELEASE | 2.0.x.RELEASE |
Spring Cloud Edgware | 1.5.x.RELEASE | 1.5.x.RELEASE |
3.1、服务创建者
第一步: 在nacos-spring-cloud-discovery-example下新建mavem模块nacos-spring-cloud-provider-example,编辑pom.xml,加入nacos服务注册发现模块依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
第二步: 创建提供者应用主类
@SpringBootApplication
@EnableDiscoveryClient
public class NacosProviderApplication {
public static void main(String[] args) {
SpringApplication.run(NacosProviderApplication.class, args);
}
@Value("${server.port}")
private String port ;
@RestController
class EchoController {
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String hello() {
// 返回服务端口
return "service provider,port:" + port;
}
}
}
第三步: 在application.properties
中配置应用名称和nacos注册中心地址
server.port=8080
spring.application.name=service-provider
# nacos注册中心地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
第四步: 我们启动两个服务实例,启动第一个实例后,我们修改server.port=8081,然后再启动一个实例
如果不想修改配置,可以在启动参数中添加
-Dserver.port=8081
参数来启动
登录nacos控制台,查看服务列表:
进入服务详情:
3.2、服务消费者
第一步: 在nacos-spring-cloud-discovery-example下新建mavem模块nacos-spring-cloud-consumer-example,编辑pom.xml,加入nacos服务注册发现模块依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
第二步: 创建消费者应用主类
@SpringBootApplication
@EnableDiscoveryClient
public class NacosConsumerApplication {
@LoadBalanced
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(NacosConsumerApplication.class, args);
}
@RestController
public class TestController {
private final RestTemplate restTemplate;
@Autowired
public TestController(RestTemplate restTemplate) {this.restTemplate = restTemplate;}
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String hello() {
// 调用服务提供者接口
return restTemplate.getForObject("http://service-provider/hello", String.class);
}
}
第三步: 在application.properties
中配置应用名称和nacos注册中心地址
server.port=8090
spring.application.name=service-consumer
# nacos注册中心地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
第四步: 启动服务,查看注册中心,消费者也注册上来了
到此,服务已经全部搭建好了,完整项目结构:
4、测试
消费者调用提供者接口测试
访问消费者接口:http://127.0.0.1:8090/hello,多次访问,调用的服务提供者实例是不同的
服务下线测试
把8081端口的服务提供者下线,再次请求接口,只会调用8080端口服务提供者
nacos这里做的是不很友好,服务下线成功与否控制台界面看不出来,相比之下eureka会友好些。