Git Product home page Git Product logo

goodskill's Introduction

前言

License Java CI with Maven codecov CodeQL

项目命名为 goodsKill 一方面有商品秒杀的意思(好像有点chinglish的味道),另外也可理解为 good skill,本项目就是希望搭建一套完整的项目框架,把一些好的技术和开发技巧整合进来(偏向于后端技术),方便学习和查阅。

本项目为模拟秒杀项目,提供统一秒杀模拟请求接口,技术上整体采用SpringMVC + Mybatis持久层框架,采用Dubbo3.x[1],服务注册发现以及配置中心使用Nacos,支持数据库分库分表、分布式事务,使用状态机完成数据状态间的转换(基于Spring Statemachine实现)。

💎 分支介绍

master分支基于最新Spring Cloud 2023.x + Spring Boot 3.x + JDK21体系构建,目前仅保留核心的模拟秒杀API接口,如需使用Spring Boot 2.7.x + JDK11版本可以切换到tag v2.7.4(支持登录注册以及简单的后台管理功能)。master分支目前升级改造中,功能不够稳定,如遇代码报错建议使用老版本。

本项目功能目前比较简陋且有很多不完善的地方,真实的秒杀场景远比本项目中的实现方式复杂,本项目省略了真实场景中的部分技术实现细节,目前仅作学习参考之用,如果觉得本项目对你有帮助的请多多star支持一下👍~~。

附:码云项目链接 https://gitee.com/techa/goodsKill,clone速度慢的用码云仓库拉吧,不定期同步到码云~

✨ 技术选型

使用的工具或框架 名称 官网

Spring Boot

Spring Boot框架

https://spring.io/projects/spring-boot

MyBatis-Plus

MyBatis增强工具

https://mp.baomidou.com/

ZooKeeper

分布式协调服务

http://zookeeper.apache.org/

Redis

分布式缓存数据库

https://redis.io/

Kafka

消息队列

http://kafka.apache.org/

RabbitMQ

消息队列

https://www.rabbitmq.com/

MongoDB

Mongo数据库

https://www.mongodb.com/

MySQL

MySQL数据库

https://www.mysql.com/

Elasticsearch

全文搜索引擎

https://www.elastic.co

Sharding-JDBC

分库分表组件

https://shardingsphere.apache.org

Spring Cloud Alibaba

Cloud Alibaba组件

https://github.com/alibaba/spring-cloud-alibaba

Apache Dubbo

RPC服务远程调用框架

https://github.com/apache/dubbo

Spring Cloud Gateway

网关组件

https://spring.io/projects/spring-cloud-gateway

Seata

分布式事务解决方案

http://seata.io/zh-cn/index.html

Spring Security OAuth2.0

OAuth2.0授权组件

https://spring.io/projects/spring-security-oauth

GraphQL

一种用于 API 的查询语言

https://docs.spring.io/spring-graphql/docs/current/reference/html

Spring Statemachine

Spring 状态机

https://spring.io/projects/spring-statemachine

Sa-Token

轻量级权限认证框架

https://sa-token.cc/

Flyway

数据库版本控制工具

https://flywaydb.org/

MinIO

对象存储服务

https://min.io/

📝 项目模块介绍

goodsKill
|--goodskill-admin                          ||SpringBoot Admin监控服务端,支持Spring Cloud微服务发现
|--goodskill-gateway                        ||微服务API网关,统一服务鉴权,支持动态路由加载
|--goodskill-order-provider                 ||订单服务提供者
|--goodskill-seckill-provider               ||秒杀服务提供者
|--goodskill-spring-boot-starter            ||项目配置自动装配
|--goodskill-common                         ||公共服务(目前包含minio上传下载功能)
|--goodskill-web                            ||提供秒杀模拟接口访问
|--goodskill-job                            ||elastic-job定时任务
|--goodskill-seata                          ||集成nacos+dubbo+shardingjdbc+seata的分布式事务解决方案示例
|--goodskill-auth                           ||auth登录以及授权模块
|   |--auth-service                         ||基于Sa-Token框架的用户登录授权服务
    |--oauth2-auth-server                   ||oauth2.0登录授权服务端,自定义的登录授权服务
    |--oauth2-resource-server               ||oauth2.0资源服务端,自定义的登录授权服务

🔥🔥 秒杀方案

目前实现了几种秒杀方案,通过SeckillMockController提供测试接口

聚合网关Openapi文档地址: http://localhost/doc.html#/home(需要开启网关服务)

Spring Boot Admin应用监控地址: http://www.goodskill.com:19031, 登录用户名密码:user/123456

  • 场景一:Sychronized同步锁实现

  • 场景二:Redisson分布式锁实现

  • 场景三:ActiveMQ实现(已废弃)

  • 场景四:Kafka消息队列实现

  • 场景五:数据库原子性更新

  • 场景六:实时等待秒杀处理结果(已废弃)

  • 场景七:ZooKeeper分布式锁

  • 场景八:使用Redis进行秒杀商品减库存操作,秒杀结束后异步发送MQ,使用MongoDB完成数据落地

  • 场景九:Spring Cloud Stream实现

  • 场景十:Sentinel限流+数据库原子性更新(需搭配sentinel控制台配置资源名limit的流控规则)

可在web控台查看秒杀结果,打印信息类似:
2021-04-14 21:58:59.857  INFO [goodskill-web,df43cc8f59291c48,df43cc8f59291c48] 15808 --- [           main] o.s.w.controller.SeckillMockController   : 秒杀场景二(redis分布式锁实现)开始时间:Wed Apr 14 21:58:59 CST 2021,秒杀id:1000
2021-04-14 21:59:00.094  INFO [goodskill-web,144aa7910cca9520,2821cb8d62c5a908] 15808 --- [AClOSzbugzYng-1] o.s.w.s.c.SeckillMockResponseListener    : 秒杀活动结束,秒杀场景二(redis分布式锁实现)时间:Wed Apr 14 21:59:00 CST 2021,秒杀id:1000
2021-04-14 21:59:00.101  INFO [goodskill-web,144aa7910cca9520,2821cb8d62c5a908] 15808 --- [AClOSzbugzYng-1] o.s.w.s.c.SeckillMockResponseListener    : 最终成功交易笔数统计中。。。
2021-04-14 21:59:01.616  INFO [goodskill-web,144aa7910cca9520,2821cb8d62c5a908] 15808 --- [AClOSzbugzYng-1] o.s.w.s.c.SeckillMockResponseListener    : 最终成功交易笔数统计中。。。
2021-04-14 21:59:03.129  INFO [goodskill-web,144aa7910cca9520,2821cb8d62c5a908] 15808 --- [AClOSzbugzYng-1] o.s.w.s.c.SeckillMockResponseListener    : 最终成功交易笔数:10
2021-04-14 21:59:03.130  INFO [goodskill-web,144aa7910cca9520,2821cb8d62c5a908] 15808 --- [AClOSzbugzYng-1] o.s.w.s.c.SeckillMockResponseListener    : 历史任务耗时统计:StopWatch '': running time = 36159894800 ns
---------------------------------------------
ns         %     Task name
---------------------------------------------
4492195700  012%  秒杀场景四(kafka消息队列实现)
3164155900  009%  秒杀场景八(秒杀商品存放redis减库存,异步发送秒杀成功MQ,mongoDb数据落地)
6219218300  017%  秒杀场景十(Sentinel限流+数据库原子性更新)
9189080600  025%  秒杀场景七(zookeeper分布式锁)
3135926500  009%  秒杀场景五(数据库原子性更新update set num = num -1)
3342791800  009%  秒杀场景九(基于springcloud stream rabbitmq)
3343433700  009%  秒杀场景一(sychronized同步锁实现)
3273092300  009%  秒杀场景二(redis分布式锁实现)

🧰 开发环境版本说明

  • JDK: OpenJDK21

  • Sharding-JDBC: 5.5.0

  • SpringCloud: 2023.x.x

  • SpringBoot: 3.2.x

  • SpringCloudAlibaba: 2023.x.x

  • Apache Dubbo: 3.x

  • 使用的Docker镜像

    镜像 版本 端口 用户名密码

    Nacos

    2.3.2-slim

    8848

    nacos:nacos

    Redis

    latest

    6379

    密码:123456

    Kafka

    3.1.1

    9092

    KafkaManager

    latest

    9001:9000

    Mongo

    6.0.7

    27017

    MySQL

    8.0.29

    3306

    root:Password123

    Zookeeper

    3.6.2

    2181

    Elasticsearch

    7.17.3

    9200 9300

    Kibana

    7.17.3

    5601

    RabbitMQ

    latest

    5672 15672

    MinIO

    latest

    9000

    root:password

🎯 快速开始

  • 项目根目录goodsKill中执行

      mvn clean install
      或
      #跳过单元测试
      mvn clean install -DskipTests
  • 默认端口启动nacos、redis、mysql、rabbitmq、kafka、zookeeper、elasticsearch,或者使用docker-compose[2]命令:

      docker-compose -f goodskill-simple.yml up -d
  • 进入goodskill-web/src/main/sql目录,找到seckill.sql文件,在本地mysql数据库中建立seckill仓库并执行完成数据初始化操作

    ⚠️
    docker-compose启动MySQL镜像时会自动执行初始化脚本,如已执行过上一步本步骤可跳过
  • 配置host

     127.0.0.1       kafka
     127.0.0.1       nacos
     127.0.0.1       redis
     127.0.0.1       mysql
     127.0.0.1       zookeeper
     127.0.0.1       mongo
     127.0.0.1       elasticsearch
     127.0.0.1       rabbitmq
     127.0.0.1       logstash
     ##如果网关服务部署在远程机器,此处改为相应的远程机器ip
     127.0.0.1       www.goodskill.com
  • main方法运行OrderApplication类(订单服务)

  • main方法运行SeckillApplication类(秒杀管理服务提供者)

  • main方法运行SampleWebApplication类(模拟秒杀web服务)

  • 发送一个秒杀模拟请求: 秒杀活动id 1000,商品数量10,执行20次购买操作,使用sychronized同步锁执行,例如:

    可直接使用以下命令发送模拟秒杀请求,每个秒杀活动seckillId对应唯一的一个商品id,每次执行接口时会有一个库存初始化动作,接口执行完成后可重复调用

    Example 1. 使用sychronized同步锁执行
    curl -X POST "http://www.goodskill.com:8080/sychronized" \
    -H "accept: */*" -H "Content-Type: application/json" -d \
    "{ \"requestCount\": 20, \"seckillCount\": 10, \"seckillId\": 1000}"
    Example 2. 使用Redisson分布式锁执行
    curl -X POST "http://www.goodskill.com:8080/redisson" \
    -H "accept: */*" -H "Content-Type: application/json" -d \
    "{ \"requestCount\": 20, \"seckillCount\": 10, \"seckillId\": 1000}"
    Example 3. 使用Redisson分布式锁执行,支持动态配置后台线程池核心线程数以及最大线程数
    curl --location --request POST 'http://www.goodskill.com:8080/limit' \
    --header 'User-Agent: apifox/1.0.0 (https://www.apifox.cn)' \
    --header 'Content-Type: application/json' \
    --data-raw '{
        "maxPoolSize": 10,
        "seckillId": 1000,
        "corePoolSize": 2,
        "seckillCount": 100,
        "requestCount": 120
    }'

    请求默认异步执行,可在控制台查看执行日志,如果最终成功交易笔数等于商品数量10则表示没有出现超卖或者少卖问题

🕹️️ 启动其他可选项目步骤

在快速开始部分基础上增加以下步骤即可启动一个完整项目

❓常见问题

  1. docker es镜像启动失败

    出现此问题一般为linux环境,运行以下命令即可 sysctl -w vm.max_map_count=262144 ,或者修改/etc/sysctl.conf文件,追加以下配置:

    grep vm.max_map_count /etc/sysctl.conf
    vm.max_map_count=262144
  2. 如何使用本项目自定义的OAuth2.0授权服务器进行登录授权?

    待完善。。

  3. 项目集成的各个框架之间目前的兼容性如何?

    本项目目前依赖的各个主流框架的版本比较新,尚未经过完整测试[3]

  4. 服务启动控制台报ERROR日志 no available service found in cluster 'default', please make sure registry config correct and keep your seata server running 如何解决?

    启动seata-server服务即可(docker-compose.yml文件中已提供),可参照Seata官网添加nacos相关配置。如未使用分布式事务,可忽略该错误,不影响服务正常运行

  5. docker-compose无法拉取镜像

    hub.docker被墙,国内可使用阿里云镜像加速器,具体操作见 阿里云镜像加速器

  6. 使用JDK17以上启动项目失败

    启动时添加以下jvm参数,例如:

    --add-opens java.base/java.lang=ALL-UNNAMED
    --add-opens java.base/java.util=ALL-UNNAMED
    --add-opens java.base/java.util.concurrent=ALL-UNNAMED
    --add-opens java.base/java.math=ALL-UNNAMED
    --add-opens java.base/sun.reflect.generics.reflectiveObjects=ALL-UNNAMED

🖲️ 状态机说明

目前秒杀活动状态的控制基于Spring Statemachine状态机实现,使用状态机的优点:

  • 统一控制活动状态,便于状态的集中维护;

  • 防止业务状态被随意更改,保证状态的可控更新;

状态机流程图

image

📚分库分表情况说明

数据库 是否分库 分库字段 是否分表 分表字段

success_killed

MySQL

是(同一服务器中,分为seckill和seckill_01两个库)

seckill_id

是(分为success_killed_0,success_kill_1两张表)

user_phone

📢
其他表均未分库分表,默认使用seckill作为主库

API接口说明

image

💻相关页面展示

模拟秒杀接口测试

image

📑数据库表结构

image

📖参考文档


1. 由于SpringCloudAlibaba官方暂未支持Dubbo 3.x,本项目采用dubbo-spring-boot-starter集成
3. 附 SpringCloudAlibaba兼容版本说明

goodskill's People

Contributors

codacy-badger avatar dependabot[bot] avatar huoxi-any avatar techa03 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

goodskill's Issues

网关使用kt问题

open idea部署,网关用的是kt,网关启动好没报错。但是网关页面访问直接404

快速开始启动SampleWebJspApplication失败

拉的master分支代码,启动web服务报错同时gooskill服务也报错,Caused by: java.lang.NoSuchMethodError: 'org.apache.dubbo.rpc.RpcContext org.apache.dubbo.rpc.RpcContext.getServerContext()',看错误信息应该是seata里没有这个方法

SpringBoot分支GoodsKillRpcServiceApplication启动报错

错误信息如下:

12:04:06.838 [main] ERROR org.seckill.util.common.util.AESUtil - 
javax.crypto.IllegalBlockSizeException: Input length must be multiple of 16 when decrypting with padded cipher
	at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:936)
	at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:847)
	at com.sun.crypto.provider.AESCipher.engineDoFinal(AESCipher.java:446)
	at javax.crypto.Cipher.doFinal(Cipher.java:2165)
	at org.seckill.util.common.util.AESUtil.aesDecode(AESUtil.java:100)
	at org.seckill.util.common.util.EncryptPropertyPlaceholderConfigurer.convertProperty(EncryptPropertyPlaceholderConfigurer.java:23)
	at org.springframework.beans.factory.config.PropertyResourceConfigurer.convertProperties(PropertyResourceConfigurer.java:106)
	at org.springframework.beans.factory.config.PropertyResourceConfigurer.postProcessBeanFactory(PropertyResourceConfigurer.java:83)
	at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:286)
	at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:166)
	at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:705)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:531)
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775)
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:316)
	at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:139)
	at org.seckill.service.GoodsKillRpcServiceApplication.main(GoodsKillRpcServiceApplication.java:24)

No SecurityManager accessible to the calling code?找不到SecurityUtils这个类,是Shiro过滤器的启动顺序问题吗?

博主您好,我看到您提到由于Shiro兼容性问题以及个人精力有限已移除前端JSP页面、登录注册以及后台管理功能。我在启动Web服务访问login登录页面时出现错误:No SecurityManager accessible to the calling code, either bound to the org.apache.shiro.util.ThreadContext or as a vm static singleton.查阅相关资料后还是未能解决,请问这个是您所提到的兼容性问题吗?还是说我在某些地方没有配置好环境所导致的错误,百思不得其解。如果您有时间的话,能否给予我一个回复,万分感激不尽。
最后想咨询一下博主,可否为该项目建一个交流讨论群呢? 我认为这个项目非常具有学习价值,一定会有很多小伙伴加入!

执行mvn clean install报错

H:\workSpace\javaCode\goodsKill-master\goodsKill-master> mvn clean install
[INFO] Scanning for projects...
[WARNING]
[WARNING] Some problems were encountered while building the effective model for com.goodskill:goodskill-web:war:1.0.0-SNAPSHOT
[WARNING] 'version' contains an expression but should be a constant. @ com.goodskill:goodskill-web:${goodskill.version}, H:\workSpace\javaCode\goodsKill-master\goodsKill-master\goodskill-web\pom.xml, line 19, column 11
[WARNING]
[WARNING] Some problems were encountered while building the effective model for com.goodskill:goodskill-service:jar:1.0.0-SNAPSHOT
[WARNING] 'version' contains an expression but should be a constant. @ com.goodskill:goodskill-service:${goodskill.version}, H:\workSpace\javaCode\goodsKill-master\goodsKill-m

                                                                                                                                                                          master\goodskill-spring-boot-provider\goodskill-service\pom.xml, line 6, column 11

[WARNING] 'dependencies.dependency.(groupId:artifactId:type:classifier)' must be unique: com.goodskill:goodskill-common-util:jar -> version (?) vs ${goodskill.version} @ com.g
oodskill:goodskill-service:${goodskill.version}, H:\workSpace\javaCode\goodsKill-master\goodsKill-master\goodskill-spring-boot-provider\goodskill-service\pom.xml, line 193, column 21
[WARNING]
[WARNING] Some problems were encountered while building the effective model for com.goodskill:goodskill-entry:jar:1.0.0-SNAPSHOT
[WARNING] 'version' contains an expression but should be a constant. @ com.goodskill:goodskill-entry:${goodskill.version}, H:\workSpace\javaCode\goodsKill-master\goodsKill-master\goodskill-spring-boot-provider\goodskill-entry\pom.xml, line 5, column 14
[WARNING]
[WARNING] Some problems were encountered while building the effective model for com.goodskill:goodskill-api:jar:1.0.0-SNAPSHOT
[WARNING] 'version' contains an expression but should be a constant. @ com.goodskill:goodskill-api:${goodskill.version}, H:\workSpace\javaCode\goodsKill-master\goodsKill-master\goodskill-spring-boot-provider\goodskill-api\pom.xml, line 5, column 14
[WARNING]
[WARNING] Some problems were encountered while building the effective model for com.goodskill:goodskill-mp-dao:jar:1.0.0-SNAPSHOT
[WARNING] 'version' contains an expression but should be a constant. @ com.goodskill:goodskill-mp-dao:${goodskill.version}, H:\workSpace\javaCode\goodsKill-master\goodsKill-master\goodskill-spring-boot-provider\goodskill-mp-dao\pom.xml, line 13, column 14
[WARNING]
[WARNING] Some problems were encountered while building the effective model for com.goodskill:goodskill-common-api:jar:1.0.0-SNAPSHOT
[WARNING] 'version' contains an expression but should be a constant. @ com.goodskill:goodskill-common-api:${goodskill.version}, H:\workSpace\javaCode\goodsKill-master\goodsKill-master\goodskill-common\goodskill-common-api\pom.xml, line 10, column 14
[WARNING]
[WARNING] Some problems were encountered while building the effective model for com.goodskill:goodskill-common-service:jar:1.0.0-SNAPSHOT
[WARNING] 'version' contains an expression but should be a constant. @ com.goodskill:goodskill-common-service:${goodskill.version}, H:\workSpace\javaCode\goodsKill-master\goodsKill-master\goodskill-common\goodskill-common-service\pom.xml, line 10, column 14
[WARNING] 'build.plugins.plugin.version' for org.springframework.boot:spring-boot-maven-plugin is missing. @ com.goodskill:goodskill-common-service:${goodskill.version}, H:\workSpace\javaCode\goodsKill-master\goodsKill-master\goodskill-common\goodskill-common-service\pom.xml, line 97, column 21
[WARNING]
[WARNING] Some problems were encountered while building the effective model for com.goodskill:goodskill-common-util:jar:1.0.0-SNAPSHOT
[WARNING] 'version' contains an expression but should be a constant. @ com.goodskill:goodskill-common-util:${goodskill.version}, H:\workSpace\javaCode\goodsKill-master\goodsKill-master\goodskill-common\goodskill-common-util\pom.xml, line 13, column 14
[WARNING]
[WARNING] Some problems were encountered while building the effective model for com.goodskill:goodskill-mongo-api:jar:1.0.0-SNAPSHOT
[WARNING] 'version' contains an expression but should be a constant. @ com.goodskill:goodskill-mongo-api:${goodskill.version}, H:\workSpace\javaCode\goodsKill-master\goodsKill-master\goodskill-mongo-provider\goodskill-mongo-api\pom.xml, line 11, column 14
[WARNING]
[WARNING] Some problems were encountered while building the effective model for com.goodskill:goodskill-mongo-service:jar:1.0.0-SNAPSHOT
[WARNING] 'version' contains an expression but should be a constant. @ com.goodskill:goodskill-mongo-service:${goodskill.version}, H:\workSpace\javaCode\goodsKill-master\goodsKill-master\goodskill-mongo-provider\goodskill-mongo-service\pom.xml, line 11, column 14
[WARNING]
[WARNING] Some problems were encountered while building the effective model for com.goodskill:goodskill-chat-provider:jar:1.0.0-SNAPSHOT
[WARNING] 'version' contains an expression but should be a constant. @ com.goodskill:goodskill-chat-provider:${goodskill.version}, H:\workSpace\javaCode\goodsKill-master\goodsKill-master\goodskill-chat-provider\pom.xml, line 10, column 14
[WARNING]
[WARNING] Some problems were encountered while building the effective model for com.goodskill:goodskill-spring-boot-starter:jar:1.0.0-SNAPSHOT
[WARNING] 'version' contains an expression but should be a constant. @ com.goodskill:goodskill-spring-boot-starter:${goodskill.version}, H:\workSpace\javaCode\goodsKill-master\goodsKill-master\goodskill-spring-boot-starter\pom.xml, line 11, column 14
[WARNING]
[WARNING] Some problems were encountered while building the effective model for com.goodskill:goodskill-es-api:jar:1.0.0-SNAPSHOT
[WARNING] 'version' contains an expression but should be a constant. @ com.goodskill:goodskill-es-api:${goodskill.version}, H:\workSpace\javaCode\goodsKill-master\goodsKill-master\goodskill-es-provider\goodskill-es-api\pom.xml, line 11, column 14
[WARNING]
[WARNING] Some problems were encountered while building the effective model for com.goodskill:goodskill-es-service:jar:1.0.0-SNAPSHOT
[WARNING] 'version' contains an expression but should be a constant. @ com.goodskill:goodskill-es-service:${goodskill.version}, H:\workSpace\javaCode\goodsKill-master\goodsKill-master\goodskill-es-provider\goodskill-es-service\pom.xml, line 11, column 14
[WARNING] 'dependencies.dependency.(groupId:artifactId:type:classifier)' must be unique: org.springframework.boot:spring-boot-starter-test:jar -> duplicate declaration of vers
ion (?) @ com.goodskill:goodskill-es-service:${goodskill.version}, H:\workSpace\javaCode\goodsKill-master\goodsKill-master\goodskill-es-provider\goodskill-es-service\pom.xml, line 87, column 21
[WARNING]
[WARNING] Some problems were encountered while building the effective model for com.goodskill:goodskill-es-dao:jar:1.0.0-SNAPSHOT
[WARNING] 'version' contains an expression but should be a constant. @ com.goodskill:goodskill-es-dao:${goodskill.version}, H:\workSpace\javaCode\goodsKill-master\goodsKill-master\goodskill-es-provider\goodskill-es-dao\pom.xml, line 11, column 14
[WARNING]
[WARNING] Some problems were encountered while building the effective model for com.goodskill:goodskill-job:jar:1.0.0-SNAPSHOT
[WARNING] 'version' contains an expression but should be a constant. @ com.goodskill:goodskill-job:${goodskill.version}, H:\workSpace\javaCode\goodsKill-master\goodsKill-master\goodskill-job\pom.xml, line 10, column 14
[WARNING]
[WARNING] Some problems were encountered while building the effective model for com.goodskill:goodskill-gateway:jar:1.0.0-SNAPSHOT
[WARNING] 'version' contains an expression but should be a constant. @ com.goodskill:goodskill-gateway:${goodskill.version}, H:\workSpace\javaCode\goodsKill-master\goodsKill-master\goodskill-gateway\pom.xml, line 11, column 14
[WARNING]
[WARNING] Some problems were encountered while building the effective model for com.goodskill:goodskill-seata:jar:1.0.0-SNAPSHOT
[WARNING] 'version' contains an expression but should be a constant. @ com.goodskill:goodskill-seata:${goodskill.version}, H:\workSpace\javaCode\goodsKill-master\goodsKill-master\goodskill-seata\pom.xml, line 12, column 14
[WARNING]
[WARNING] Some problems were encountered while building the effective model for com.goodskill:oauth2-resource-server:jar:1.0.0-SNAPSHOT
[WARNING] 'version' contains an expression but should be a constant. @ com.goodskill:oauth2-resource-server:${goodskill.version}, H:\workSpace\javaCode\goodsKill-master\goodsKill-master\goodskill-oauth2\oauth2-resource-server\pom.xml, line 12, column 14
[WARNING] 'build.plugins.plugin.version' for org.springframework.boot:spring-boot-maven-plugin is missing. @ com.goodskill:oauth2-resource-server:${goodskill.version}, H:\workSpace\javaCode\goodsKill-master\goodsKill-master\goodskill-oauth2\oauth2-resource-server\pom.xml, line 78, column 21
[WARNING]
[WARNING] Some problems were encountered while building the effective model for com.goodskill:oauth2-auth-server:jar:1.0.0-SNAPSHOT
[WARNING] 'version' contains an expression but should be a constant. @ com.goodskill:oauth2-auth-server:${goodskill.version}, H:\workSpace\javaCode\goodsKill-master\goodsKill-master\goodskill-oauth2\oauth2-auth-server\pom.xml, line 12, column 14
[WARNING] 'build.plugins.plugin.version' for org.springframework.boot:spring-boot-maven-plugin is missing. @ com.goodskill:oauth2-auth-server:${goodskill.version}, H:\workSpace\javaCode\goodsKill-master\goodsKill-master\goodskill-oauth2\oauth2-auth-server\pom.xml, line 78, column 21
[WARNING]
[WARNING] Some problems were encountered while building the effective model for com.goodskill:oauth2-auth-client:jar:3.0.0-SNAPSHOT
[WARNING] 'build.plugins.plugin.version' for org.springframework.boot:spring-boot-maven-plugin is missing. @ line 72, column 21
[WARNING]
[WARNING] Some problems were encountered while building the effective model for com.goodskill:goodskill-oauth2:pom:3.0.0-SNAPSHOT
[WARNING] 'build.plugins.plugin.version' for org.springframework.boot:spring-boot-maven-plugin is missing. @ line 28, column 21
[WARNING]
[WARNING] Some problems were encountered while building the effective model for com.goodskill:goodskill-admin:jar:1.0.0-SNAPSHOT
[WARNING] 'version' contains an expression but should be a constant. @ com.goodskill:goodskill-admin:${goodskill.version}, H:\workSpace\javaCode\goodsKill-master\goodsKill-master\goodskill-admin\pom.xml, line 11, column 14
[WARNING]
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING]
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[WARNING]
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] goodskill [pom]
[INFO] goodskill-spring-boot-provider [pom]
[INFO] goodskill-entry [jar]
[INFO] goodskill-api [jar]
[INFO] goodskill-common [pom]
[INFO] goodskill-common-util [jar]
[INFO] goodskill-spring-boot-starter [jar]
[INFO] goodskill-es-provider [pom]
[INFO] goodskill-es-api [jar]
[INFO] goodskill-web [war]
[INFO] goodskill-mp-dao [jar]
[INFO] goodskill-mongo-provider [pom]
[INFO] goodskill-mongo-api [jar]
[INFO] goodskill-service [jar]
[INFO] goodskill-generator [jar]
[INFO] goodskill-common-api [jar]
[INFO] goodskill-common-service [jar]
[INFO] goodskill-mongo-service [jar]
[INFO] goodskill-chat-provider [jar]
[INFO] goodskill-es-dao [jar]
[INFO] goodskill-es-service [jar]
[INFO] goodskill-job [jar]
[INFO] goodskill-gateway [jar]
[INFO] goodskill-seata [jar]
[INFO] goodskill-oauth2 [pom]
[INFO] oauth2-resource-server [jar]
[INFO] oauth2-auth-server [jar]
[INFO] oauth2-auth-client [jar]
[INFO] goodskill-admin [jar]
[INFO] goodskill-canal [jar]
[INFO]
[INFO] ----------------------< com.goodskill:goodskill >-----------------------
[INFO] Building goodskill 3.0.0-SNAPSHOT [1/30]
[INFO] --------------------------------[ pom ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ goodskill ---
[INFO]
[INFO] --- kotlin-maven-plugin:1.6.10:compile (compile) @ goodskill ---
[WARNING] No sources found skipping Kotlin compile
[INFO]
[INFO] --- kotlin-maven-plugin:1.6.10:test-compile (test-compile) @ goodskill ---
[WARNING] No sources found skipping Kotlin compile
[INFO]
[INFO] --- maven-install-plugin:2.4:install (default-install) @ goodskill ---
[INFO] Installing H:\workSpace\javaCode\goodsKill-master\goodsKill-master\pom.xml to G:\java\base\mavenRes\com\goodskill\goodskill\3.0.0-SNAPSHOT\goodskill-3.0.0-SNAPSHOT.pom
[INFO]
[INFO] ------------< com.goodskill:goodskill-spring-boot-provider >------------
[INFO] Building goodskill-spring-boot-provider 3.0.0-SNAPSHOT [2/30]
[INFO] --------------------------------[ pom ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ goodskill-spring-boot-provider ---
[INFO]
[INFO] --- kotlin-maven-plugin:1.6.10:compile (compile) @ goodskill-spring-boot-provider ---
[WARNING] No sources found skipping Kotlin compile
[INFO]
[INFO] --- kotlin-maven-plugin:1.6.10:test-compile (test-compile) @ goodskill-spring-boot-provider ---
[WARNING] No sources found skipping Kotlin compile
[INFO]
[INFO] --- maven-install-plugin:2.4:install (default-install) @ goodskill-spring-boot-provider ---
[INFO] Installing H:\workSpace\javaCode\goodsKill-master\goodsKill-master\goodskill-spring-boot-provider\pom.xml to G:\java\base\mavenRes\com\goodskill\goodskill-spring-boot-provider\3.0.0-SNAPSHOT\goodskill-spring-boot-provider-3.0.0-SNAPSHOT.pom
[INFO]
[INFO] -------------------< com.goodskill:goodskill-entry >--------------------
[INFO] Building goodskill-entry 1.0.0-SNAPSHOT [3/30]
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ goodskill-entry ---
[INFO] Deleting H:\workSpace\javaCode\goodsKill-master\goodsKill-master\goodskill-spring-boot-provider\goodskill-entry\target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ goodskill-entry ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory H:\workSpace\javaCode\goodsKill-master\goodsKill-master\goodskill-spring-boot-provider\goodskill-entry\src\main\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ goodskill-entry ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 9 source files to H:\workSpace\javaCode\goodsKill-master\goodsKill-master\goodskill-spring-boot-provider\goodskill-entry\target\classes
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] goodskill 3.0.0-SNAPSHOT ........................... SUCCESS [ 0.375 s]
[INFO] goodskill-spring-boot-provider 3.0.0-SNAPSHOT ...... SUCCESS [ 0.016 s]
[INFO] goodskill-entry 1.0.0-SNAPSHOT ..................... FAILURE [ 0.234 s]
[INFO] goodskill-api 1.0.0-SNAPSHOT ....................... SKIPPED
[INFO] goodskill-common 3.0.0-SNAPSHOT .................... SKIPPED
[INFO] goodskill-common-util 1.0.0-SNAPSHOT ............... SKIPPED
[INFO] goodskill-spring-boot-starter 1.0.0-SNAPSHOT ....... SKIPPED
[INFO] goodskill-es-provider 3.0.0-SNAPSHOT ............... SKIPPED
[INFO] goodskill-es-api 1.0.0-SNAPSHOT .................... SKIPPED
[INFO] goodskill-web 1.0.0-SNAPSHOT ....................... SKIPPED
[INFO] goodskill-mp-dao 1.0.0-SNAPSHOT .................... SKIPPED
[INFO] goodskill-mongo-provider 3.0.0-SNAPSHOT ............ SKIPPED
[INFO] goodskill-mongo-api 1.0.0-SNAPSHOT ................. SKIPPED
[INFO] goodskill-service 1.0.0-SNAPSHOT ................... SKIPPED
[INFO] goodskill-generator 1.0.0 .......................... SKIPPED
[INFO] goodskill-common-api 1.0.0-SNAPSHOT ................ SKIPPED
[INFO] goodskill-common-service 1.0.0-SNAPSHOT ............ SKIPPED
[INFO] goodskill-mongo-service 1.0.0-SNAPSHOT ............. SKIPPED
[INFO] goodskill-chat-provider 1.0.0-SNAPSHOT ............. SKIPPED
[INFO] goodskill-es-dao 1.0.0-SNAPSHOT .................... SKIPPED
[INFO] goodskill-es-service 1.0.0-SNAPSHOT ................ SKIPPED
[INFO] goodskill-job 1.0.0-SNAPSHOT ....................... SKIPPED
[INFO] goodskill-gateway 1.0.0-SNAPSHOT ................... SKIPPED
[INFO] goodskill-seata 1.0.0-SNAPSHOT ..................... SKIPPED
[INFO] goodskill-oauth2 3.0.0-SNAPSHOT .................... SKIPPED
[INFO] oauth2-resource-server 1.0.0-SNAPSHOT .............. SKIPPED
[INFO] oauth2-auth-server 1.0.0-SNAPSHOT .................. SKIPPED
[INFO] oauth2-auth-client 3.0.0-SNAPSHOT .................. SKIPPED
[INFO] goodskill-admin 1.0.0-SNAPSHOT ..................... SKIPPED
[INFO] goodskill-canal 3.0.0-SNAPSHOT ..................... SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.860 s
[INFO] Finished at: 2022-05-27T15:38:46+08:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project goodskill-entry: Fatal error compiling: 无效的目标发行: 11 -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
[ERROR]
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR] mvn -rf :goodskill-entry

### Welcome!

Welcome!

  • Yes, I've searched similar issues on GitHub and didn't find any.
  • Yes, I've searched similar issues on the Traefik community forum and didn't find any.

What did you expect to see?

Hi,
First of all - I really appreciate the work you've all done on Traefik - I think it's a great project. I've started using it not a long time ago and I love it.

I have a problem with access log - I cannot find any solution, to log real IP when the requests are proxied through CloudFlare. In access logs I can only see the CloudFlare loadbalancers IPs.

I know there are middlewares which rewrite CloudFlare headers for services, but I couldn't find a plugin which would put the real IP in access log.

I know that I can also use JSON format for access log and include headers, like X-Forwarded-For, but I really want to stick with the common format and see the real IPs there.

I've tried configuring ProxyProtocol, but it doesn't seem to help.

I don't have much experience with Go, and Traefik is a pretty big project, but from what I can tell, in pkg/middlewares/accesslog/logger.go on line 227, req.RemoteAddr is used:

...
core[ClientAddr] = req.RemoteAddr
...

I imagine that this is the part, where the source IP for a request is determined for access log.

Can you point me to a valid solution or determine whether that's a feature that could be implemented directly in Traefik?

Originally posted by @artur-borys in traefik/traefik#10002

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.