rabbitmq 虚拟机

安装docker环境

  1. 克隆 centos-8-2105: rabbitmq

  2. 设置ip:

    1. ./ip-static
    2. ip: 192.168.64.140
    3. ifconfig
    
  3. mobaxterm 上传 docker 离线安装文件到 /root/ 目录

    • 课前资料\devops课前资料\docker\docker-install 文件夹
  4. 按照笔记安装docker

    • https://wanght.blog.csdn.net/article/details/117327543

启动 docker 容器

  1. 下载 docker 镜像

    docker pull rabbitmq:management
    docker images
    
  2. 启动运行容器

docker run \
-d \
--name rabbit \
-p 5672:5672 \
-p 15672:15672 \
-e RABBITMQ_DEFAULT_USER=admin \
-e RABBITMQ_DEFAULT_PASS=admin \
rabbitmq:management

docker ps

  1. 浏览器访问 http://192.168.64.140:15672/

rabbitmq 容器不可访问:

# 重启网络服务
systemctl restart NetworkManager

# 重启 docker 系统服务
systemctl restart docker

# 重启容器
docker restart rabbit

订单流量削峰

导入项目:

  1. 课前资料\elasticsearch\pd-商城项目案例.zip
    pd-web 目录解压缩到 rabbitmq 工程目录
  2. 导入maven项目,选择 pd-web 下的 pom.xml
  3. file — project structures ,配置jdk
  4. sqlyog ,右键点连接 — 从sql转储文件导入
    选择 pd-web 项目目录中的 pd.sql
  5. 如果用 wht6.cn:3309,修改 application.yml 配置
  6. 右键点击 RunPdApp 类,启动项目
  7. 配置启动项,设置 working directory,设置成 pd-web 模块的目录

修改pd-web,发送订单到rabbitmq
8. 添加依赖: starter-rabbitmq
9. yml配置 rabbitmq 连接信息
10. 在启动类中(或自定义自动配置类)准备队列的参数
11. OrderServiceImpl
1. 添加 AmqpTemplate 用来发送消息的封装工具
2. 在 saveOrder() 方法中发送消息
3. 把 saveorder() 中的数据库代码都注释掉

动态配置刷新

2,3,4,9项目基础配置

  1. 添加依赖:

    • rabbitmq
    • bus
  2. yml 配置rabbitmq连接
    • 09修项目修改 application.yml
    • 2,3,4 修改 config目录的三个文件,推送到远程仓库
  3. 09项目中使用 actuator 暴露 bus-refresh 刷新端点

sleuth + zipkin 链路跟踪

2,3,4,6 添加 sleuth 链路跟踪日志

zuul, iu5y4y4y45, iu5y4y4y45, true
order, iu5y4y4y45, i65h5j5j5j5j, true
user, iu5y4y4y45, ujjhg34t45y5u6, true
item, iu5y4y4y45, uju65j54354yu, true

只需要添加 sleuth 依赖,0配置

2,3,4,6 添加 zipkin 客户端依赖和rabbitmq配置

  1. 2,3,4,6 添加 zipkin 客户端依赖
  2. 6 添加 rabbitmq 依赖和连接配置
  3. 2,3,4,6 配置日志的发送方式: rabbit
    • 06项目直接修改 application.yml
    • 2,3,4项目修改config文件夹的文件,并推送

选择正确的网卡,注册 IP 地址

选择网卡
在 bootstrap.yml 中配置

spring:cloud:inetutils:ignored-interfaces: # 忽略的网卡- VM.*preferred-networks: # 要是用的网卡的网段- 192\.168\.0\..+

注册 IP 地址,而不注册主机名
application.yml

eureka:instance:prefer-ip-address: true # 使用ip进行注册instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port} # 界面列表中显示的格式也显示ip

账户

  1. 实体类 Account
  2. AccountMpper 接口
  3. AccountMapper.xml
  4. AccountService
  5. AccountController

seata server

registry.conf
配置 seata server 向注册中心注册

file.conf
配置 seata server 运行过程中存储的日志的存储位置

seata-server.bat
配置使用的内存

订单添加 seata at 事务

  1. 父项目添加 seata 依赖
  2. 配置
    • application.yml — 事务组的组名
    • registry.conf — 注册中心地址,获得事务协调器的地址
    • file.conf — 事务组对应使用的协调器
  3. 数据源代理 — 提供自动事务处理代码
  4. 业务方法添加事务注解
    • @Transactinal — 控制本地事务
    • @GlobalTransactional — 启动全局事务

