# 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/)