服务调用
服务发现

如何获取到提供方的 协议+ip+端口 ?
硬编码方式,不够灵活,带来配置困难,无法应对ip地址变化的问题。

基础案例
- 下载
- 解压
- 修改配置
nacos.core.auth.server.identity.key=nacos
nacos.core.auth.server.identity.value=nacosnacos.core.auth.plugin.nacos.token.secret.key=6YeN5bqG5aSP5aSp55yf55qE5YeJ5b+r77yM5Y+q5pyJNDDluqbvvIHlpKflrrbpg73mmK/nhp/kurrjgILng63vvIHvvIHvvIHph43luoblpI/lpKnnnJ/nmoTlh4nlv6vvvIzlj6rmnIk0MOW6pu+8geWkp+WutumDveaYr+eGn+S6uuOAgueDre+8ge+8ge+8gQ==
-
启动
- bin,打开cmd
- startup.cmd -m standalone
-
- 初始化密码,nacos/nacos
- 登录
新建提供方
-
新建项目(spring-boot) http://start.aliyun.com

-
提供可以被调用的接口
-
集成nacos
spring: application: name: user #服务名 cloud: nacos: discovery: server-addr: 127.0.0.1:8848 #nacos注册中心地址 username: nacos password: nacos server: port: 9001 -
启动,测试
新建调用方
- 创建项目同提供方
- 编写服务发现和调用的代码
-
声明RestTemplate
-
注入DiscoveryClient和RestTemplate,调用

-
负载均衡

spring-cloud-loadbalancer
-
调用方添加依赖
<spring-cloud.version>2025.0.3</spring-cloud.version> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-loadbalancer</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> -
调用方改写代码

-
提供方定义多环境配置文件

-
打包提供者,mvn clean package (跳过测试)

-
控制台启动3个实例 java -jar .\user-0.0.1-SNAPSHOT.jar --spring.profiles.active=config0
-
发送请求,测试结果
服务调用
声明式服务调用 openfeign
- 加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>


openfeign实现原理
-
最核心技术: 动态代理 + 反射
-
启动时包扫描,扫描到所有的feignClient
-
动态代理,生成实现类实现接口
- 实现接口,需要用反射获取到响应的信息,实现服务调用
-
创建代理类的实例,注入到spring的容器中


评论