# PROJECT_JAVA **Repository Path**: nittun/project_java ## Basic Information - **Project Name**: PROJECT_JAVA - **Description**: JAVA工程 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2023-12-04 - **Last Updated**: 2024-08-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

# Getting Started > 作者简介 ``` I'M Eddy,THKS For Discovering ``` =>>> [personal profile](./doc/src/main/file/self_introduction.md) =>>> [some notes](./doc/src/main/file/note01.md) --- # 项目名称 **清心寂技** ## 项目介绍 **背景**: 本项目旨在通过实践集成软件开发中的关键技术和工具,构建一个包括业务系统演示、微服务架构、消息队列、配置管理、任务调度、容器化等技术的综合架构Demo。 **目标**: - 提供一个参考框架,帮助开发者理解和实践微服务架构及相关技术。 - 促进知识共享和技术交流。 - 构建系统架构Demo,便于快速部署、验证。 **主要特点**: - **微服务架构**:采用springCloud微服务架构设计,提高系统的可维护性和可扩展性。 - **技术栈**:整合了业务系统Demo、API网关(Gateway)、Nginx、MySQL、Redis Cluster、RocketMQ、XXL-JOB、Nacos、Eureka、Docker等技术栈,覆盖了从数据存储、服务发现、配置管理到消息队列和任务调度等多个方面。 - **容器化部署**:通过Docker容器化技术,实现快速部署和环境一致性。 - **高可用设计**:利用Redis Cluster和消息队列RocketMQ构建高可用系统。 - **动态服务发现与配置管理**:结合Nacos和Eureka实现服务的动态发现和配置管理,增强系统的灵活性和可靠性。 - **任务调度与管理**:通过XXL-JOB实现分布式任务调度,优化任务执行效率。 **实施策略**: 项目从实际工作及同行伙伴的沟通思考分析开始,逐步进行技术选型、架构设计、功能实现、容器化部署、测试验证到文档编写和社区分享等阶段。每个阶段都将重点关注实践经验的总结和技术难题的解决方案。 **预期成果**: - 一个集成了多种技术的系统架构Demo,可作为快速搭建和演示微服务架构的参考。 - 一系列关于架构设计、技术实现和问题解决的文档和博客文章,供社区成员学习和参考。 **后期计划**: - **安全策略**:考虑集成安全机制,如API安全、服务间通信加密等系统的安全性。 - **性能优化**:计划进行系统性能分析和优化,包括缓存策略、数据库优化等,以提高系统的响应速度和处理能力。 - **用户界面**:考虑增加一个用户友好的前端界面。 通过这个项目,希望能够为开发者和企业提供一个全面了解和快速部署现代软件技术的实践平台,同时促进技术知识的共享和传播。 ## 模块介绍 + V1.0.0 架构

===>>>点击展开详情<<<=== 推荐部署:
RedisCluster: 5 master + 10 slave redis:6.0.6
RocketMQ: 3 master + 3slave (同步双写、异步刷盘) 4.7版本
NACOS:集群部署 nacos:2.2.3
xxl-job: 高可用2主集群 + nginx代理
mysql: 主从模式 mysql:5.7
``` 最大支持并发数理论依据: 链路: 1、client【web、app】 --> DNS --> F5 --> LVS --> Nginx --> SpringBoot_Project【tomcat】 2、client【web、app】 --> DNS --> Nginx --> SpringBoot_Project【tomcat】 网络层:DNS(配置多个F5的ip,实现地理级别负载均衡) 反向代理层:F5 硬件负载均衡器 QPS为百万级别 最大并发数支持亿级别 LVS 内核负载均衡 QPS为十万级别 最大并发数支持十万级别 Nginx 软件负载均衡 QPS为万级别 最大并发数支持万级别 tomcat 默认线程为150的并发量, springboot_project 集群部署,结合CPU性能考虑生产实际部署情况... ``` + V2.0.0 架构 (待更新...) ### XXL-JOB 分布式调度中心 + 源码地址:https://gitee.com/xuxueli0323/xxl-job.git + 版本:V2.2.0 ``` 配置项: port:8007 数据库:mysqlxxljob3307 docker部署 生产环境高可用部署:2主 + nginx代理 ``` 作为分布式定时任务调用,支持单机、分片、集群等处理模式; 改造点:可以考虑通过rocketMq进行交互【待定】 ### nacos、eureka + 关注eureka_demo ``` 注册中心、配置中心相关 1、nacos VS eureka 2、nacos 版本选择: V2.3.0 文档地址: https://nacos.io/zh-cn/docs/v2/quickstart/quick-start.html 部署方式: nacos Docker 单机版 docker-compose -f example/standalone-mysql-5.7.yaml up 生产部署方式:集群部署 docker-compose -f example/cluster-hostname.yaml up 3、nacos V2.3.0 版本 (记录之时稳定版本为:2.2.3) 地址: http://127.0.0.1:8848/nacos ``` ### business_parent_demo ==>>> [README](./business_parent_demo/README.md) + 业务系统demo框架 + jdk1.8 、springboot:2.1.6.RELEASE、springcloud:Greenwich.RELEASE + mysql:5.7、mybatis/mybatisplus、redis ``` /project |-- module1 | |-- src | |-- tests | |-- ... |-- module2 | |-- src | |-- tests | |-- ... |-- ... |-- README.md |-- LICENSE |-- ... ``` #### business_parent_dm ==>>> [README](./business_parent_dm/README.md) #### business_parent_es ==>>> [README](./business_parent_es/README.md) ### docker_doc_demo docker相关记录及配置分享: ==>>> [README](./docker_doc_demo/README.md)
===>>>【click】:show docker containers list<<<===

