Spring Cloud 学习 - Nacos服务注册与发现
Spring Cloud 学习 - Nacos服务注册与发现
Nacos,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
本文将介绍Nacos作为服务注册中心与Spring Cloud的整合实例。关于Nacos的安装请参考 Nacos之单机版安装 或 Nacos高可用集群搭建+MySQL持久化
Nacos的详细介绍可以查阅官网 https://nacos.io/zh-cn/index.html,这里不多介绍~~
主要版本
本文使用的相关技术主要依赖版本如下:
Spring Cloud | Spring Cloud Alibaba | Spring Boot |
---|---|---|
Hoxton.SR3 | 2.2.0.RELEASE | 2.2.5.RELEASE |
好了,下边开始进入代码整合环节~~
服务提供者
首先我们新建一个服务提供者spring-cloud-alibaba-provider
:
添加依赖
<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>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
编写配置
编写yml配置把服务注册到nacos注册中心
server:
port: 8801
spring:
application:
name: cloud-alibaba-provider
cloud:
nacos:
server-addr: localhost:8848 # 默认localhost:8848,一致可不写
# server-addr: 192.168.0.14:8800
# 下边这个是devtools热部署插件端口号,为了避免本地开的多个服务端口冲突,所以这里指定一下
devtools:
livereload:
port: 35735
启用注解
@SpringBootApplication
@EnableDiscoveryClient // 启用服务发现功能
public class AliProviderApplication {
public static void main(String[] args) {
SpringApplication.run(AliProviderApplication.class, args);
}
}
编写接口
我们对外提供一个接口,简单的输出Hello, ${name}!
@RestController
public class HelloController {
@Value("${server.port}")
private String serverPort;
@GetMapping("/{name}")
public String hello(@PathVariable String name){
return "Hello, " + name +"!\nFrom:" + serverPort;
}
}
至此,服务提供者基本编好了。
下边编写一个服务消费者
服务消费者
新建一个服务消费者spring-cloud-alibaba-consumer
相关依赖
<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>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
编写配置
server:
port: 8080
spring:
application:
name: cloud-alibaba-consumer
cloud:
nacos:
server-addr: localhost:8848
启用注解
@SpringBootApplication
@EnableDiscoveryClient
public class AliConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(AliConsumerApplication.class, args);
}
/** * 通过查看nacos依赖我们发现已经集成了ribbon,所以我们可以直接使用`@LoadBalanced`注解来开启负载均衡 * @return */
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
这里我们通过查看spring-cloud-starter-alibaba-nacos-discovery
依赖,发现已经集成了Ribbon,那么应该就可以使用Ribbon的负载均衡了。
编写接口
@RestController
@RequiredArgsConstructor
public class HelloController {
private final RestTemplate restTemplate;
@GetMapping("/consumer/{name}")
public String hello(@PathVariable String name) {
return restTemplate.getForObject("http://cloud-alibaba-provider/" + name, String.class);
}
}
进行测试
启动Nacos
启动服务注册中心Nacos
启动服务提供者
启动2个服务提供者spring-cloud-alibaba-provider
,端口分别为8081和8082:
多个启动可以在控制台指定端口进行启动,也可以在IDEA中复制启动配置,修改端口启动。
命令行启动方式如下:
java -jar yourapp.jar --server.port=8080
启动服务消费者
启动服务消费者spring-cloud-alibaba-consumer
访问测试
使用curl命令行调用结果:
可以看到,使用了Ribbon的默认负载均衡策略。
以上便是Spring Cloud使用Nacos服务注册发现与发现的简单应用。
因个人能力有限,文中如有不足或错误之处,欢迎指正,感谢~~
还没有评论,来说两句吧...