使用@FeignClient进行微服务间调用 |
您所在的位置:网站首页 › rock5BGPIO接口怎么调用 › 使用@FeignClient进行微服务间调用 |
通过@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 |