# init **Repository Path**: jingyuli/init ## Basic Information - **Project Name**: init - **Description**: 微服务架构,多租户平台架构学习与探索 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-11-27 - **Last Updated**: 2023-01-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # init ## 介绍 微服务架构,多租户平台架构学习与探索 Java语言 ## 软件架构 分布式架构 ## 软件环境 服务器:CentOS-7-x86_64-DVD-2009.iso:http://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/ Redis下载:https://download.redis.io/releases/redis-6.2.7.tar.gz Jdk8版本:jdk-8u291-linux-x64.tar.gz,目前Oracle官网不支持免费下载了,这是之前下载的 mysql版本:mysql-5.7.33-linux-glibc2.12-x86_64.tar.gz spring-cloud-alibaba 组件版本关系:https://developer.aliyun.com/article/786541 ## 安装教程 ### Linux安装Jdk8 ```shell tar -zxvf jdk-8u291-linux-x64.tar.gz -C /opt/module/ vi /etc/profile ``` #### 配置Java环境 ```shell # java envroment export JAVA_HOME=/opt/module/jdk1.8.0_291 export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$JAVA_HOME/bin:$PATH: ``` 另一种配置 ```shell JAVA_HOME=/opt/module/jdk1.8.0_291 CLASSPATH=%JAVA_HOME%/lib:$JAVA_HOME/jre/lib PATH=$PATH:JAVA_HOME/bin:$JAVA_HOME/jre/bin export PATH CLASSPATH JAVA_HOME ``` ```shell source /etc/profile ``` 查看是否安装成功: ```shell java -version ``` ### Linux安装MySQL7 #### 安装命令 ```shell tar -zxvf mysql-5.7.33-linux-glibc2.12-x86_64.tar.gz -C /opt/module/ cd /opt/module/ ln -s mysql-5.7.33-linux-glibc2.12-x86_64 mysql groupadd mysql useradd -r -g mysql mysql mkdir -p /data/mysql chown mysql:mysql -R /data/mysql vi /etc/my.cnf ``` #### my.cnf配置如下 ``` [mysqld] bind-address=0.0.0.0 port=3306 user=mysql basedir=/usr/local/mysql datadir=/data/mysql socket=/tmp/mysql.sock log-error=/data/mysql/mysql.err pid-file=/data/mysql/mysql.pid #character config character_set_server=utf8mb4 symbolic-links=0 explicit_defaults_for_timestamp=true log-bin=mysql-bin server-id=1 max_allowed_packet = 20M max_connect_errors=1000 ``` #### 进入mysql的bin目录 ``` cd /opt/module/mysql/bin ./mysqld --defaults-file=/etc/my.cnf --basedir=/opt/module/mysql/ --datadir=/data/mysql/ --user=mysql --initialize ``` #### 报错 ``` mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such f ``` #### 解决方案: ```shell yum install -y libaio.so.1 yum install -y libaio ``` #### 查看密码: ```shell cat /data/mysql/mysql.err ``` #### 先将mysql.server放置到/etc/init.d/mysql中 ```shell cp /opt/module/mysql/support-files/mysql.server /etc/init.d/mysql ``` #### 查看密码 ```shell cat /data/mysql/mysql.err ``` #### 启动mysql,并更改root 密码 ```shell service mysql start ps -ef|grep mysql ``` #### bin下登录,并修改密码 ```shell ./mysql -u root -p ``` #### 登录mysql成功,执行 ```mysql SET PASSWORD = PASSWORD('123456'); ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER; FLUSH PRIVILEGES; use mysql #访问mysql库 update user set host = '%' where user = 'root'; #使root能再任何host访问 FLUSH PRIVILEGES; #刷新 ``` #### 软连接mysql ```shell ln -s /opt/module/mysql/bin/mysql /usr/bin ``` #### 问题一:mysql -u root -p ```shell -bash: mysql: 未找到命令 vi /etc/profile ``` ``` # MySQL envroment MYSQL_HOME=/opt/module/mysql export PATH=$JAVA_HOME/bin:$PATH:$MYSQL_HOME/bin: ``` ### Linux安装Redis ```shell tar -zxvf redis-6.2.7.tar.gz -C /opt/module/ ln -s redis-6.2.7 redis cd redis make && make install mkdir config mkdir data cp redis.conf config cat redis.conf | grep -v "#" | grep -v "^$" > redis-6379.conf ``` 编辑redis-6379.conf,修改后如下 ``` # 修改 bind 0.0.0.0 -::1 protected-mode yes # 修改 port 6379 tcp-backlog 511 timeout 0 tcp-keepalive 300 # 修改 daemonize yes # 修改 pidfile /var/run/redis_6379.pid loglevel notice # 修改 logfile "6379.log" databases 16 always-show-logo no set-proc-title yes proc-title-template "{title} {listen-addr} {server-mode}" stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes # 修改 dbfilename dump-6379.rdb rdb-del-sync-files no # 修改 dir /opt/module/redis/data replica-serve-stale-data yes replica-read-only yes repl-diskless-sync no repl-diskless-sync-delay 5 repl-diskless-load disabled repl-disable-tcp-nodelay no replica-priority 100 acllog-max-len 128 lazyfree-lazy-eviction no lazyfree-lazy-expire no lazyfree-lazy-server-del no replica-lazy-flush no lazyfree-lazy-user-del no lazyfree-lazy-user-flush no oom-score-adj no oom-score-adj-values 0 200 800 disable-thp yes appendonly no appendfilename "appendonly.aof" appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb aof-load-truncated yes aof-use-rdb-preamble yes lua-time-limit 5000 slowlog-log-slower-than 10000 slowlog-max-len 128 latency-monitor-threshold 0 notify-keyspace-events "" hash-max-ziplist-entries 512 hash-max-ziplist-value 64 list-max-ziplist-size -2 list-compress-depth 0 zset-max-ziplist-entries 128 zset-max-ziplist-value 64 hll-sparse-max-bytes 3000 stream-node-max-bytes 4096 stream-node-max-entries 100 activerehashing yes client-output-buffer-limit normal 0 0 0 client-output-buffer-limit replica 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 hz 10 dynamic-hz yes aof-rewrite-incremental-fsync yes rdb-save-incremental-fsync yes jemalloc-bg-thread yes ``` redis-server:redis服务器 redis-cli:Redis命令行客户端 redis-benchmark:基准测试 redis-check-aof:AOF文件修复工具 redis-check-dump:RDB文件修复工具 redis-sentinel:2.8以后 #### 查看redis是否运行 ```shell ps -ef|grep redis-server|grep -v grep ``` #### 配置文件启动 ```shell redis-server config/redis-6379.conf ``` #### 启动命令行客户端 ```shell redis-cli -p 6379 ``` #### 常用配置 - deamonize:是否是守护进程no\yes - port:对外端口号 - logfile:Redis系统日志 - dir:Redis工作目录 #### 通用命令: - keys [pattern] 遍历所有key - dbsize 计算key的总数 - exists key 检查key是否存在 - del key 删除指定key-value - expire key seconds key在seconds秒后过期 - ttl key 查看key剩余的过期时间 - persist key 去掉key的过期时间 - type key 返回key的类型 #### 常用的桌面端: redis-desktop-manager-2019.0.0.exe ## 学习过程 ### 整合Redis #### 组件位置 imooc-common/imooc-redis #### 核心依赖 ``` org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-data-redis org.springframework.boot spring-boot-starter-test ``` #### application.yml ```yaml spring: redis: port: 6379 host: 192.168.137.200 ``` #### 单元测试 ```java @Resource private RedisTemplate redisTemplate; @Test void set() { redisTemplate.opsForValue().set("b", "我是刚子"); System.out.println(redisTemplate.opsForValue().get("b")); } ``` #### 问题一:Redis中k,v都是中文乱码 配置config,config/RedisConfig ```java @Configuration public class RedisConfig { @Autowired private RedisConnectionFactory factory; @Bean public RedisTemplate redisTemplate() { RedisTemplate redisTemplate = new RedisTemplate<>(); redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setHashKeySerializer(new StringRedisSerializer()); redisTemplate.setHashValueSerializer(new StringRedisSerializer()); redisTemplate.setValueSerializer(new StringRedisSerializer()); redisTemplate.setConnectionFactory(factory); return redisTemplate; } } ``` #### 整合Redission,分布式锁配置及使用(单机、集群、哨兵、主从) #### 期待收获 认识并掌握redisson为何物、常见的几种典型数据结构-分布式对象、集合、服务的应用及其典型应用场景的实战 掌握如何基于spring boot2.0整合redisson搭建企业级多模块项目,并以此为奠基,实战企业级应用系统中常见的业务场景,巩固相应的技术栈! 站在项目管理与技术精进的角度,掌握对于给定的功能模块进行业务流程图的绘制、分析、模块划分、代码实战与性能测试和改进,提高编码能力与其他软实力 对于Java微服务、分布式、spring boot精进者而言,学完本课程,不仅可以巩固提高中间件的实战能力,其典型的应用场景更有助于面试、助力相关知识点的扫盲 ### 整合RocketMQ ### 启动 1. cd /opt/module/rocketmq-all-4.9.4-bin-release/ 2. nohup bin/mqnamesrv & # 启动nameserver 3. nohup bin/mqbroker -c conf/broker.conf & ### 关闭 1. sh bin/mqshutdown broker 2. sh bin/mqshutdown namesrv #### 延迟消息 对于消息中间件来说,producer将消息发送到mq的服务器上,但并不希望这条消息马上被消费,二十推迟到当前时间节点之后的某个时间点,再将消息投递到queue中让consumer进行消费。 场景如:订单创建后,会有一个等待用户支付的时间窗口,一般30分钟,30分钟后customer会收到这条订单消息,然后程序去订单表中检查当前这条订单的支付状态,如果是未支付状态,则自动清理掉,这样就不需要使用定时任务的方式去处理了。 ### 整合MyBatis-Plus 官网:https://baomidou.com/ ## 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request ## 特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)