SpringBoot_Nacos


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 注解。


文章作者: L Q
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 L Q !
  目录