Feign远程调用

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: Feign远程调用


Feign远程调用
注意看这里--->举例:假设当前order-service服务需要远程调用user服务

1、引入依赖

在order-service服务的pom文件中引入feign的依赖:


org.springframework.cloud
spring-cloud-starter-openfeign

2、添加注解

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

3、编写Feign的客户端

在order-service中新建一个接口,内容如下:

package cn.itcast.order.client;

@FeignClient("userservice")
public interface UserClient {
@GetMapping("/user/{id}")
User findById(@PathVariable("id") Long id);
}
4、测试

修改order-service中的OrderService类中的queryOrderById方法,使用Feign客户端代替RestTemplate:

package cn.itcast.order.service;

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

@Service
public class OrderService {

@Autowired
private OrderMapper orderMapper;

@Autowired
private RestTemplate restTemplate;

@Autowired
private UserClient userClient;

public Order queryOrderById(Long orderId) {
    // 订单查询
    Order order = orderMapper.findById(orderId);
    // 1.配置url

// String url = "http://localhost:8081/user/" + order.getUserId();
// String url = "http://userservice:8081/user/" + order.getUserId();
// 2.发起调用
// User user = restTemplate.getForObject(url, User.class);
// 使用Feign发起http请求,查询用户
User user = userClient.findById(order.getUserId());
// 封装user到order
order.setUser(user);
// 返回
return order;
}

}
日志文件配置

针对单个服务

feign:
client:
config:
userservice: # 针对某个微服务的配置
loggerLevel: FULL # 日志级别
针对所有服务

feign:
client:
config:
default: # 这里用default就是全局配置,如果是写服务名称,则是针对某个微服务的配置
loggerLevel: FULL # 日志级别
日志的级别分为四种:

Feign最佳实践方式
注意看这里--->举例:假设当前order-service服务需要远程调用user服务

这种是将Feign单独抽取到一个模块中

1、抽取

首先创建一个module,命名为feign-api

2、引入依赖


org.springframework.cloud
spring-cloud-starter-openfeign


org.springframework.cloud
spring-cloud-openfeign-core
x
3、写入UserClient、User、DefaultFeignConfiguration

创建cn.itcast.feign包

UserClient

package cn.itcast.feign.client;

@FeignClient("userservice")
public interface UserClient {
@GetMapping("/user/{id}")
User findById(@PathVariable("id") Long id);
}
User

package cn.itcast.feign.pojo;

import lombok.Data;

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

package cn.itcast.feign.config;

@Configuration
public class DefaultFeignConfiguration {
@Bean
public Logger.Level feignLogLevel(){
return Logger.Level.BASIC; // 日志级别为BASIC
}
}
4、在order-service的pom文件中引入feign-api依赖


com.itcast
feign-api
1.0

5、添加扫描包

这个要加载启动类上,谁用到这个feign-api,就在谁的启动类上加

方式一:

指定Feign应该扫描的包:

@EnableFeignClients(basePackages = "cn.itcast.feign.clients")
方式二:

指定需要加载的Client接口(注意引包是:feign-api下的别引错了):

@EnableFeignClients(clients = {UserClient.class})
6、order-server使用Open Feign调用User

package cn.itcast.order.service;

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

@Service
public class OrderService {

@Autowired
private OrderMapper orderMapper;

@Autowired
private UserClient userClient;

public Order queryOrderById(Long orderId){
    // 订单查询
    Order order = orderMapper.findById(orderId);
    // 利用Feign发起http请求,查询用户
    User user = userClient.findById(order.getUserId());
    // 封装user到order
    order.setUser(user);
    // 返回
    return order;
}

}

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
23天前
|
JSON Dubbo Java
Feign远程调用
Feign远程调用
12 1
Feign远程调用
|
2月前
|
JSON Java 数据格式
【微服务】SpringCloud之Feign远程调用
本文介绍了使用Feign作为HTTP客户端替代RestTemplate进行远程调用的优势及具体使用方法。Feign通过声明式接口简化了HTTP请求的发送,提高了代码的可读性和维护性。文章详细描述了Feign的搭建步骤,包括引入依赖、添加注解、编写FeignClient接口和调用代码,并提供了自定义配置的示例,如修改日志级别等。
99 1
|
4月前
|
Java 数据库 微服务
使用OpenFeign进行服务调用
本文档介绍如何在微服务架构中使用Spring Cloud的OpenFeign进行服务间的远程调用。首先,需在项目中引入OpenFeign及其负载均衡器依赖。接着,通过`@EnableFeignClients`启用Feign客户端功能,并定义客户端接口以声明远程服务调用逻辑。为确保启动类能正确扫描到这些接口,需指定`basePackages`属性。最后,演示了如何在购物车服务中利用Feign客户端接口调用商品服务,以实现跨服务的数据整合和查询。Feign通过动态代理机制简化了HTTP请求的发起过程,使服务间交互更为直观和便捷。
113 0
|
6月前
springCloud之服务调用RestTemplate、OpenFeign
springCloud之服务调用RestTemplate、OpenFeign
|
7月前
|
负载均衡 Java 应用服务中间件
Ribbon、Feign和OpenFeign的区别来了
Ribbon、Feign和OpenFeign的区别来了
283 2
|
7月前
|
存储 JSON 负载均衡
基于OpenFeign的服务调用
基于OpenFeign的服务调用
62 2
|
7月前
|
缓存 负载均衡 网络协议
基于Ribbon+RestTemplate的服务调用
基于Ribbon+RestTemplate的服务调用
56 1
|
7月前
|
Java Apache
Feign
Feign
44 0
|
7月前
|
API 数据库管理
远程调用-其他服务
远程调用-其他服务
57 1
SpringCloud-Feign-文件服务调用
SpringCloud-Feign-文件服务调用
68 0