【后端】 Spring Cloud 服务间调用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m18633778874/article/details/88524853

前言

     小编最近需要调用外服务的一个接口,便需要外服务的api层去开放端口,并且本服务中用到了IntegralResult的结果封装体返回值的处理,通过Json转换处理。

两个服务代码实现   

    一、外服务开放端口

  1.api层的代码

package com.dmsdbj.integral.kernel.api.facade;  // 包路径

import com.dmsdbj.cloud.tool.business.IntegralResult;
import org.springframework.cloud.openfeign.FeignClient; // 注册服务发现的注解
....


@FeignClient(value = "INTEGRAL-KERNEL-PROVIDER", path = "/kernel-web",fallback = IntegralClientException.class)
public interface IntegralDetailClientService {

...

 /**
     * 查询全勤奖励加分记录
     * @author 冯浩月
     * @param userId
     * @param date
     * @return
     * @since  2019年3月12日16:12:56
     */
    @GetMapping(value = {"/api/integralDetail/findByUserIdDate/{userId}/{date}"})
    IntegralResult findByUserIdDate(@PathVariable(value="userId") String userId,
                                                @PathVariable(value="date") String date);

}

  2.provider层 实现api层的接口

package com.dmsdbj.integral.kernel.provider.controller.api;/**


@Controller
@Api(tags = {"外部积分详情接口"})
@RestController
@Slf4j
@RequestMapping(value = {"/api/integralDetail"})

public class ApiIntegralDetailController implements IntegralDetailClientService {

...

   *
     * @param userId
     * @param date
     * @return
     * @author 冯浩月
     * @since 2019年3月12日16:12:56
     */
    @ApiOperation(value = "查询全勤奖励加分记录")
    @GetMapping(value = {"/findByUserIdDate/{userId}/{date}"})
    @Override
    public IntegralResult<List<IntegralDetailModel>> findByUserIdDate(@PathVariable(value = "userId") String userId, @PathVariable(value = "date") String date) {

        if (integralDetailService.findByUserIdDate(userId, date).size() == 0) {
            return IntegralResult.build(IntegralResult.SUCCESS, "没有数据", null);
        } else {
            return IntegralResult.build(IntegralResult.SUCCESS, "查询成功", integralDetailService.findByUserIdDate(userId, date));
        }
    }

....
}

     二、本服务中调用

// 引用外服务api
import ...api.facade.IntegralDetailClientService;
import ...api.model.IntegralDetailModel; 

public class DetailRecordServiceImpl extends.. implements ..{

...

// 注入外服务
@Resource
private IntegralDetailClientService integralDetailClientService;

// 方法
public void plusIntegral() {
...

String userJiFenId = detailRecordEntity.getUserJiFenId();
 
// 调用外服务findByUserIdDate方法,返回值为封装结果体 例如:
IntegralResult{code:"0000",message:"查询成功",data:null}

 IntegralResult<List<IntegralDetailModel>> findResult = 
 integralDetailClientService.findByUserIdDate(userJiFenId, today);

 if (IntegralResult.SUCCESS.equals(findResult.getCode())) {

  // 将返回数据转成String类型,使用JsonUtil.beanToJson();
    String integralDetailModelList = JsonUtil.beanToJson(findResult.getData());


   if (integralDetailModelList == null) { // 该用户未加分
    List<Integer> fullTimeList = 
    this.queryFullTimeByUserId(detailRecordEntity.getUserJiFenId()); // 根据用户查询当天是否全勤
     fullTimeDays = fullTimeList.get(1);
   }    

 } else {
  log.error(IntegralResult.FAIL, "外服务
integralDetailClientService.findByUserIdDate(userJiFenId, today)调用失败--{}", userJiFenId);
 }
...
}

 

小结

    服务间调用的实现思路,基本上是类、接口之间的继承、实现的关系体现,必要注解的使用,同时还需要更新maven包、构建服务,这两个细节不能忽略,否则会白费力气去找代码问题。同时IntegralResult封装体的运用,返回值的接收和处理。

                                                                           感谢您的访问!

猜你喜欢

转载自blog.csdn.net/m18633778874/article/details/88524853