库存和账户添加 seata at 事务

  1. 三个配置文件

    • application.yml — 事务组的组名
    • registry.conf — 注册中心地址
    • file.conf — 事务组对应的协调器
  2. 数据源代理
  3. 业务方法添加 @Transactional 控制本地事务

订单中,打开库存和账户的远程调用

TCC 事务

AT - 对业务无侵入,全自动事务,80%情况下都可以使用AT事务
TCC - 对业务有侵入,两阶段代码都需要自己来实现

订单添加 TCC 事务

  1. 添加 seata 依赖
  2. 三个配置文件,和 AT 事务相同
  3. 修改 Mapper 添加 TCC 的数据库操作
  4. 添加 TCC 操作接口和实现
  5. TCC三个方法,添加 @Transactional
  6. 修改业务代码,在业务中手动调用TCC第一阶段方法
  7. 业务方法添加 @GlobalTransactional

库存添加 TCC 事务
8. 三个配置文件
9. 修改 Mapper 添加 TCC 的数据库操作
10. 添加 TCC 操作接口和实现,添加 @Transactional
11. 修改业务代码,在业务中手动调用TCC第一阶段方法

账户添加 TCC 事务
12. 三个配置文件
13. 修改 Mapper 添加 TCC 的数据库操作
14. 添加 TCC 操作接口和实现,添加 @Transactional
15. 修改业务代码,在业务中手动调用TCC第一阶段方法
16. 幂等性控制

sql 优化

select * from stu where name=‘张三’

name 添加索引,加速过滤

create index stu_name_index on stu(name)
  • 1

mysql 测试一个查询条件是否会使用索引,扫描的数据量

explain select * from stu where name='张三'

加索引之前
index 扫描的数据量
none 16340063

加索引之后
index 扫描的数据量
stu_name_index 3

当数据量非常大时,sql优化解决不了问题,
必须分库分表 ---- MyCat
大量数据,要分散存储到数据库集群多台服务器

RocketMQ

  1. 克隆 centos-8-2105: rocketmq
  2. 设置ip
./ip-static
ip: 192.168.64.141
  1. mobaxterm 上传文件到 /root/

    • 课前资料\分布式事务\rocketmq 文件夹下的三个文件

订单业务添加可靠消息最终一致性事务

  1. 无事务版本.zip 解压缩到 rocketmq-dtx 工程目录
  2. 导入
  3. 检查工程jdk配置

订单发送事务消息
4. pom.xml 添加spring 封装的 rocketmq 依赖
5. yml 配置 rocketmq 连接信息
6. 事务状态表、实体类TxInfo、TxMapper
7. 消息的封装对象,和JsonUtil
8. 发送事务消息

账户接收消息执行账户金额扣减
9. yml 配置 rocketmq 连接信息
10. 添加消费者类接收消息
11. 调用业务方法

docker

  1. 克隆 centos-8-2105: docker-base
  2. 设置ip:
./ip-static
ip: 192.168.64.150
ifconfig
  1. 上传离线安装文件到 /root/

    • docker课前资料\docker-install 目录
  2. 按笔记执行安装
  3. 从 docker-base 克隆: docker

Docker 搭建redis集群

六个Redis实例的配置文件:
redis.conf

port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
/opt/redis/7000/redis.conf/7001/redis.conf/7002/redis.conf/7003/redis.conf/7004/redis.conf/7005/redis.conf
mkdir /opt/redis
cd /opt/redis
mkdir 7000 7001 7002 7003 7004 7005

cat <<EOF >7000/redis.conf
port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
EOF

cat <<EOF >7001/redis.conf
port 7001
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
EOF

cat <<EOF >7002/redis.conf
port 7002
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
EOF

cat <<EOF >7003/redis.conf
port 7003
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
EOF

cat <<EOF >7004/redis.conf
port 7004
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
EOF

cat <<EOF >7005/redis.conf
port 7005
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
EOF

先启动6个redis实例

docker run -d --name redis7000 \
-v /opt/redis/7000/redis.conf:/redis.conf \
--net=host \
--restart=always \
redis \
redis-server /redis.conf

docker run -d --name redis7001 </span>
-v /opt/redis/7001/redis.conf:/redis.conf </span>
–net=host </span>
–restart=always </span>
redis </span>
redis-server /redis.conf

docker run -d --name redis7002 </span>
-v /opt/redis/7002/redis.conf:/redis.conf </span>
–net=host </span>
–restart=always </span>
redis </span>
redis-server /redis.conf

docker run -d --name redis7003 </span>
-v /opt/redis/7003/redis.conf:/redis.conf </span>
–net=host </span>
–restart=always </span>
redis </span>
redis-server /redis.conf

