首页 > 其他分享 >基于Feign远程调用

基于Feign远程调用

时间:2023-10-30 09:23:12浏览次数:39  
标签:Feign 调用 itcast cn public import order 远程

Feign的介绍

  Feign是一个声明式的http客户端,官方地址:Spring Cloud OpenFeign

 

定义和使用Feign

1.引入依赖

        <!-- feign 客户端依赖(声明式服务调用) -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

2.在order-service的启动类添加注解开始Feign的功能

@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication //配置类
@EnableFeignClients(clients = {UserClient.class})// 指定需要加载的Client接口
public class OrderApplication {

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

}

3.编写Feign客户端:

/**
 * Feign可以把Rest的请求进行隐藏,伪装成类似Spring MVC的Controller一样。不用再自己拼接url,拼接参数等等操作,一切都交给Feign去做
 */
@FeignClient("userserver")
public interface UserClient {
    @GetMapping("/user/{id}")
    User findById(@PathVariable("id") Long id);
}

主要基于SpringMVC的注解来声明远程调用的信息,

  服务名称:userserver

  请求方式:GET

  请求路径:/user/{id}

  请求参数:Long id

  返回值类型:User

4.server调用

package cn.itcast.order.service;

import cn.itcast.order.clients.UserClient;
import cn.itcast.order.mapper.OrderMapper;
import cn.itcast.order.pojo.Order;
import cn.itcast.order.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

@Service
public class OrderService {

    @Autowired
    private OrderMapper orderMapper;


    @Autowired
    private UserClient userClient;

    //基于Feign实现远程调用
    public Order queryOrderById(Long orderId) {
        // 1.查询订单
        Order order = orderMapper.findById(orderId);
        //2.用Feign远程调用
        User byId = userClient.findById(order.getUserId());
        //3.封装user到Order
        order.setUser(byId);
        // 4.返回
        return order;
    }
}

 

 

自定义Feign的配置

方式一:配置文件方式

1.全局生效

feign: #Feign日志 全局
  client:
    config:
      default: #局部 切换服务名称
        loggerLevel: FULL

2.局部生效

feign: #Feign日志 全局
  client:
    config:
      userserver: #局部 切换服务名称
        loggerLevel: FULL

 

方式二:java代码方式,需要先声明一个Bean:(创建包config)

public class DefaultFeignConfiguration {
    @Bean //配置日志
    public Logger.Level feignLogLevel(){
        return Logger.Level.BASIC;
    }    
}

全局配置

 局部配置

 

Feign优化性能

Feign添加HttpClient的支持

引入依赖:

        <!-- 引入HttpClient依赖 -->
        <dependency>
            <groupId>io.github.openfeign</groupId>
            <artifactId>feign-httpclient</artifactId>
        </dependency>

配置连接池:

feign: # Feign性能优化
  httpclient:
    enabled: true # 支持HttpClient的开关
    max-connections: 200 #最大连接数
    max-connections-per-route: 50 #单个路径的最大连接数

 

标签:Feign,调用,itcast,cn,public,import,order,远程
From: https://www.cnblogs.com/qihaokuan/p/17796440.html

相关文章

  • SQL Server 存储过程的应用及 LabVIEW 调用
    存储过程应用及LabVIEW调用1、存储过程就是一条或多条SQL语句的集合,可以称之为批处理文件; 2、部分优点:a、加快运行速度;b、可封装复杂操作;c、实现模块化程序设计,统一数据库访问接口,提高可维护性;d、增加代码安全性; 3、部分缺点:a、不同数据库语法......
  • API商品数据接口调用实战:爬虫与数据获取
    一、引言在当今的数字化世界中,API(应用程序接口)已经成为获取数据的主要方式。通过调用API,我们可以轻松地获取到各种商品数据,为数据分析、商业决策等提供支持。本文将介绍如何使用爬虫技术调用API商品数据接口,获取并分析商品数据。二、API与商品数据API是一种定义了应用程序之间进行......
  • Revit二次开发之通过命令ID调用Revit自有命令
    参考一:PostableCommandEnumeration//这里RevitCommandId是Revit命令的Id,你可以这样来获得命令的IdRevitCommandIdid=RevitCommandId.LookupPostableCommandId(PostableCommand.TrimOrExtendToCorner);if(uiApp.CanPostCommand(id))......
  • 如何使用scp从远程复制文件夹到本地?
    内容来自DOChttps://q.houxu6.top/?s=HowdoIcopyafolderfromremotetolocalusingscp?如何使用scp从远程复制文件夹到本地主机?我使用ssh登录到我的服务器。然后,我想要将远程文件夹foo复制到本地/home/user/Desktop。我该如何实现这一点?[email protected]......
  • win10 openocd通过vscode远程调试stm32的uboot--Apple的学习笔记
    一,前言我在uboot支持的cortex-M4内核启动流程分析--Apple的学习笔记中就说过了,我计划要单步调试uboot,但是我只有stlink,所以要基于openocd的gdb来调试,所以就做了尝试,花费约2天时间,虽然做了些无用功,专门还装了ubuntu18.04,且基于ubuntu还安装了openocd这些其实都无用的,但是就是这些过......
  • 【C++】继承 ⑧ ( 继承 + 组合 模式的类对象 构造函数 和 析构函数 调用规则 )
    文章目录一、继承+组合模式的类对象构造函数和析构函数调用规则1、场景说明2、调用规则二、完整代码示例分析1、代码分析2、代码示例一、继承+组合模式的类对象构造函数和析构函数调用规则1、场景说明如果一个类既继承了基类,又在类中维护了一个其它类型的成员......
  • win10安装openocd进行ubuntu远程gdb调试--Apple的学习笔记
    一,win10版本的openocd+stlink调试环境搭建1,在官网下载openocd的win10版本解压即可,arm-none-eabi的win10版本解压即可,然后添加到环境变量。2,stlink连接开发板,且插入stlink。3,打开一个cmd输入命令,然后可以看到正常识别到stlink,且等待gdb的3333端口。openocd-fD:\program\OpenOCD-2......
  • 解决使用mitmprox抓包可以访问网页,但是使用python request 调用该网站接口报错问题
    可能有几种原因导致这种情况。以下是一些常见的问题和可能的解决方法:证书验证问题:当你使用mitmproxy抓包时,它通常会生成自签名的SSL证书,以便进行中间人攻击检查。但在Python中使用requests库时,默认情况下,它会验证SSL证书的有效性。你需要禁用SSL验证,以便使用mitmproxy生成的证书......
  • Flutter/Dart第18天:Dart特性之可调用对象
    Dart官方文档:https://dart.dev/language/callable-objects重要说明:本博客基于Dart官网文档,但并不是简单的对官网进行翻译,在覆盖核心功能情况下,我会根据个人研发经验,加入自己的一些扩展问题和场景验证。可调用对象:Dart实例如果实现了call()方法,那么实例就可以像函数那样被调用,这......
  • Java基础 Java 为什么非要在 锁对象身上调用 wait()方法 和 notifyAll()方法
    在Java中,wait()和notify()方法必须在同步块或同步方法内部使用,通常在锁对象上调用,有以下原因:1.互斥性:当你在同步块内部使用wait()和notify()方法时,它们与锁对象紧密相关,确保在调用wait()和notify()时能够维持互斥性。这意味着在调用wait()时,当前线程会释放锁,而在调用notify()时,......