知识记录:微服务的Feign远程调用

我需要在查询用户的违规次数进行统计,查询用户是在用户服务,而查询违规次数则要到后台服务中。如果完成查询用户违规次数则要使用Feign客户端来调用后台服务的接口。也就是首先要有一个Feign客户端,然后再进行调用就可以了。
在这里插入图片描述
第一步建立一个Feign客户端模块,要加Feign包。创建一个CheckClient接口,在接口上加@FeignClient注解并在写上要调用的服务名,在接口内写上要调用方法和参数和方法的调用的地址(地址要写全,写到调用接口上的@RequestMapping注解内的地址)。这样Feign客户端就完成了。

        <!-- 服务调用feign -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
@FeignClient(value = "service-beark")
public interface CheckClient {

    @ApiOperation(value = "获取用户举报次数")
    @PostMapping(value = "/beark/checkremark/userCheck/")
    Result getUserCheck(@RequestBody List<Userinfo> userinfos);

}

第二步就是在用户服务中进行调用,要加入Feign客户端模块和Feign包。在启动类上加@EnableFeignClients,内填写上调用服务的包名(我只填写了前面一部分)。在Service内加上CheckClient类(我习惯在service层写,实际在哪加应该都一样)。然后先查询全部用户的ID再给后台服务作参数。再把查询得到的值进行返回就可以了。
我的包结构:
在这里插入图片描述

加@EnableFeignClients注解

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients(basePackages = "com.xu")
public class ServiceUserApplication {
    public static void main(String[] args) {
        SpringApplication.run(ServiceUserApplication.class, args);
    }
}

方法:

        @Autowired
    private CheckClient checkClient;
    
    @Override
    public Result getUserList(Page page){
        LambdaQueryWrapper<Userinfo> wrapper = new LambdaQueryWrapper();
        wrapper.select(Userinfo::getId,Userinfo::getNickName);
        Page page1 = baseMapper.selectPage(page, wrapper);
        List<Userinfo> records = page1.getRecords();

        return checkClient.getUserCheck(records);
    }

还有一个是在违规次数查询这里,之前文章中讲了在COUNT函数中可以加表达式来查询笔记和评论的违规次数,但没讲在代码实现了。下面讲下。
首先要在实体类加上这两个字段。再在字段上加@TableField注解来实现COUNT函数加表达式。其中值的意思:value 则对应查询字段时的函数,insertStrategy是添加策略而updateStrategy 是更新策略,然后值FieldStrategy.NEVER就是永远不进行更新和添加的意思。

    @ApiModelProperty("笔记违规次数")
    @TableField(value = "count(CASE WHEN status = '2' THEN 1 END)", insertStrategy = FieldStrategy.NEVER, updateStrategy = FieldStrategy.NEVER)
    private Long nodeCount;

    @ApiModelProperty("评论违规次数")
    @TableField(value = "count(CASE WHEN status = '1' THEN 1 END)", insertStrategy = FieldStrategy.NEVER, updateStrategy = FieldStrategy.NEVER)
    private Long remarkCount;

方法在这里

    @PostMapping("/userCheck")
    public Result getUserCheck(@RequestBody List<Userinfo> userinfos){
        LambdaQueryWrapper<Check> wrapper = new LambdaQueryWrapper();
        ArrayList<Long> uids = new ArrayList();
        for (Userinfo userinfo : userinfos){
            uids.add(userinfo.getId());
            // 对每个用户进行初始化
            userinfo.setNodeCount(0l);
            userinfo.setRemarkCount(0l);
        }
        wrapper.select(Check::getNodeCount,Check::getCheckid,Check::getUid)
                // 表明已审核
                .eq(Check::getPass,1)
                .groupBy(Check::getUid)
                .in(Check::getUid,uids);
        List<Check> list = checkService.list(wrapper);
        for (Userinfo userinfo : userinfos){
            list.forEach(item -> {
                if(item.getUid() == userinfo.getId()){
                    // 防止空值
                    if(item.getNodeCount() != null ){
                        userinfo.setNodeCount(item.getNodeCount());
                    }

                    if(item.getRemarkCount() != null ){
                        userinfo.setRemarkCount(item.getRemarkCount());
                    }

                }
            });
        }
        return Result.ok(userinfos);
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值