无敌拽少的狗_多多

无敌拽少的狗_多多

微服务改造代码依赖同步上

commom模块

全局异常处理器

请求响应封装类

公共的工具类

OJ在线评测系统 后端微服务架构 改造代码依赖同步 OpenFeign调教各服务间的HTTP调用-LMLPHP

model模块

很多地方公用的实体类

注意的是代码沙箱的model的引入

judge-service模块

定义公共的接口模块

先把所有的接口都搬运进来

OJ在线评测系统 后端微服务架构 改造代码依赖同步 OpenFeign调教各服务间的HTTP调用-LMLPHP

需要注意的是引入实体类

OJ在线评测系统 后端微服务架构 改造代码依赖同步 OpenFeign调教各服务间的HTTP调用-LMLPHP

微服务改造代码依赖同步下

如果子模块缺少了版本

要不去父模块里面去找 要不直接手动指定

OJ在线评测系统 后端微服务架构 改造代码依赖同步 OpenFeign调教各服务间的HTTP调用-LMLPHP

接下来我们要去搬运公共接口模块

dduoj-backend-service-client

只存放接口 不存放实现 多个服务之间要共享

先无脑搬运所有的service

OJ在线评测系统 后端微服务架构 改造代码依赖同步 OpenFeign调教各服务间的HTTP调用-LMLPHP

然后指定openFeign的版本 客户端调用工具

OpenFeign 是一个声明式的 HTTP 客户端,它使得调用 RESTful API 变得更加简单。通过使用注解,你可以定义接口和方法,OpenFeign 会自动生成相应的 HTTP 请求。

以下是 OpenFeign 的一些主要特点:

  1. 声明式编程:通过接口和注解来定义服务,不需要手动编写底层 HTTP 客户端代码。

  2. 集成:可以与 Spring Cloud 轻松集成,简化微服务间的调用。

  3. 可配置性:支持负载均衡、熔断等功能,方便进行微服务架构中的服务治理。

  4. 扩展性:可以通过自定义拦截器、解码器等扩展其功能。

总的来说,OpenFeign 让服务间的 HTTP 调用变得更加简洁和易于维护。

需要指定一下openfeign的版本

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>3.1.5</version>
        </dependency>

具体业务服务的实现

给项目引入公共依赖

接下来我们做一下主类的完善

打个比方

指定一个bean

OJ在线评测系统 后端微服务架构 改造代码依赖同步 OpenFeign调教各服务间的HTTP调用-LMLPHP

拓展1

@RestControllerAdvice 是 Spring 框架中的一个注解,用于集中处理控制器中的异常和数据绑定。在使用该注解的类中,可以定义全局的异常处理方法,返回自定义的错误响应,或者对全局的数据绑定进行处理。这样可以提升代码的可维护性和清晰度。你想更深入了解某个特定用法吗?

这个异常处理类是在common项目里面

所以我们要加一个scan注解

OJ在线评测系统 后端微服务架构 改造代码依赖同步 OpenFeign调教各服务间的HTTP调用-LMLPHP

拓展2

QueryWrapper是MyBatis-Plus中的一个工具类,用于构建SQL查询条件。它允许开发者使用链式编程的方式,灵活地添加查询条件,如等于、不等于、范围查询等,从而简化代码和提高可读性。

queryWrapper.lt()——小于
queryWrapper.le()——小于等于
queryWrapper.gt()——大于
queryWrapper.ge()——大于等于
queryWrapper.eq()——等于
queryWrapper.ne()——不等于
queryWrapper.betweeen(“age”,10,20)——age在值10到20之间
queryWrapper.notBetweeen(“age”,10,20)——age不在值10到20之间
queryWrapper.like(“属性”,“值”)——模糊查询匹配值‘%值%’
queryWrapper.notLike(“属性”,“值”)——模糊查询不匹配值‘%值%’
queryWrapper.likeLeft(“属性”,“值”)——模糊查询匹配最后一位值‘%值’
queryWrapper.likeRight(“属性”,“值”)——模糊查询匹配第一位值‘值%’
queryWrapper.isNull()——值为空或null
queryWrapper.isNotNull()——值不为空或null
queryWrapper.in(“属性”,条件,条件 )——符合多个条件的值
queryWrapper.notIn(“属性”,条件,条件 )——不符合多个条件的值
queryWrapper.or()——或者
queryWrapper.and()——和
queryWrapper.orderByAsc(“属性”)——根据属性升序排序
queryWrapper.orderByDesc(“属性”)——根据属性降序排序
queryWrapper.inSql(“sql语句”)——符合sql语句的值
queryWrapper.notSql(“sql语句”)——不符合SQL语句的值
queryWrapper.esists(“SQL语句”)——查询符合SQL语句的值
queryWrapper.notEsists(“SQL语句”)——查询不符合SQL语句的值

案例
 

/**
 * 案例二:查看姓张的并且邮箱不为空的用户列表
 * @return
 */
@RequestMapping("/list2")
public Map<String,Object> getList2(){
    Map<String,Object> result = new HashMap<>();

    //构建一个查询的wrapper
    QueryWrapper<User> wrapper = new QueryWrapper<User>();
    //姓张的
    wrapper.likeRight("name","张");
    //邮箱不为空
    wrapper.isNotNull("email");
    //未删除
    wrapper.eq("del_flag",0);
    //创建时间降序
    wrapper.orderByDesc("create_time");

    List<User> list = userMapper.selectList(wrapper);
    result.put("data",list);
    return result;
}

我们在注意要在其他模块里面吧common模块和service-client模块作为依赖引入

一个是通用类 一个是判题通用类

OJ在线评测系统 后端微服务架构 改造代码依赖同步 OpenFeign调教各服务间的HTTP调用-LMLPHP

服务内部调用

现在的问题是 题目服务依赖用户服务 但是代码已经分到不同的包 找不到对应的bean

可以使用Open Feign组件实现跨服务的远程调用

怎么梳理这个内部调用呢

下回我们继续

10-07 22:10