nacos服务发现注册
服务发现数据模型
-
命名空间(Namespace)
用于进行租户粒度的配置隔离,命名空间不仅适用于nacos的配置管理,同样适用于服务发现。Namespace 的常 用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。
-
服务
提供给客户端的软件功能,通过预定义接口网络访问。
-
服务名
服务提供的标识,通过该标识可以唯一确定其指代的服务。
-
实例
提供一个或多个服务的具有可访问网络地址(IP:Port)的进程,启动一个服务,就产生了一个服务实例
-
元信息
Nacos数据(如配置和服务)描述信息,如服务版本、权重、容灾策略、负载均衡策略、鉴权配置、各种自定义标签 (label),从作用范围来看,分为服务级别的元信息、集群的元信息及实例的元信息。
-
集群
服务实例的集合,服务实例组成一个默认集群, 集群可以被进一步按需求划分,划分的单位可以是虚拟集群,相同集群下的实例才能相互感知。
SpringCloud+Nacos+Feign
父工程nacos-discovery
依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.13.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>nacos-discovery</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>nacos-discovery</name>
<description>nacos-discovery</description>
<properties>
<java.version>1.8</java.version>
</properties>
<modules>
<module>provider</module>
<module>consumer</module>
</modules>
<packaging>pom</packaging>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--nacos-discovery-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.1.3.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-openfeign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.1.3.RELEASE</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
服务提供者
依赖
直接用父工程里的就行
application.yml
这里不用读取nacos配置文件,所以就不用bootstrap.yml
server:
port: 56010
spring:
application:
name: provider
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
启动类
启动类注解!
@SpringBootApplication
@EnableDiscoveryClient//服务发信
@EnableFeignClients//feign
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}
服务
@RestController
public class ProviderController {
@GetMapping("service")
public String service() {
return "provider invoke";
}
}
服务消费者
依赖
直接用父工程中就行
application.yml
server:
port: 56011
spring:
application:
name: consumer
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
启动类
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
重点:服务提供的接口
@FeignClient(value = "provider")//value:服务提供方服务名(提供方yml选中spring.application.name)
public interface ProviderClient {
@GetMapping("service")
public String service();
}
调用
@RestController
public class ConsumerController {
@Autowired
private ProviderClient providerClient;
@GetMapping("service")
public String service() {
String providerResult = providerClient.service();
return "consumer invoke==>" + providerResult;
}
}
测试
- 先启动nacos,再启动服务提供者和消费者,在nacos界面服务列表中可以看到
-
访问消费者接口测试
测试负载均衡
修该服务提供者yml配置,动态获取端口
server:
port: ${port:56010} # 启动端口,根据启动时传参动态配置端口,模拟多个服务提供,传了参用传的,不穿用56010
spring:
application:
name: provider
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
#namespace: 2d108db1-4b7b-4175-8012-be00d735ea8a # 不配置此项,默认注册到public里
#cluster-name: DEFAULT # 不配置此项,默认default
idea传参 -Dporg=xxx
复制一个providerApplication,修该vm options参数如下,然后启动
nacos后台看到provider有两个实例了
测试负载均衡
在服务提供方代码中加入标记日志语句,浏览器访问:http://localhost:56011/service,多次请求
可以看到ProvidrApplication和ProvidrApplication2中循环打印,说明默认轮询的负载均衡策略
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
2021-01-25 MQ概述
2021-01-25 缓存穿透,击穿,雪崩
2021-01-25 Redis操作数据命令