SpringBoot_Nacos
整个思路分为两个模块:服务的提供者和服务的消费者。
服务提供者
第一步
- pom.xml 文件中引入对应的配置
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>2020.0.4</spring-cloud.version>
<spring-cloud-alibaba.version>2021.1</spring-cloud-alibaba.version>
</properties>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependencyManagement>
<dependencies>
<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>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
注意:如果版本不对应,项目无法启动。
这里的 SpringBoot 对应的版本是 :2.5.7。
对应的 SpringCloud 版本是:2020.0.4。
对应的 SpringCloudAlibaba 版本是:2021.1。
第二步
- 配置文件添加配置
server:
port: 8081
servlet:
context-path: /provider
# 服务名,也是注册到 nacos 中的服务名
spring:
application:
name: nacos-provider
# nacos 地址
cloud:
nacos:
discovery:
server-addr: xxxx:8848
第三步
Controller
层正常定义接口
@RestController
public class ProviderController {
/**
* 定义一个方法,对外提供
* @return
*/
@GetMapping("/hello")
public String getHello() {
return "Hello-Provider";
}
}
注意:
在 SpringBoot 2.5.7 这个版本中,服务提供者启动类上的注解 @EnableDiscoveryClient 可以不用加。
消费者
第一步
- pom.xml 文件里添加对应的配置
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>2020.0.4</spring-cloud.version>
<spring-cloud-alibaba.version>2021.1</spring-cloud-alibaba.version>
</properties>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<!--使用 okhttp 客户端 -->
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-okhttp</artifactId>
</dependency>
<dependencyManagement>
<dependencies>
<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>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
注意:
这里的 SpringBoot 对应的版本是 :2.5.7。
对应的 SpringCloud 版本是:2020.0.4。
对应的 SpringCloudAlibaba 版本是:2021.1。
如果引入包:spring-cloud-starter-openfeign 则需要在引入包:spring-cloud-starter-loadbalancer。
第二步
- 配置文件添加配置
# 服务名,也是注册到 nacos 中的服务名
spring:
application:
name: nacos-consumer
# nacos 地址
cloud:
nacos:
discovery:
server-addr: xxxx:8848
# 服务提供者地址
provide:
url: nacos-provider
# feign 配置
feign:
okhttp:
enabled: true # 使用 okhttp 请求
httpclient:
max-connections: 200 # 最大链接数
max-connections-per-route: 50 # 单个路径最大链接数
第三步
- 定义消费者接口
@Component
// 服务提供者的地址,对应配置文件的地址配置。
@FeignClient(name = "${spring.provide.url}")
// 这个是可选择项,如果对应服务提供者的接口,都加了统一路径 /provider 那么这里就需要加,否则会 404 错误。
@RequestMapping("/provider")
public interface ConsumerClient {
// 这个路径的地址 /hello 和服务提供者的路径地址要一致,否则会找不到对应的接口。
@GetMapping("/hello")
String getHello();
}
第四步
Controller
层直接调用
@RestController
public class ConsumerController {
@Resource
private ConsumerClient consumerClient;
// 这个地址就可以自定义了
@GetMapping("/getHello")
public String getHello() {
return consumerClient.getHello();
}
}
注意:
在 SpringBoot 2.5.7 这个版本中,服务消费者启动类上的注解 @EnableDiscoveryClient 可以不用加。
消费者服务启动类上需要添加 @EnableFeignClients 注解,来启用 openfeign 服务。
使用 openfeign 做接口的调用,那么对应的负载均衡是默认的,并不需要额外在接口上添加 @LoadBalancerClient 注解。