springcloud之nacos服務注冊與openFeign服務調用


1.springcloud版本

springboot和springcloud版本必須要對應,可查看如下鏈接

https://start.spring.io/actuator/info

2.nacos的使用

2.1下載nacos

windows系統:https://github.com/alibaba/nacos/releases/download/1.1.4/nacos-server-1.1.4.zip
Linux系統:https://github.com/alibaba/nacos/releases/download/1.1.4/nacos-server-1.1.4.tar.gz

解壓下載好的文件,找到運行文件,啟動就可以了

2.2安裝依賴

父工程,全局依賴管理

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>2.1.1.BUILD-SNAPSHOT</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

微服務注冊中心

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

微服務配置中心(就是把Application.yml的配置放在雲端,Nacos雲端改了以后,項目自動刷新)

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

2.3配置參數

微服務注冊中心

# application.yml
server:
  port: 8081
spring:
  application:
    name: nacos-provider
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
management:
  endpoints:
    web:
      exposure:
        include:*

微服務配置中心

# bootstrap.yml
spring:
  application:
    name: nacos-config
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848

2.4基礎案例

Nacos自帶Ribbon,提供負載均衡能力

服務提供者

@SpringBootApplication
@EnableDiscoveryClient
public class NacosProviderDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(NacosProviderDemoApplication.class, args);
    }

    @RestController
    public class EchoController {
        @GetMapping(value = "/echo/{string}")
        public String echo(@PathVariable String string) {
            return "Hello Nacos Discovery " + string;
        }
    }
}

服務消費者

@SpringBootApplication
@EnableDiscoveryClient
public class NacosConsumerApp {

    @RestController
    public class NacosController{

        @Autowired
        private RestTemplate restTemplate;

        @GetMapping("/echo/app-name")
        public String echoAppName(){
        return restTemplate.getForObject("服務提供者的服務名稱");
        }

    }

    // 服務調用
    @Bean
    @LoadBalanced 
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

    public static void main(String[] args) {
        SpringApplication.run(NacosConsumerApp.class,args);
    }
}

2.5服務分類

  • namespace(命名空間): 用於區分不同的部署環境,例如正式,測試…
  • groupId(分組): 服務分組
  • dataId(服務ID): 具體的服務

指定分組

spring:
  cloud:
    nacos:
      config:
        namespace: b3404bc0-d7dc-4855-b519-570ed34b62d7
    group: DEVELOP_GROUP

2.6持久化配置

  • 1.安裝數據庫,版本要求:5.6.5+
  • 2.初始化mysql數據庫,數據庫初始化文件:nacos-mysql.sql
  • 3.修改conf/application.properties文件,增加支持mysql數據源配置(目前只支持mysql),添加mysql數據源的url、用戶名和密碼。
spring.datasource.platform=mysql

db.num=1
db.url.0=jdbc:mysql://11.162.196.16:3306/nacos_devtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=nacos_devtest
db.password=youdontknow

2.7集群配置

在nacos的解壓目錄nacos/的conf目錄下,有配置文件cluster.conf,請每行配置成ip:port。(請配置3個或3個以上節點)

# ip:port
200.8.9.16:8848
200.8.9.17:8848
200.8.9.18:8848

 3.服務調用

3.1openFeign

openfeign對feign進行進一步的封裝,添加了springmvc的一些功能,可以用作服務調用。

3.2安裝依賴

首先在父工程配置springcloud依賴管理

            <!--Spring Cloud-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>2020.0.2</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

微服務中服務調用依賴

        <!--服務調用-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
     <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-loadbalancer</artifactId>
     </dependency>

3.3基本使用

1)在調用端啟動類添加注解

@EnableFeignClients

2)在調用端創建interface,使用注解指定調用服務名稱,定義調用方法的路徑

@FeignClient注解用於指定從哪個服務中調用功能,名稱與被調用的服務名保持一致。

@GetMapping注解用於對被調用的微服務進行地址映射。

@PathVariable注解一定要指定參數名稱,否則出錯。

@Component注解防止在其他位置注入VodClient時報錯。

@Component
@FeignClient("xueyuan-vidservice")
public interface VodClient {
    //定義調用方法的路徑
    @DeleteMapping("/vidservice/vod/{videoId}")
    public R deleteAliyunVideo(@PathVariable("videoId") String videoId);
}

3)通過@Autowired注解,注入VodClient接口,然后調用里面的方法

3.4 openFeign超時控制

openFeign默認調用時間是1秒鍾,如果調用超過1秒時,就會報超時異常,我們可以通過配置yml超時時間來控制超時時長

#設置feign客戶端超時時間(OpenFeign默認支持ribbon)
ribbon:
  #指的是建立連接后從服務器讀取到可用資源所用的時間
  ReadTimeout: 5000
  #指的是建立連接所用的時間,適用於網絡狀況正常的情況下, 兩端連接所用的時間
  ConnectTimeout: 5000

3.5 openFeign日志打印

1) 配置日志打印類

package com.gh.config;

import feign.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @Author Eric
 * @Date 2021/7/31 13:01
 * @Version 1.0
 */
@Configuration
public class FeignConfig {
    @Bean
    Logger.Level feignLoggerLevel(){
        return Logger.Level.FULL;
    }
}

2) 在yml配置日志打印級別已經掃描接口

logging:
  level:
    # feign日志以 debug 級別監控
    com.gh.service.PaymentFeignService: debug

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM