首页 > 其他分享 >OJ判题测评系统--网关搭建、用户模块

OJ判题测评系统--网关搭建、用户模块

时间:2023-12-30 15:45:11浏览次数:37  
标签:网关 服务 OJ service -- spring cyroj cloud

后端项目初始化

跑通项目

创建一个Spring Cloud项目结构如下
image

application.yml配置如下

# 公共配置文件
# @author cyr
# 
spring:
  application:
    name: cyroj-user-service
  profiles:
    active: dev
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/cyroj
    username: root
    password: 123456
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
server:
  address: 0.0.0.0
  port: 8102
  servlet:
    context-path: /api/user
mybatis-plus:
  configuration:
    map-underscore-to-camel-case: false
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

写一个Controller接口尝试运行项目

@RestController
@RequestMapping("/")
@Slf4j
public class UserController {

    @GetMapping("/test")
    public String test() {
        return "hello world";
    }
}

成功运行项目!
![image.png]image

上传项目到GitHub:https://blog.csdn.net/Saintmm/article/details/122213995

使用代码生成器 mybatisX生成通用代码,将代码复制到对应的模块中。

nacos注册中心

1、导入服务发现依赖

<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2、配置nacos

spring:
	cloud:
		nacos:
			discovery:
				server-addr: 127.0.0.1:8848

微服务网关

微服务网关(cyroj-gateway):Gateway 聚合所有的接口,统一接受处理前端的请求
为什么需要网关

  • 所有的服务端口不同,增大了前端调用成本
  • 所有服务是分散的,你可需要集中进行管理、操作,比如集中解决跨域、鉴权、接口文档、服务的路由、接口安全性、流量染色、限流

Gateway 和 Nginx 的区别

Gateway 是应用层网关:会有一定的业务逻辑(比如根据用户信息判断权限)
Nginx 是接入层网关:比如每个请求的日志,通常没有业务逻辑

1、引入依赖

<!-- Spring cloud gateway 网关依赖-->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-gateway</artifactId>
  <version>3.1.3</version>
</dependency>
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-loadbalancer</artifactId>
  <version>3.1.5</version>
</dependency>

2、配置网关

spring:
  cloud:
    gateway:
      routes:
        - id: cyroj-user-service
          uri: lb://cyroj-user-service
          predicates:
            - Path=/api/user/**
        - id: cyroj-question-service
          uri: lb://cyroj-question-service
          predicates:
            - Path=/api/question/**
        - id: cyroj-judge-service
          uri: lb://cyroj-judge-service
          predicates:
            - Path=/api/judge/**

聚合文档

1、网关引入依赖

<dependency>
  <groupId>com.github.xiaoymin</groupId>
  <artifactId>knife4j-gateway-spring-boot-starter</artifactId>
  <version>4.3.0</version>
</dependency>

2、网关引入配置

knife4j:
  gateway:
    enabled: true
    # 指定服务发现的模式聚合微服务文档,并且是默认`default`分组
    strategy: discover
    discover:
      enabled: true
      # 指定版本号(Swagger2|OpenAPI3)
      version : swagger2
      # 需要排除的微服务(eg:网关服务)

3、其它服务引入依赖

<dependency>
  <groupId>com.github.xiaoymin</groupId>
  <artifactId>knife4j-openapi2-spring-boot-starter</artifactId>
  <version>4.3.0</version>
</dependency>

4、其它服务引入配置

knife4j:
  enable: true

访问网关地址即可查看聚合接口文档:http://localhost:8101/doc.html

跨域问题

在网关服务全局解决跨域配置

@Configuration
public class CorsConfig {

    @Bean
    public CorsWebFilter corsFilter() {
        CorsConfiguration config = new CorsConfiguration();
        config.addAllowedMethod("*");
        config.setAllowCredentials(true);
        // todo 实际改为线上真实域名、本地域名
        config.setAllowedOriginPatterns(Arrays.asList("*"));
        config.addAllowedHeader("*");
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(new PathPatternParser());
        source.registerCorsConfiguration("/**", config);
        return new CorsWebFilter(source);
    }
}

今日小结

  • 完成了网关模块和用户模块的相关功能,能通过网关地址访问到用户模块的接口。
  • 下一个任务是完成题目模块的相关功能(核心业务)。

今日遇到的问题
1、小错误:java: 警告: 源发行版 17 需要目标发行版 17
解决方法1:下图所示,修改到jdk8即可,缺点是每次启动都会回到jdk17
image

解决方法2:添加以下到pom.xml

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.1</version>
        <configuration>
            <source>1.8</source>
            <target>1.8</target>
            <encoding>UTF-8</encoding>
        </configuration>
    </plugin>
</plugins>

2、遇到一个坑:gateway网关访问其它服务出现503错误,即使该服务已经注册到nacos上
原因:网关服务配置文件中使用到了 lb:// 语法,需要引入依赖 loadbalancer 负载均衡,而低版本的网关内嵌的是ribbin 负载均衡。
解决方法:提高网关依赖的版本号,或者引入依赖 loadbalancer。

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

标签:网关,服务,OJ,service,--,spring,cyroj,cloud
From: https://www.cnblogs.com/cyrui/p/17936452.html

相关文章

  • 搜索引擎优化指南:SEO关键字、长尾关键字、短尾关键字以及反向链接
    内容SEOSEO代表“搜索引擎优化”。它是一种数字营销策略,旨在提高网站或网页在搜索引擎未付费结果中的在线可见性。通常,网站在搜索结果页面中排名越高,或在搜索结果列表中显示的频率越高,它将从搜索引擎用户那里获得的访问者就越多。SEO策略可以针对各种类型的搜索,例如图像搜索、......
  • 09使用fdma读写axi-bram
    软件版本:vitis2021.1(vivado2021.1)操作系统:WIN1064bit硬件平台:适用XILINXA7/K7/Z7/ZU/KU系列FPGA登录"米联客"FPGA社区-www.uisrc.com视频课程、答疑解惑!1概述    FDMA是米联客基于AXI4总线协议定制的一个DMA控制器。有了这个IP我们可以统一实现用FPGA代码直接读写PL......
  • 1
     {"cells":[{"cell_type":"code","execution_count":1,"metadata":{},"outputs":[],"source":["importpandasaspd\n","importbaostoc......
  • docker笔记之安装
    本文于2017年上半年完成,发布在个人博客网站上。考虑个人博客因某种原因无法修复,于是在博客园安家,之前发布的文章逐步搬迁过来。最近由于工作关系,接触到了docker技术。为了对docker有更多的了解,于是花时间在家里的Windows10机器上准备了docker的运行环境,方便在业余时间学习新技......
  • [软件测试] 03 白盒 基本路径测试 习题
    提示:篇幅较长,可以使用Ctrl+F,在页面中快速查询关键词(或者你要找的题目)并跳转到指定的位置。关键词:白盒测试,基本路径测试,独立路径,环复杂度单选题基本路径测试是属于(D)。A.黑盒测试方法且是动态测试B.白盒测试方法且是静态测试C.黑盒测试方法且是静态测试D.白盒测试......
  • Provider 四种消费者
    Provider.ofProvider.of方法是Provider库中最常用的获取共享数据的方法之一。它接收一个BuildContext对象和一个泛型类型参数T,会查找Widget树中最近的一个类型为T的Provider对象,并返回它所提供的共享数据。当共享数据发生变化时,它会自动重新构建与该共享数据有依赖关......
  • leetcode 1.两数之和
    leetcode第一题:两数之和1.暴力枚举:最容易想到的方法是枚举数组中的每一个数x,寻找数组中是否存在target-x。当我们使用遍历整个数组的方式寻找target-x时,需要注意到每一个位于x之前的元素都已经和x匹配过,因此不需要再进行匹配。而每一个元素不能被使用两次,所以我们......
  • ES6之解构赋值
    <script>//数组的解构赋值按照索引顺序解构赋值constlistArray=['zhangsan','lisi','wangwu','zhaoliu'];let[san,si,wu,liu]=listArray;console.log(san,si,wu,liu);//res=>zhangsanlisiwa......
  • EasyUI服务器与本地排序
    其他文章列表easyui有个remoteSort属性服务器排序,默认为true,设置为false则本地排序,$("#tbl").datagrid({sortName:"createDate",//定义那些列可以排序,多个列用逗号隔开sortOrder:"desc",//ascremoteSort:true,//默认为true可以不填column:......
  • 07 AXI-Lite-Master读写AXI-Lite-Slave
    软件版本:vitis2021.1(vivado2021.1)操作系统:WIN1064bit硬件平台:适用XILINXA7/K7/Z7/ZU/KU系列FPGA登录"米联客"FPGA社区-www.uisrc.com视频课程、答疑解惑!1概述基于前面5篇文章中5个实验,我们已经掌握了AXI4总线协议,现在我们编写一个自定义的AXI-Lite-SlaveGPIOIP,并且用编......