Nacos整合Feign远程调用

Feign使用 

Feign是一个声明式的http客户端,其作用就是帮助我们优雅的实现http请求的发送。

将Feign的Client抽取为独立模块,并且把接口有关的POJO、默认的Feign配置都放到这个模块中,提供给所有消费者使用。

例如,将UserClient、User、Feign的默认配置都抽取到一个feign-api包中,所有微服务引用该依赖包,即可直接使用。  

Nacos整合Feign远程调用_第1张图片 

引入依赖

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


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



    io.github.openfeign
    feign-httpclient


    cn.itcast.demo
    feign-api
    1.0

在feign-api中然后引入feign的starter依赖


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

配置连接池 

在order模块的application.yaml添加

feign:
  client:
    config:
      default: # default全局的配置
        loggerLevel: BASIC # 日志级别,BASIC就是基本的请求和响应信息
  httpclient:
    enabled: true # 开启feign对HttpClient的支持
    max-connections: 200 # 最大的连接数
    max-connections-per-route: 50 # 每个路径的最大连接数

Nacos整合Feign远程调用_第2张图片

编写Feign

Nacos整合Feign远程调用_第3张图片

model

import lombok.Data;

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

  client

import cn.itcast.feign.pojo.User;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

@FeignClient(value = "userservice")
public interface UserClient {

    @GetMapping("/user/{id}")
    User findById(@PathVariable("id") Long id);
}

config

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

public class DefaultFeignConfiguration {
    @Bean
    public Logger.Level logLevel(){
        return Logger.Level.BASIC;
    }
}

调用Feign

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

import javax.annotation.Resource;

@Service
@Slf4j
public class OrderService {

    @Resource
    private OrderMapper orderMapper;

    @Resource
    private UserClient userClient;

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


}

添加扫描包

方式一

指定Feign应该扫描的包

@EnableFeignClients(basePackages = "cn.itcast.feign.clients")

Nacos整合Feign远程调用_第4张图片

方式二

指定需要加载的Client接口

@EnableFeignClients(clients = {UserClient.class})

Nacos整合Feign远程调用_第5张图片 测试

Nacos整合Feign远程调用_第6张图片

 

 

你可能感兴趣的:(微服务,java,后端,spring,boot)