Nacos使用OpenFeign

GitHub OpenFeign是一种声明式调用,我们只需要按照一定的规则描述我们的接口(不支持Spring MVC注解,它有一套自己的注解),它就能帮我们完成 REST风格的接口调用。

Spring Cloud将 GitHub OpenFeign封装成了 OpenFeign组件(spring-cloud-starter-openfeign),给出的规则完全支持 Spring MVC注解等。大大减少了代码的编写量,提高代码的可读性。

OpenFeign底层默认使用Ribbon,而 Ribbon默认使用的是 Apache HTTP Client作为底层连接。OpenFeign也可以对其修改(自行百度),比如 OK HTTP Client。

OpenFeign具体使用查看之前写的文章:

OpenFeign组件声明式服务调用:https://blog.csdn.net/qq_42402854/article/details/111550295

一、Nacos使用OpenFeign

在app-user服务中使用 OpenFeign调用其他服务。

1、引入依赖

        <!-- openfeign 远程调用 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

2、编写Facade接口

编写Facade接口,并使用 @FeignClient注解。提示

注意:服务的Facade接口可以单独声明出来,作为公共的依赖,可以方便服务消费方使用。

@FeignClient(value = "app-order", path = "/order")
public interface OrderFacadeService {

	@RequestMapping("/findOrderByUserId/{userId}")
	R findOrderByUserId(@PathVariable("userId") Integer userId);
}

@FeignClient(value = "app-stock", path = "/app-stock/stock")
public interface StockFacadeService {

	@RequestMapping("/findStockByUserId/{userId}")
	R findStockByUserId(@PathVariable("userId") Integer userId);
}

3、启动类

在启动类上添加 @EnableFeignClients注解。由于OpenFeign整合了Ribbon,所以不需要使用 @LoadBalanced了。

@SpringBootApplication
@EnableFeignClients // 扫描和注册feign客户端。OpenFeign整合了Ribbon
public class AppUserApplication {

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

4、访问测试

在 Controller中,使用Facade接口发起远程服务调用。

@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {

	@Autowired
	private OrderFacadeService orderFacadeService;

	@Autowired
	private StockFacadeService stockFacadeService;

	/**
	 * http://localhost:18081/app-user/user/findOrderByUserId/1
	 * 
	 * @param id
	 * @return
	 */
	@RequestMapping(value = "/findOrderByUserId/{id}")
	public R findOrderByUserId(@PathVariable("id") Integer id) {
		log.info("根据userId=" + id + "查询订单信息");

		R orderResult = orderFacadeService.findOrderByUserId(id);
		R stockResult = stockFacadeService.findStockByUserId(id);
		return R.ok("OpenFeign调用").put("orderResult", orderResult).put("stockResult", stockResult);
	}

}

访问ok。

在这里插入图片描述

二、Feign自定义配置及使用

1、日志配置

1.1 定义全局配置类

定义一个配置类(全局配置),指定日志级别。不推荐使用。

import org.springframework.context.annotation.Bean;

import feign.Logger;
// @Configuration
public class FeignConfig {

	@Bean
	public Logger.Level feignLoggerLevel() {
		return Logger.Level.FULL;
	}
} 

日志等级有 4 种,分别是:

  • NONE:不记录输出任何日志(默认值)。
  • BASIC:仅记录输出请求方法、URL、响应状态代码以及执行时间。
  • HEADERS:记录BASIC级别的基础上,记录请求和响应的header。
  • FULL:记录请求和响应的header、 body和元数据。

2、yml配置文件

1)全局配置:

在yml配置文件中配置 Client 的日志级别才能正常输出日志,格式是"logging.level.feign接口包路径=debug"。

logging:
  level:
    com.charge.xxx.facade: debug

2)局部配置也可以在yml中配置

# feign日志局部配置
feign:
  client:
    config:
      app-order:
        loggerLevel: FULL

在这里插入图片描述

2、超时时间配置

通过 Options 可以配置连接超时时间和读取超时时间。Options有两个参数:

  • 第一个参数是连接的超时时间(ms),默认值是 2s;
  • 第二个是请求处理的超时时间(ms),默认值是 5s。

1)全局配置

@Configuration 
public class FeignConfig { 
    @Bean 
    public Request.Options options() { 
        return new Request.Options(5000, 10000); 
    } 
}

2)yml中配置(局部配置,某个服务)

# feign日志局部配置
feign:
  client:
    config:
      app-order:
        loggerLevel: FULL
        # 连接超时时间,默认2s
        connectTimeout: 5000
        # 请求处理超时时间,默认5s
        readTimeout: 10000

注意: Feign的底层用的是Ribbon,但超时时间以Feign配置为准。

– 求知若饥,虚心若愚。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
NacosOpenFeign是两个独立的开源项目,可以在Spring Cloud微服务架构中进行整合使用。 首先,需要在项目的pom.xml文件中引入相应的依赖。对于Nacos,可以通过以下方式引入: ```xml <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> ``` 对于OpenFeign,可以通过以下方式引入: ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> ``` 接下来,需要在启动类上添加相应的注解配置。对于Nacos,可以使用`@EnableDiscoveryClient`注解开启服务注册与发现功能。对于OpenFeign,可以使用`@EnableFeignClients`注解开启Feign客户端功能。 ```java @SpringBootApplication @EnableDiscoveryClient @EnableFeignClients public class YourApplication { public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } } ``` 然后,可以创建一个Feign客户端接口,用于定义与其他微服务交互的接口方法。使用`@FeignClient`注解指定要调用的微服务名称。 ```java @FeignClient("service-name") public interface YourFeignClient { @GetMapping("/api/your-api") String yourApiMethod(); } ``` 最后,在需要使用Feign客户端的地方注入该客户端接口,并直接调用定义的接口方法。 ```java @RestController public class YourController { private final YourFeignClient feignClient; public YourController(YourFeignClient feignClient) { this.feignClient = feignClient; } @GetMapping("/your-endpoint") public String yourEndpoint() { return feignClient.yourApiMethod(); } } ``` 以上就是NacosOpenFeign的整合步骤。通过Nacos进行服务注册和发现,通过OpenFeign进行微服务间的远程调用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值