docker run -d --name redis7004 </span>
-v /opt/redis/7004/redis.conf:/redis.conf </span>
–net=host </span>
–restart=always </span>
redis </span>
redis-server /redis.conf

docker run -d --name redis7005 </span>
-v /opt/redis/7005/redis.conf:/redis.conf </span>
–net=host </span>
–restart=always </span>
redis </span>
redis-server /redis.conf

/pre>

执行命令配置集群

# 进入容器执行集群配置命令

docker exec -it redis7000 </span>
redis-cli --cluster create </span>
192.168.64.150:7000 192.168.64.150:7001 </span>
192.168.64.150:7002 192.168.64.150:7003 </span>
192.168.64.150:7004 192.168.64.150:7005 </span>
–cluster-replicas 1

查看集群信息

docker exec -it redis7000 redis-cli -c -p 7000

cluster info

cluster nodes

存数据

docker exec -it redis7000 redis-cli -c -p 7000
# 7002
set a aaaaaaaaaaaaa
# 7000
set b bbbbbbbbbbb
# 7001
set c cccccccccccccccc

redis 哨兵

redis主从复制结构中,当主服务器宕机,哨兵可以监控到服务宕机,从从服务器中选举产生一个新的主服务器

  1. 搭建主从服务器 – 一主两从
docker rm -f $(docker ps -aq)

# 启动主服务器,正常启动,没有特殊设置
docker run -d --name redis6379 --net=host --restart=always redis

docker exec -it redis6379 redis-cli
> info replication

启动两个从服务器

# 启动redis6380容器,作为 redis6379 的从服务器启动
docker run -d --name redis6380 --net=host --restart=always redis \
redis-server --port 6380 --slaveof 192.168.64.150 6379

# 启动redis6381容器,作为 redis6379 的从服务器启动
docker run -d --name redis6381 --net=host --restart=always redis </span>
redis-server --port 6381 --slaveof 192.168.64.150 6379

# 查看三个 redis 服务的角色
docker exec -it redis6379 redis-cli
> info replication

docker exec -it redis6380 redis-cli -p 6380
> info replication

docker exec -it redis6381 redis-cli -p 6381
> info replication

  1. 添加哨兵配置文件
mkdir /opt/sentinel/
cd /opt/sentinel/

# sentinel monitor mymaster 192.168.64.150 6379 2
# 末尾的 2 表示两台从服务器投票确认主服务器宕机,哨兵才会认为主服务器宕机
cat <<EOF >5000.conf
port 5000
sentinel monitor mymaster 192.168.64.150 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1
EOF

cat <<EOF >5001.conf
port 5001
sentinel monitor mymaster 192.168.64.150 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1
EOF

cat <<EOF >5002.conf
port 5002
sentinel monitor mymaster 192.168.64.150 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1
EOF

  1. 启动三个哨兵
docker run -d --name sentinel5000 \
-v /opt/sentinel/5000.conf:/sentinel.conf \
--net=host \
redis redis-sentinel /sentinel.conf

docker run -d --name sentinel5001 </span>
-v /opt/sentinel/5001.conf:/sentinel.conf </span>
–net=host </span>
redis redis-sentinel /sentinel.conf

docker run -d --name sentinel5002 </span>
-v /opt/sentinel/5002.conf:/sentinel.conf </span>
–net=host </span>
redis redis-sentinel /sentinel.conf

# 进入一个哨兵容器,查看它监控的主从服务器和其他哨兵
docker exec -it sentinel5000 redis-cli -p 5000
> sentinel master mymaster
> sentinel slaves mymaster
> sentinel sentinels mymaster

  1. 停止主服务器,测试主服务器重新选举
# 停止主服务器
docker stop redis6379
# 在哨兵日志中查看服务器切换日志: +switch-master mymaster 192.168.64.150 6379 192.168.64.150 6381
docker logs sentinel5000

# 查看 6380 和 6381 服务器的角色变化
docker exec -it redis6380 redis-cli -p 6380
> info replication

docker exec -it redis6381 redis-cli -p 6381
> info replication

重新启动6379,不会把6379切换成主服务器,而是作为从服务器

docker start redis6379

docker exec -it redis6379 redis-cli
> info replication

  1. 客户端api连接哨兵存取数据

elasticsearch

启动服务器
三个容器如果运行有问题,重启三个容器

1. docker restart node1 node2 node3

倒排索引
从 ik 分词器项目仓库中下载 ik 分词器安装包 – 分词,分词器,项目

倒排索引把关键词和文档之间的关系颠倒过来
分词 – 1,2,5,8
分词器 – 2,3,5,8

k8s案例

  1. 项目打包成jar文件
  2. 构建镜像
    • jdk
    • eureka
    • item
    • user
    • order
  3. 把镜像传到所有服务器导入
  4. 部署四个模块

镜像构建
5. 准备5个文件夹 — devops课前资料\kubernetes\案例\v2
- jdk
- jdk压缩文件
- Dockerfile
- eureka
- eureka的jar文件
- Dockerfile
- item
- item的jar文件
- Dockerfile
- user
- user的jar文件
- Dockerfile
- order
- order的jar文件
- Dockerfile

回顾

spring cloud netflix

  • eureka
  • openfeign
  • ribbon
  • zuul
  • hystrix
  • hystrix dashboard / turbin
  • config
  • bus
  • zleuth+zipkin

消息服务

Rabbitmq

  • 简单模式
  • 工作模式
    • 合理分发 – 手动ACK、qos=1
    • 消息持久化 – 队列持久化、消息持久化
  • 发布和订阅模式
    • 消息群发
    • fanout 交换机
  • 路由模式
    • 路由键匹配路由消息
    • direct 交换机
  • 主题模式
    • 关键词格式: aa.bb.cc.dd、 ..cc.dd、 #.dd
    • topic 交换机
  • RPC 模式

Rocketmq

  • 延时消息
  • 顺序消息
  • 事务消息、高可靠消息

消息服务使用场景

  • 解耦
  • 流量削峰
  • 异步调用

项目中使用消息服务

  • bus消息总线使用消息服务来传递配置刷新指令
  • sleuth+zipkin链路跟踪,各模块把日志发送到消息服务,zipkin接收消息进行分析处理
  • 订单流量削峰
  • Rocketmq可靠消息最终一致性事务

分布式事务

Seata

  • Seata AT

    • 全自动事务方案
    • 对业务无侵入
    • 80% 情况下都可以使用 AT 事务
    • 只需要添加配置就可以实现
      • 启动 Seata server
      • 添加三个配置: application.yml, registry.conf, file.conf
      • 创建数据源代理
      • 第一个模块添加 @GlobalTransactional
  • TCC
    • 需要自己编写事务处理代码
    • 对业务代码有侵入
    • 实现步骤:
      • 启动 Seata server
      • 添加三个配置: application.yml, registry.conf, file.conf
      • 添加 TccAction 接口和实现,实现 TCC 三个操作方法
      • 修改业务,调用Tcc第一阶段方法
      • 第一个模块添加 @GlobalTransactional

可靠消息最终一致性

  1. 发送半消息
  2. 执行本地事务
    • 事务成功,提交消息
    • 事务失败,回滚消息
  3. 由于网络不稳定无法提交或回滚消息
    服务器会反向回查事务状态

消费者处理消息必须成功,如果失败会重试消息

Docker

  • 镜像命令
  • 容器命令
  • 数据挂载
  • 网络
  • 构建镜像

Elasticsearch

  • 全文检索引擎,NoSql 数据库

  • 倒排索引

  • 核心概念

    • 索引
    • 分片
    • 副本
    • 映射(字段、类型、分词器)
    • 文档
    • 字段
    • 分类(淘汰)
  • Spring data elasticsearch

    • ElasticsearchRepository
    • Criteria / CriteriaQuery / SearchOperations

Kubernetes

  • Pod

    • 标签
    • 存活探针
  • 控制器
    • ReplicationController
    • ReplicaSet
    • DaemonSet
    • Job
    • CronJob
  • Deployment
    • 自动滚动升级
  • Service
    • 不变的访问地址
    • Endpoints 端点
    • 对外暴露 Service
      • NodePort
      • Load Balance
      • Ingress
  • 数据挂载
    • Persistent Volume 持久数据卷
    • Persistent Volume Claim 持久卷声明
    • pv 和 pvc 靠条件匹配自动关联
  • 参数、环境变量
    • command – 覆盖docker的 ENTRYPOINT
    • args – 覆盖docker的 CMD
    • env
    • ConfigMap