``` record: 1、 SpringBoot项目Docker容器化部署: 目的:为验证项目连接rediscluster集群的情况,将项目也打包成镜像部署到docker容器中; 方式:dockerfile --步骤: step1:springboot项目构建生成jar包 step2:创建dockerfile step3:构建docker镜像 step4:运行docker容器 ( Apache Maven 3.6.3 Docker version 24.0.7 ) docker基础镜像:openjdk:8-jdk-alpine / openjdk:11-jdk-slim 【说明】: openjdk:8-jdk-alpine是一个基于Alpine Linux的OpenJDK 8镜像,既小巧又安全; openjdk:11-jdk-slim是基于Debian的Slim版OpenJDK 11镜像,也是为了减少体积和提高安全性。 实际生产中,选择docker镜像考虑因素: 大小性能、安全性、稳定性质、兼容性、版本、官方支持维护等... ``` ### RocketMq + https://rocketmq.apache.org/zh/docs/quickStart/01quickstart/ + https://github.com/apache/rocketmq + 官网:https://rocketmq.apache.org/zh/ + RocketMQ与Spring Boot集成:https://github.com/apache/rocketmq-spring ``` 1、5.0版本 VS 4.0版本 https://rocketmq.apache.org/zh/version#whats-new-in-rocketmq-50 RocketMQ 5.0 引入了全新的弹性无状态代理模式, 将当前的Broker职责进行拆分,对于客户端协议适配、权限管理、消费管理等计算逻辑进行抽离,独立无状态的代理角色提供服务, Broker则继续专注于存储能力的持续优化。 [步骤]: 1、docker pull apache/rocketmq:5.1.4 2、docker run -it -d --name mqnamesrv --net=host apache/rocketmq:5.1.4 ./mqnamesrv 3、docker run -it -d --name mqbroker --net=host --mount type=bind,source=D:/docker/rocketmq/store,target=/home/rocketmq/store apache/rocketmq:5.1.4 ./mqbroker -n localhost:9876 Apache RocketMQ Dashboard 1、docker pull apacherocketmq/rocketmq-dashboard:latest 2、docker run -d --name rocketmq-dashboard -e "JAVA_OPTS=-Drocketmq.namesrv.addr=127.0.0.1:9876" -p 8090:8080 -t apacherocketmq/rocketmq-dashboard:latest #使用host网络部署 docker run -it -d --name rocketmq-dashboard-host --net=host -e "JAVA_OPTS=-Drocketmq.namesrv.addr=127.0.0.1:9876" apacherocketmq/rocketmq-dashboard:latest #复制nameserver启动脚本 docker cp mqnamesrv:/home/rocketmq/rocketmq-5.1.4/bin/runserver.sh D:\docker\rocketmq\nameserver\bin\runserver.sh #启动nameserver容器 docker run -d --privileged=true --restart=always --name rocketmq-namesrv --net=host -v D:\docker\rocketmq\nameserver\bin\runserver.sh:/home/rocketmq/rocketmq-5.1.4/bin/runserver.sh -e "MAX_HEAP_SIZE=256M" -e "HEAP_NEWSIZE=128M" apache/rocketmq:5.1.4 ./mqnamesrv #复制broker启动脚本 docker cp mqbroker:/home/rocketmq/rocketmq-5.1.4/bin/runbroker.sh D:\docker\rocketmq\broker\bin\runbroker.sh #添加配置 #启动容器 docker run -d --privileged=true --restart=always --name rocketmq-broker --net=host -v D:\docker\rocketmq\broker\bin\runbroker.sh:/home/rocketmq/rocketmq-5.1.4/bin/runbroker.sh -v D:\docker\rocketmq\broker\conf\broker.conf:/home/rocketmq/broker.conf -v D:\docker\rocketmq\broker\store:/root/store -e "MAX_HEAP_SIZE=512M" -e "HEAP_NEWSIZE=256M" apache/rocketmq:5.1.4 ./mqbroker -c /home/rocketmq/broker.conf --brokerRole = SYNC_MASTER "同步双写"保证不丢失数据 --flushDiskType = ASYNC_FLUSH "异步刷盘" docker run -d --restart=always --name rocketmq-dashboard --net=host -e "JAVA_OPTS=-Xmx256M -Xms256M -Xmn128M -Drocketmq.namesrv.addr=192.168.0.2:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" apacherocketmq/rocketmq-dashboard:latest #验证 docker network create -d bridge --subnet 172.172.0.0/24 --gateway 172.172.0.1 rocketmq-net docker run -d --privileged=true --restart=always --name rocketmq-namesrv -p 9876:9876 --net=rocketmq-net -v D:\docker\rocketmq\nameserver\bin\runserver.sh:/home/rocketmq/rocketmq-5.1.4/bin/runserver.sh -e "MAX_HEAP_SIZE=256M" -e "HEAP_NEWSIZE=128M" apache/rocketmq:5.1.4 sh mqnamesrv docker run -d --privileged=true --restart=always --name rocketmq-broker -p 10911:10911 -p 10909:10909 --net=rocketmq-net -v D:\docker\rocketmq\broker\bin\runbroker.sh:/home/rocketmq/rocketmq-5.1.4/bin/runbroker.sh -v D:\docker\rocketmq\broker\conf\broker.conf:/home/rocketmq/broker.conf -v D:\docker\rocketmq\broker\store:/root/store -e "MAX_HEAP_SIZE=512M" -e "HEAP_NEWSIZE=256M" apache/rocketmq:5.1.4 sh mqbroker -c /home/rocketmq/broker.conf docker run -d --restart=always --name rocketmq-dashboard -p 8088:8080 --net=rocketmq-net -e "JAVA_OPTS=-Xmx256M -Xms256M -Xmn128M -Drocketmq.namesrv.addr=192.168.0.2:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" apacherocketmq/rocketmq-dashboard:latest ```
===>>>【click】:show details <<<===

### springcloud-gateway + spring_cloud_gateway_demo ==>>> [README](./spring_cloud_gateway_demo/README.md) ``` gateway网关,用于权限校验、限流、路由转发等 ``` + 限流功能及验证 ``` RedisRateLimiter request-rate-limiter 过滤,结合redis一起使用来存储和更新限流数据 【eg】: redis-rate-limiter.replenishRate: 1 # 每秒钟向令牌桶中添加的令牌数量 redis-rate-limiter.burstCapacity: 20 # 令牌桶能够累积保存的最大令牌数 请求到达 --> RedisRateLimiter从令牌桶尝试去取出一个令牌 --> 没有足够的令牌,则请求拒绝(429 Too Many Requests) 初始化:burstCapacity会加满,然后按照每秒添加replenishRate数量的令牌到令牌桶里面,达到上限后的会被丢弃。 --验证方式: 初始化后,按照令牌桶的容量,发起相应数量+5的并发请求,验证理论上是否有4个被拒绝的(burstCapacity+replenishRate); 然后再发起请求,关注是否有大量被拒绝的(此时令牌在添加至令牌桶) ```
===>>>【click】:show details <<<===

### ELK搭建 + 版本号: elasticsearch:7.10.0 、kibana:7.10.0 、 logstash:7.10.0 + 官网:https://www.elastic.co/guide/index.html + IK分词:https://github.com/medcl/elasticsearch-analysis-ik + 介绍:
>Elasticsearch : The core distributed search and analytics engine at the heart of the Elastic platform.
>Logstash : A data collection engine with real-time pipelining capabilities.
>Kibana : Kibana gives shape to your data and is the extensible user interface of the Elastic platform.
``` 前期需求分析调研阶段,通过业务系统提供的大量日志及数据信息进行语料的提取和统计,为后续的工作环节及排序做准备; 结合ES和kibana以及ik分词器做相应的初筛; 由于之前接触过ELK日志,因此这部分内容一起作为回顾, 后期再mysql数据同步到ES的过程打算通过使用Logstash的JDBC插件定期从MySQL查询数据并将其推送到Elasticsearch ``` + 首先搭建本地ELK的服务吧>>> ``` 1、启动一个容器 docker run -d --name elasticsearch1 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.10.0 docker run -d --name kibana -p 5601:5601 --link elasticsearch -e "ELASTICSEARCH_HOSTS=http://192.168.0.2:9200" docker.elastic.co/kibana/kibana:7.10.0 2、复制相关配置,挂载到本地 docker cp elasticsearch1:/usr/share/elasticsearch/data/ D:\docker\elasticsearch\data docker cp elasticsearch1:/usr/share/elasticsearch/config/ D:\docker\elasticsearch\config docker cp elasticsearch1:/usr/share/elasticsearch/plugins/ D:\docker\elasticsearch\plugins 3、部署并挂载新的容器 docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -v D:\docker\elasticsearch\config:/usr/share/elasticsearch/config -v D:\docker\elasticsearch\data:/usr/share/elasticsearch/data -v D:\docker\elasticsearch\plugins:/usr/share/elasticsearch/plugins docker.elastic.co/elasticsearch/elasticsearch:7.10.0 ``` + 应用系统接入ELK ``` 过程大致如下: 1、配置应用系统中日志文件对应的目录和文件,以及日志的输出格式 2、配置Logstash的input、filter 和 output 3、Kibana中对应的索引与 2 中的output对应的索引一致,然后可以使用日志分析工具对其进行可视化分析 ```
===>>>【click】:show details <<<===

## DM对话管理 ``` 由于近期项目涉及到AI对话这块的系统设计,跟同事一起对DM这块进行设计,有了一些自己的思考, 于是开设一个专门的目录记录一下 ``` =>>> [DM note](./doc/src/main/file/note02.md) ## 安装和运行 这里可以提供安装和运行项目所需的步骤。 ## 使用示例 提供一些使用示例,让用户更容易上手。 ## 贡献 如果你希望为项目贡献代码,提供一些贡献指南。 ## 变更日志 详细记录项目的变更历史,包括每个版本的新增功能、修复的问题等。 | Date | Record | Editor | |-----|-----|-----| | 1 | A | x | | 2 | B | y | | 3 | C | z | ## 许可证 说明项目的许可证信息。