Nacos中Feign的远程调用深入理解

2023年 9月 27日 63.9k 0

微服务模块间通信

微服务是由很多模块组成,但彼此之间又会进行互相调用,那么就会有方法来实现这个api接口进行远程调用,常见的调用方法有restTemplate,还有feign等,但随着使用,我们好像发现,feign的使用会更轻松,代码更可观,也更好的去理解。

RestTemplate

import org.springframework.web.client.RestTemplate;

 @Autowired
    private RestTemplate restTemplate;

Nacos中Feign的远程调用深入理解-1

我们可以看到这个类是在springframework包下的,所以可以直接引用。

下面我们来看一下restTemplate在使用时的方式:

public Order queryOrderById(Long orderId) {
        // 1.查询订单
        Order order = orderMapper.findById(orderId);
        // 2.利用RestTemplate发起http请求,查询用户
        // 2.1.url路径
        String url = "http://userservice/user/" + order.getUserId();
        // 2.2.发送http请求,实现远程调用
        User user = restTemplate.getForObject(url, User.class);
        // 3.封装user到Order
        order.setUser(user);
        // 4.返回
        return order;
    }

Nacos中Feign的远程调用深入理解-1

getForObject():

更偏向于直接获取响应内容的,因为他直接返回响应实体的body(响应内容)

具体的关于RestTemplate的文章可以去阅读:t.csdn.cn/NH2Pl

我们在使用的时候还需要通过url来进行详细的拼接, 这里的usrservice是我们的模块名称,也是服务名称,他是注册在服务的注册中心当中,我们通过负载均衡策略去服务中心进行拉取最后决定选择哪一个服务进行调用。类似于userservice->localhost:8080,这是在本地和服务配置实现的。可以使用eureka和nacos服务注册中心。

Nacos中Feign的远程调用深入理解-1​编辑

这样的代码,肉眼课间的有些混乱和不美观,因此,我们打算使用feign来进行优化远程调用。

Nacos和Feign

Nacos不但是服务注册中心,也是配置中心。

我们在使用nacos,和feign的时候需要先导入依赖:

如果要使用nacos+feign可以直接导入这部分依赖就可以,不想区分就两个服务都导入,当然是你有引入spring-cloud等父依赖的情况下,依赖版本需要配置完整,我这里有依赖继承,可以根据自己的springboot版本来进行修改自己的依赖版本。

         
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
        
         
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-config
        
         
        
            org.springframework.cloud
            spring-cloud-starter-openfeign
        
        
        
            io.github.openfeign
            feign-httpclient
        
        
        
            cn.itcast.demo
            feign-api
            1.0
        

Nacos中Feign的远程调用深入理解-1

orderservice去调用userservice,所以都需要在注册中心进行注册,以及配置相应的日志级别和负载均衡策略,这里可以提供相关的参考来进行自己的配置。

orderservice的application.yml:这里的配置文件,application.name,和cloud.nacos和feign可以参考配置

erver:
  port: 8088
spring:
  datasource:
    url: 
    username: 
    password: 
    driver-class-name: com.mysql.jdbc.Driver
  application:
    name: orderservice
  cloud:
    nacos:
      server-addr: localhost:8848 # nacos服务地址
mybatis:
  type-aliases-package: 
  configuration:
    map-underscore-to-camel-case: true
logging:
  level:
  
userservice:
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule  # 负载均衡规则
ribbon:
  eager-load:
    enabled: true # 开启饥饿加载
    clients: # 指定饥饿加载的服务名称
      - userservice
feign:
  httpclient:
    enabled: true # 支持HttpClient的开关
    max-connections: 200 # 最大连接数
    max-connections-per-route: 50 # 单个路径的最大连接数

Nacos中Feign的远程调用深入理解-1

userservice的yml:

spring:
  application:
    name: userservice
  profiles:
    active: dev # 环境
  cloud:
    nacos:
      server-addr: localhost:8848 # nacos地址
      config:
        file-extension: yaml # 文件后缀名

Nacos中Feign的远程调用深入理解-1

Nacos服务注册:

Nacos中Feign的远程调用深入理解-1​编辑

Feign的调用架构:

Nacos中Feign的远程调用深入理解-1​编辑

我们把feign的接口提取出来,并且将相关的类和配置都配置好,作为一个模块,供其他模块引入调用。

结合代码实例理解:

Nacos中Feign的远程调用深入理解-1​编辑

通俗来说就是order-service和user-service就是两个出租屋子,他们有自己的锁,但是他们都把钥匙放在feign里了,如果有人需要就去拿着使用,比如说order像进user屋里面溜达溜达,就去feign拿user的钥匙,这样就可以使用这个屋子了。

集合代码:

Nacos中Feign的远程调用深入理解-1​编辑

引入pojo是因为我们使用了这个类所返回对象的方法,和config则是:

Nacos中Feign的远程调用深入理解-1​编辑

注册为bean方法,放进spring容器

Nacos中Feign的远程调用深入理解-1​编辑

Nacos中Feign的远程调用深入理解-1​编辑

下图的启动类会有显示。

UserClient就相当于这个钥匙@FeignClient就相当于声明它是一个钥匙,而对于想要使用这个钥匙的人,比如order-service:

Nacos中Feign的远程调用深入理解-1​编辑

就需要在这个启动类里面去配置:

@EnableFeignClients(clients = UserClient.class,defaultConfiguration = DefaultFeignConfiguration.class)

Nacos中Feign的远程调用深入理解-1

这个作用就是springboot去自动扫描容器内的feignclient,就是你要使用出租屋,你得知道钥匙放在哪里吧(@EnableFeignClients),并且要使用哪一把钥匙(clients = UserClient.class)

@EnableFeignClients注解

Nacos中Feign的远程调用深入理解-1​编辑

packages就是你可以指定去配置扫描的包

@EnableFeignClients(basePackages = {"com.test.*"})

Nacos中Feign的远程调用深入理解-1

,clients也可以去扫名指定的类,前文已经提过。

Feign调用实例

这样服务和启动类配置好之后,springboot启动一扫描就知道,啊,原来我有这些屋子和钥匙可以使用,所以,order在使用user的时候就会变成:

Nacos中Feign的远程调用深入理解-1​编辑

是不是一下清爽了很多。

这里的userClient就是引用我们之前写的feign的包。

因此,我们在使用nacos+feign的时候明显会比之前用restTemplate舒服了很多,希望这篇文章有助于大家理解,如果对你有帮助的话,恳请点个赞鼓励一下哦

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论