Feigin(服务拉取)

Feign是一个用于简化JavaHTTP客户端开发的工具,通过注解和自动请求封装提供服务调用。它集成Ribbon和Eureka实现负载均衡,并支持服务发现。在SpringCloud中,Feign用于跨模块服务调用,通过依赖注入和自定义接口实现远程调用。
摘要由CSDN通过智能技术生成

Fegin是干什么的?

Feign是一个声明式的HTTP客户端,使得编写Web服务客户端变得更加容易。使用Feign创建一个接口并对它进行注解,然后Feign将自动为你生成相应的HTTP请求。Feign旨在使编写Java Http客户端变得更容易,从而避免了每次调用目标微服务时需要手动编写HTTP请求的繁琐。此外,Feign还支持可插拔的注解支持,包括Feign注解与JAX-RS注解,还支持可插拔的编码器与解码器。

Feign还集成了Ribbon和Eureka,使得它成为一个负载均衡的HTTP客户端。Ribbon提供了客户端的负载均衡功能,而Eureka则是一个服务注册与发现组件,可以用来获取注册中心服务的一些信息,从而进行一些负载算法对服务的调用。

此外,Feign还支持请求压缩,可以在请求数据过大时对数据进行压缩,提高数据传输效率。同时,Feign的底层基于动态代理+RestTemplate,对声明的接口及方法、url+参数拼接,在返回数据的时候可以根据声明的返回类型去做转换。

Fegin的了解

Fegin是用来服务发现并且进行服务拉取的

1、首先先去把自己的服务注册到注册中心上面IP、端口、服务名称...等

2、注册到注册中心并且启动了服务

3、使用Feigin去注册中心进行服务的发现并且拉取对服务名称的实例进行负载均衡(随机、轮询)等方式选取出一个

4、执行服务调用:Feign根据接口定义和注解,自动封装请求参数,发起HTTP请求并获取响应结果。😊

Fegin在项目中如何使用?

  1. 首先Fegin是一个从nacos中查找其它模块的方法(也就是远程调用)

  2. 我使用Fegin是基于SpringCloud 分布式的

    1. 由于SpringCloud是一个分模块进行操作的

    2. 首先我们有三个模块(网关、生产者、消费者)

    3. 消费者要去调用生产者的方法,分模块调用,怎么去调用?

    4. 可以使用Fegin或者是导入生产者的依赖 但依赖不建议,因为实际开发是多人进的

第一步:

导入依赖

          pom.xml

          

<!--导入openfeign包-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

第二步(执行需求就是要把生产者首先注册到服务中心):

   我们定义一个ServiceFegin类

package org.example.service;

import org.example.interfaces.IXinboCelebrityServiceApi;
import org.springframework.cloud.openfeign.FeignClient;

@FeignClient(name = "xinbo-homestay-provider-manager",contextId = "xinboCelebrity")
public interface IXinboCelebrityServiceFegin extends IXinboCelebrityServiceApi {
}

在上面加上@FeignClient(name = "xinbo-homestay-provider-manager",contextId = "xinboCelebrity")这个注解 

name: 代表了你要去nacos找哪个服务 也就是服务的名称 而contextId 代表了你唯一的标识

然后我们可以通过

extends IXinboCelebrityServiceApi  继承这个方法这个方法可以写入到公共的实体类模块中
package org.example.interfaces;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.example.entity.bo.Protiest;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

public interface IXinboCelebrityServiceApi {
    @PostMapping("folkloreinquiry")
    Page folkloreinquiry(@RequestBody Protiest protiest);

    @GetMapping("deleteByid")
    Integer deleteByid(@RequestParam("username")String username,@RequestParam("cid") Integer cid);

}

如上代码: 

   @PostMapper("folkloreinquiry") : 就是要去xinbo-homestay-provider-manager

   你上面定义的服务名称 去这个服务里拉取folkloreinquiry这个方法

我们来到xinbo-homestay-provider-manager模块:

package org.example.controller;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.example.entity.bo.Protiest;
import org.example.interfaces.IXinboCelebrityServiceApi;
import org.example.service.IXinboCelebrityService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

@RestController
public class IXinboCelebrityController implements IXinboCelebrityServiceApi{
    @Autowired
    private IXinboCelebrityService iXinboCelebrityService;


    @Override
    public Page folkloreinquiry(Protiest protiest) {
        return iXinboCelebrityService.folkloreinquiry(protiest);
    }

    @Override
    public Integer deleteByid(String username,Integer cid) {
        return iXinboCelebrityService.deleteByid(username,cid);
    }
}

去实现 : 

IXinboCelebrityServiceApi 就可以实现里面的方法 然后 Fegin 就会通过方法名称找到

Fegin还有很多拉取的方法而不是只有这一种, 喜欢的话可以去探索一下!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值