IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> http客户端Feign -> 正文阅读

[网络协议]http客户端Feign

目录

Feign注册使用

Feign日志配置

?Feign性能优化

Feign最佳实践

怎样优化FeignClient与消费者服务之间的调用?

?因为FeignClient不在订单服务中了,所以是扫描不到它的,问怎样扫描?


?

Feign注册使用

Feign作用:用来代替RestTemplate,来调用远程服务的;

Fegin内部集成了负载均衡ribbon

使用步骤?

1.先在主启动类中加@EnableFeignClients,声明开启Feign,可以调用其他服务

@EnableFeignClients(clients = UserClient.class,defaultConfiguration = DefaultFeignConfiguration.class)//声明feign自动装配开关:开

2.pom.xml+openFeign依赖,因为自己使用Feign调用远程服务

  <!--feign客户端依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

?3.创建声明一个Feign客户端,里面是调用远程服务的方法(需要声明被调用的服务是哪一个)


@FeignClient(name="userservice")//声明式Feign客户端,需要声明服务名
public interface UserClient {

    /**
     * 这里猜测是调用了用户服务的底层接口
     * 因为订单服务可以请求到用户服务
     * @param id
     * @return
     */
    @GetMapping("/user/{id}")
    User findById(@PathVariable("id") Long id);
}


Feign日志配置

?第一种:在yaml中进行日志配置

feign: # 配置日志
  client:
    config:
      default:
        loggerLevel: FULL # 日志级别,basic:就是基本的请求以及想要信息

第二种:使用java代码进行日志配置:

创建一个类,@Bean定义,并给@EnableFeignClients注解声明或者是给@FeignClient注解声明,前者是声明全局,后者是某个服务

package cn.itcast.order.config;

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

/**
 * @author diao 2022/5/8
 */
public class DefaultFeignConfiguration {
    /**
     * 设置Feign日志级别
     * @return Logger.Level.BASIC日志级别
     */
    @Bean
    public Logger.Level logLevel(){
        return Logger.Level.BASIC;
    }
}

?在主启动类中的@EnableFeignClients()声明默认的Configuration


@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
@EnableFeignClients(defaultConfiguration = DefaultFeignConfiguration.class)//声明feign自动装配开关:开
public class OrderApplication {

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

    /**
     * 创建RestTemplate并且注入Spring容器
     * @return
     */
    @Bean
    @LoadBalanced//负载均衡
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

    /**
     * 负载均衡策略配置
     * @return
     */
//    @Bean
//    public IRule randomRule(){
//        return new RandomRule();
//    }
//

}

*:可以发现在yaml中配置日志配置,优先级大于java代码配置?

?


?Feign性能优化

Feign客户端实现默认是URLConnection,是不支持连接池的,我们可以在yaml配置文件中修改Feign客户端实现——>HttpClient:


feign: # 配置日志
  httpclient:
    enabled: true #支持HttpClient开关
    max-connections: 200 #最大连接数
    max-connections-per-route: 50 #单个路径的对哒连接数

如果要配置Feign日志(针对某个服务,还是全局看你自己咯),这边建议自定义一个bean返回日志,然后再在@EnableFeignClient还是@EnableClient中配置默认配置类即可;


Feign最佳实践

第一种:?

紧耦合,因为都继承为一个父接口,它一改,他的子类都得动;

?第二种:

将FeignClient抽取出来,并把这个接口有关的pojo和Feign配置都放在一个单独的模块中,提供给消费者使用:(之前我们是一个消费者调用一个FeignClient,如果是多个消费者调用同一个提供者服务,那么FeignClient就要被重复启动多次)

作用:放在单独一个模块有利于减少代码冗余,任务减轻;

总结区别:

一个是服务者的controller和被调用的FeignClient用同一个接口,另外一个是Feign有关的全部放在一个模块中给服务者调用->方便其他的服务调用;?

?

怎样优化FeignClient与消费者服务之间的调用?

我们演示第二种,将FeignClient与Pojo和Feign的配置全部放在一个全新的Feign服务中,有利于其他服务的调用;

1.这是调用Feign-API模块前,订单服务的样子

2.创建Feign模块

?将服务者需要调用的Feign客户端放在Feign模块中,还有Feign配置及其pojo


/**
 * @author diao 2022/5/8
 */
@FeignClient(name="userservice")//声明式Feign客户端,需要声明服务名
public interface UserClient {

    /**
     * 这里猜测是调用了用户服务的底层接口
     * 因为订单服务可以请求到用户服务
     * @param id
     * @return
     */
    @GetMapping("/user/{id}")
    User findById(@PathVariable("id") Long id);
}


/**
 * @author diao 2022/5/8
 */
public class DefaultFeignConfiguration {
    /**
     * 设置Feign日志级别
     * @return Logger.Level.BASIC日志级别
     */
    @Bean
    public Logger.Level logLevel(){
        return Logger.Level.BASIC;
    }
}
package cn.itcast.feign.pojo;

import lombok.Data;

@Data
public class User {
    private Long id;
    private String username;
    private String address;
}

3.不要忘记加入Feign客户端依赖?

   <!--feign客户端依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

?4.最后再在订单服务(消费者服务中)import即可,并且在pom.xml中导入Feign-api模块jar包

  <!--引入feign的同一api-->
        <dependency>
            <groupId>cn.itcast.demo</groupId>
            <artifactId>feign-api</artifactId>
            <version>1.0</version>
        </dependency>

?因为FeignClient不在订单服务中了,所以是扫描不到它的,问怎样扫描?

?

?

?

?

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-05-09 13:06:47  更:2022-05-09 13:06:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 7:51:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码