• 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

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

  • 相关阅读:
    centos执行sudo 显示command not found的问题
    linux(centos)-command
    关于linux(centos)下浏览器(chrome)打开界面缓慢的一个可能解决办法
    verilog 基本语法
    Date 类 (java.util.Date)
    Objects 类
    发红包案例(普通红包和随机红包)
    接口作为方法的参数和返回值
    接口作为成员变量类型
    类作为成员变量类型
  • 原文地址:https://www.cnblogs.com/fqh2020/p/14732994.html
Copyright © 2020-2023  润新知