2102王海涛随堂笔记相关推荐

  1. 92030302随堂笔记 c# 1614675886

    92030302随堂笔记 c# 1614675886 控件 Nodes添加节点 默认事件 被选中的节点 文本内容,Text 深度,level 控件的Nodes属性 获取所有的节点对象数组的长度 尝试用 ...

  2. 图床云存储项目课程随堂笔记

    这个项目属实重量级,第一遍学习的过程比较懵,只是记录一下随堂笔记.后面理解了项目后端代码流程,再细写几篇博客归纳. 基本单机环境配置 大的项目你可能连配置都配不清楚. 新手必须要心细,因为你错了一步, ...

  3. 【笔记】嵌入式C语言随堂笔记

    喏,你们要的嵌入式C语言随堂笔记,丰富度应该要比老师自己记录的高一些.但是机酱的废话一样很多哦! 这个笔记是自己一个字一个字手打的,话说打个原创图个慰藉没问题的吧=.= 而且那时候很菜,知道就好不许说 ...

  4. 《Advice on how to read papers》---吴恩达CS230随堂笔记

    How to read papers? Reading research papers Reading a paper Questions to ask yourself after reading ...

  5. JAVA历险记--java基础知识--随堂笔记

    JAVA基础知识随堂笔记 简介 学习视频 题1 题2 答疑 简介 由于本人从事Delphi(很古董的语言了)和c#开发,所以一些基础的知识还是比较了解的,需要熟悉的是IDE的简单操作,以及JAVA的相 ...

  6. 泡泡堂段王一进去服务器不稳定,3月22日泡泡新段王 《泡泡堂》段位系统大革新...

    3月已经进入下旬,泡泡堂V174泡泡段王版本即将于3月22日正式上线.全新段王系统,更合理的匹配模式,泡泡高手和手速大神千万不要错过啦!与此同时,泡泡堂线下玩家见面会正在火热筹备中,超多的实物周边来就 ...

  7. 汤家凤高等数学基础阶段课程的随堂笔记并标记重点

    本文内容为汤家凤高数基础阶段课程的随堂笔记并标记重点,我主页中的思维导图中内容大多从我的笔记中整理而来,相应技巧可在笔记中查找原题,有兴趣的可以去 我的主页 了解更多计算机学科的精品思维导图整理 本文 ...

  8. winsever服务系统基础教程(随堂笔记)

    本文草稿链接https://www.yuque.com/docs/share/000c4611-fa69-4881-90f4-d35ace0f9d26?# <winsever服务系统基础教程(随 ...

  9. linux加权_「学员笔记」LINUX随堂笔记(十一):LVS负载均衡群集

    第12章 LVS负载均衡群集 一.群集概述 1.1 群集的类型 无论是哪种群集,都至少包括两台节点服务器,而对外表现为一个整体,只提供一个访问入口(域名或IP地址),相当于一台大型计算机,根据群集所提 ...

最新文章

  1. 响应式布局设备分界点
  2. 1、spring的概述
  3. shell 杂记一(笨鸟)
  4. Apple`s Steve Jobs Has Reshaped(重塑) the Tech World: 10 Ways He Did It
  5. 【ujson】pip安装ujson报错: error:Microsoft Visual C++ 14.0 is required
  6. identifier 'APP_FOLDER.EVENT' must be declared
  7. 用OpenSSL写一个简单的Server/Client程序:证书与私钥
  8. 计算沙盒下文件夹内容大小 清空沙盒 文件 目录
  9. brew 一直等待_等待高高时,可以做的小事...
  10. 数据结构二叉树的建立代码_二叉树就是这么简单
  11. macOS安装brew和ffmpeg下载m3u8
  12. GoogleEarth二次开发平台指南(4) --- 三维视频融合、视频拼接与摄像头控制
  13. 商业银行的组织结构-决策系统、执行系统和监督系统
  14. *TEST 6 for NOIP + NOIP初赛
  15. 行走的励志君——选择和努力哪个更重要
  16. 达人评测锐龙r7 6800u和r7 5800u差距 r76800u和r75800u对比
  17. 【黄啊码】百万级别订单量,如何生成唯一订单ID(雪花算法)
  18. elementUI checkbox选中与取消选中
  19. 2009年必看十大动漫游戏改编电影
  20. json数据和本地存储

热门文章

  1. 10.梯度、激活函数和loss
  2. 计算机网络 (2)标准化工作、性能指标、分层结构
  3. 004:AWS数据湖解决方案
  4. 康耐视智能相机Insight全部函数介绍
  5. 夏津一中2021高考成绩查询,2021德州市地区高考成绩排名查询,德州市高考各高中成绩喜报榜单...
  6. 想找一家好公司入职或者合作?那么这块天眼查GUI版本非常适合你。
  7. android 双SIM卡检测是否可用和信号强度
  8. 强化学习之——马尔可夫决策过程原理
  9. 计算机英语二国家线,2017考研英语二国家线
  10. 翻译科技论文,俄译中怎样效果好