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

一点点学习,一丝丝进步。不懈怠,才不会被时代所淘汰!

原文地址:https://www.cnblogs.com/fqh2020/p/14732994.html