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

您所在的位置:网站首页 rock5BGPIO接口怎么调用 使用@FeignClient进行微服务间调用

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

2024-01-22 02:04| 来源: 网络整理| 查看: 265

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

总共分为5步:

 

第一步:加载Jar包

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

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

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

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

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

 

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

org.springframework.cloud spring-cloud-openfeign 2.0.0.RC1 pom import org.springframework.cloud spring-cloud-starter-openfeign

 

第二步:新建一个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 getContractByContractId(@PathVariable("contractId") Long contractId,                                                   @PathVariable("organizationId") Long tenantId);       @GetMapping(value = "/v1/{organizationId}/contracts/{contractId}/lines", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)      ResponseEntity 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 getContractByContractId(Long contractId, Long tenantId) {         return new ResponseEntity(HttpStatus.BAD_REQUEST);     }     @Override     public ResponseEntity 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;   }

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

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3