使用@FeignClient进行微服务间调用

通过@FeignClient注解可以调用外部微服务接口

总共分为5步:

 

第一步:加载Jar包

第二步:新建一个Feign接口类( ClearBatchFeign.java),并且注明接口实现类

第三步:创建一个Feign接口实现类(ClearBatchFeignFallback.java),实现Feign接口,

需要加上注解@Component自动注入

第四步,定义DTO类来接受数据(接收的数据要和调用的接口一致)

第五步:调用接口,实现微服务调用

 

第一步:加载Jar包 该步可能会由于spring boot版本问题出现@EnableFeignClients找不到的错误,具体请看:Spring Boot下使用Feign提示找不到注解@EnableFeignClients的原因及解决方法

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-openfeign</artifactId>
            <version>2.0.0.RC1</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
</dependencies>

 

第二步:新建一个Feign接口类( ClearBatchFeign.java),

并且注明接口实现类fallback = ClearBatchFeignFallback.class(第二步创建)

import io.hcbm.common.constant.HcbmService;

import io.hcbm.fulfill.api.dto.ContractDTO;

import io.hcbm.fulfill.api.dto.ContractLineDTO;

import io.hcbm.fulfill.infra.feign.fallback.ClearBatchFeignFallback;

import org.springframework.cloud.netflix.feign.FeignClient;

import org.springframework.http.MediaType;

import org.springframework.http.ResponseEntity;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.PathVariable;

import java.util.List;
 

@FeignClient(value = HcbmService.Contract.NAME, fallback = ClearBatchFeignFallback.class)

public interface ClearBatchFeign {

    @GetMapping(value = "/v1/{organizationId}/contracts/{contractId}", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)

    ResponseEntity<ContractDTO> getContractByContractId(@PathVariable("contractId") Long contractId,

                                                  @PathVariable("organizationId") Long tenantId);

 

    @GetMapping(value = "/v1/{organizationId}/contracts/{contractId}/lines", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)

     ResponseEntity<List<ContractLineDTO>> getContractLineByContractId(@PathVariable("contractId") Long contractId,

                                                                   @PathVariable("organizationId") Long tenantId);

}

 

HcbmService.JAVA文件定义的是微服务的基本信息:服务名,端口号和Code

 

第三步:创建一个Feign接口实现类(ClearBatchFeignFallback.java),实现Feign接口( ClearBatchFeign),

需要加上注解@Component自动注入

import io.hcbm.fulfill.api.dto.ContractDTO;
import io.hcbm.fulfill.api.dto.ContractLineDTO;
import io.hcbm.fulfill.infra.feign.ClearBatchFeign;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import java.util.List;

@Component
public class ClearBatchFeignFallback implements ClearBatchFeign {
    @Override
    public ResponseEntity<ContractDTO> getContractByContractId(Long contractId, Long tenantId) {
        return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
    }

    @Override
    public ResponseEntity<List<ContractLineDTO>> getContractLineByContractId(Long contractId, Long tenantId) {
        return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
    }

}

 

第四步,定义DTO类来接受数据(接收的数据要和调用的接口一致)

import com.alibaba.fastjson.annotation.JSONField;

import com.fasterxml.jackson.annotation.JsonFormat;

import lombok.*;

import org.hzero.editpmsn.EditObject;

import org.hzero.editpmsn.constant.EditObjectCode;

import org.springframework.format.annotation.DateTimeFormat;

import java.math.BigDecimal;

import java.time.LocalDate;

import java.util.Date;

 

@Getter

@Setter

@Builder

@AllArgsConstructor

@NoArgsConstructor

@ToString

@EditObject(referenceObject = EditObjectCode.CONTRACT)

public class ContractDTO {

    private Long id;

    private String contractNumber;

    private String contractName;

    private Long companyId;

    private String companyName;

    private Long categoryId;

    private String categoryName;

    private String inOutTypeCode;

    private String propertyCode;

    private String departmentName;

    private Long departmentId;

    private String belongingDepartmentName;

    private Long belongingDepartmentId;

    @DateTimeFormat(pattern = "yyyy-MM-dd")

    @JsonFormat(pattern = "yyyy-MM-dd")

    @JSONField(format = "yyyy-MM-dd")

    private LocalDate signatureDate;

    @DateTimeFormat(pattern = "yyyy-MM-dd")

    @JsonFormat(pattern = "yyyy-MM-dd")

    @JSONField(format = "yyyy-MM-dd")

    private LocalDate startDate;

    @DateTimeFormat(pattern = "yyyy-MM-dd")

    @JsonFormat(pattern = "yyyy-MM-dd")

    @JSONField(format = "yyyy-MM-dd")

    private LocalDate endDate;

    private BigDecimal amount;

    private String paymentModeCode;

    private String signatureTypeCode;

    private String currency;

    private String principalName;

    private Long principalId;

    private String statusCode;

    private String executeStatusCode;

    private String lastStatusCode;

    private String description;

    private String creationMethodCode;

    private Long sourceContractId;

    private String sourceContractNumber;

    private Long sourceTemplateId;

    private String sourceTemplateNumber;

    private Long contentId;

    private Long lineFieldId;

    private String creator;

    @DateTimeFormat(pattern = "yyyy-MM-dd")

    @JsonFormat(pattern = "yyyy-MM-dd")

    @JSONField(format = "yyyy-MM-dd")

    private Date creationDate;

    private Long version;

    private String editMode;

    private Long tenantId;

    private Long objectVersionNumber;

 

    private Long createdBy;

    // 权限校验用

    private Boolean canEdit;

    /**

     * 动态字段编码

     */

    private String ruleNumber;

 

}

第五步定义接口,引用方法得到数据

 

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
@FeignClientSpring Cloud中的一个注解,用于声明一个Feign客户端。Feign是一个声明式的Web服务客户端,它使得编写Web服务客户端变得更加简单。通过使用@FeignClient注解,我们可以轻松地定义和使用Feign客户端来调用其他微服务。 下面是使用@FeignClient的步骤: 1. 添加依赖:首先,需要在项目的pom.xml文件中添加Feign的依赖。例如,对于Maven项目,可以添加以下依赖: ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> ``` 2. 启用Feign客户端:在Spring Boot应用程序的启动类上添加@EnableFeignClients注解,以启用Feign客户端。例如: ```java @SpringBootApplication @EnableFeignClients public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 3. 定义Feign客户端接口:创建一个接口,并使用@FeignClient注解来声明该接口是一个Feign客户端。指定要调用微服务的名称,例如: ```java @FeignClient(name = "service-name") public interface MyFeignClient { // 定义要调用的接口方法 } ``` 4. 使用Feign客户端:在需要调用其他微服务的地方,通过注入Feign客户端接口来使用它。例如: ```java @Autowired private MyFeignClient myFeignClient; public void doSomething() { // 调用Feign客户端的方法 myFeignClient.someMethod(); } ``` 通过以上步骤,我们就可以使用@FeignClient注解来定义和使用Feign客户端来调用其他微服务了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值