SpringCloud

构建Deployment

构建文件实际上是和构建rs几乎是一模一样的,就是kind的值换成deployment
在这里插入图片描述在rsDeploy会先创建rs,然后再由rs部署容器,一个rs部署的容器都会添加一个固定的标签,同时rs会自动添加一个相同的选择器。这个标签的值是根据rs部容器时指定的镜像名称hash运算产生的。在滚动升级的时候,就容器会别删除,但是旧rs会被保留。这样可以避免多个rs管理同一个容器的冲突问题

使用Dockerfile构建镜像

以centos7镜像为基础,构建tomcat镜像
准备:
centos:7镜像
jdk压缩包 jdk-8u212-linux-x64.tar.gz
tomcat7压缩包 apache-tomcat-7.0.96.tar.gz

**先准备tomcat7文件夹,**存放构建过程中使用的所有文件
Dockerfile, jdk…gz, tomcat…gz
cd ~
mkdir tomcat7
cd tomcat7
编辑Dockerfile文件

#以centos7为基础,安装oracle jdk8和tomcat7
FROM centos:7
#ADD命令将压缩包传入镜像中的指定目录,并同时解压缩
ADD jdk-8u212-linux-x64.tar.gz /opt/
ADD apache-tomcat-7.0.96.tar.gz /usr/
#为了方便,把文件夹名称改得简单一点
RUN mv /usr/apache-tomcat-7.0.96 /usr/tomcat
#设置环境变量
ENV JAVA_HOME=/opt/jdk1.8.0_212 \
    CATALINA_HOME=/usr/tomcat \
    PATH=$PATH:/opt/jdk1.8.0_212/bin:/usr/tomcat/bin
#暴露容器的8080端口
EXPOSE 8080
#设置启动容器时自动运行tomcat
ENTRYPOINT /usr/tomcat/bin/startup.sh && tail -F /usr/tomcat/logs/catalina.out

去注释版:

FROM centos:7
ADD jdk-8u212-linux-x64.tar.gz /opt/
ADD apache-tomcat-7.0.96.tar.gz /usr/
RUN mv /usr/apache-tomcat-7.0.96 /usr/tomcat
ENV JAVA_HOME=/opt/jdk1.8.0_212 \
    CATALINA_HOME=/usr/tomcat \
    PATH=$PATH:/opt/jdk1.8.0_212/bin:/usr/tomcat/bin
EXPOSE 8080
ENTRYPOINT /usr/tomcat/bin/startup.sh && tail -F /usr/tomcat/logs/catalina.out

使用 Dockerfile 构建镜像

docker build -t tomcat:7 .
注意末尾的点,表示构建过程中从当前目录寻找文件,包括tomcat7目录下需要的三个文件,Dockerfile, jdk....gz, tomcat....gz

tomcat7测试

#创建文件夹
mkdir -p /opt/webapps/ROOT
​
#创建文件
cat <<EOF >/opt/webapps/ROOT/index.html
<p>Hello Docker!</p>
EOF
​
docker run -d \
--rm \
--name tomcat7 \
-v /opt/webapps:/usr/tomcat/webapps \
-p 80:8080 \
tomcat:7
​
# 浏览器访问
http://192.168.64.150

nfs挂载数据卷共享文件夹

在整个k8s集群中,在一个虚拟机上创建一个pvc,pvc会匹配到创建的pv,而pv会关联一个文件夹。在另一个虚拟机上可以通过内部网络获取到一个pvc,从而实现文件夹的共享
在这里插入图片描述

K8s磁盘挂载到容器

emptyDir类型的卷:主要解决一个pod中部署的多个容器之间的文件共享问题;一个容器负责返在共享目录上生成一个文件,另一个容器是nginx服务,负责访问这个文件。利用的就是共享文件
nfs:

k8s调用过程

在这里插入图片描述

关于创建pod容器的两种方式

可以使用rc在部署的时候指定创建多少个pod容器,这样创建会在所有服务器上均匀创建,而且创建的都是使用相同镜像开启的容器;
也可以使用配置文件创建容器,这样可以指定在哪个物理服务器上创建,可以自定义创建自己想创建的容器。
在这里插入图片描述

NodePort暴露服务器端口

在这里插入图片描述

k8s一点中间感悟

首先启动多台服务器,其中一台是主,其他是从。操作是在主,应用部署是在从。首先在主服务器上启动RC,命令如下:
k run
–image=luksa/kubia
–port=8080
–generator=run/v1 kubia
这是启动一个pod中的docker容器,默认启动一个,如果启动多个会在从服务器中均衡部署。这里容器时使用一个kubia镜像启动的,并开放了容器的8080端口,同时给RC起了一个名字kubia,同时容器也被自动分配了名字。
然后,使用 service 对外暴露 pod。这时所有服务器上都会暴露一个相同的随机端口。使用这个端口可以映射访问到pod里docker容器暴露的8080端口。

分布式事务之TCC

TCC最为特殊的就是他有三个操作:第一阶段预留业务操作、第二阶段业务成功操作、第二阶段业务回滚操作。这三个操作的业务逻辑都是自己定义的,即在预留业务时需要做什么业务操作,预留成功后需要做什么操作,以及预留失败导致事务回滚需要做什么操作。
在这三个方法上都和添加了@Transactional注解(实际上自己不添加也会默认添加),所以就会有以下的注意事项:
第一阶段没有完成的情况下,执行回滚,因为第一阶段有本地事务,事务失败时进行了回滚,所以标记内容为空,在执行全局回滚时先判断,为空情况下实际回滚内容并没有被执行。
如果这里第一阶段成功,而其他全局事务参与者失败,这里会执行回滚
幂等性控制:如果重复执行回滚则直接返回
流程总结:
首先是在订单模块中的保存订单方法中开启的全局事务,在方法中会调用远程的库存模块和账户模块。在调用本地的提交订单业务时会先执行预留业务操作,操作成功后会将成功信息传递给TC,然后在调用远程的服务,同样是执行预留操作,将成功信息传递给TC,然后所有服务执行结束之后,TC会把所有调用信息交给TM 进行决策,当所有调用信息都执行成功时,TM会给TC发送一个提交指令,这是所有服务都会执行第二阶段的提交操作;但是如果调用信息有一个执行失败,所有的服务都会执行回滚操作。

Docker中启动centos镜像时的小结

因为启动centos镜像的时候会自动执行bash命令,所以启动的时候一定要加上-it参数,来启动交互式终端,不然容器中就没有命令在执行,容器就会自动退出
创建网络时指定子网ip和24位掩码:docker network create --subnet=172.18.0.0/24 dockernet

@GlobalTransactional的作用

1.创建TM 2.连接TC 3.向TC注册全局事务

关于seata AT中的数据源配置

在这里插入图片描述
该配置主要是拦截用户对数据库的crud操作,并且动态的为他织入一些其他操作:查询出原有数据,方便后期回滚,保存新数据和旧数据等。

关于@RabbitListener和@RabbitHandler

@RabbitListener直接加到方法上,就不需要@RabbitHandler,每一个@RabbitListener注释的方法都是一个消费者,里边的@RabbitListener(queues=“task_queue”)属性表示从哪个队列里接收数据,如果多个消费者指定同一个队列,这就是工作者模式。

关于@RequestBody注解和@RequestParam注解的说明

@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的);GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交。在后端的同一个接收方法里,@RequestBody与@RequestParam()可以同时使用,@RequestBody最多只能有一个,而@RequestParam()可以有多个。

idea如何导入老师的项目

首先新创建一个空工程,然后双击shift,在搜索框中输入add maven project,然后选中各个项目的pom文件,点击确定,就一下子导入了多个模块。
**解决项目导入出错问题:**这是由于没有导入jdk的原因
在这里插入图片描述在这里插入图片描述

rabbitmq之路由模式和主题模式

路由模式:生产者定义交换机,并向交换机绑定路由键;消费者也会定义交换机(和两者同时定义队列的作用一样,谁先启动就用谁的)和队列,并在队列上指定路由键,这样该消费者的队列只会接受含有相匹配的路由键的消息。
主题模式:提供了通用匹配规则的路由模式。

rabbitmq的服务解耦是怎么做到的

在这里插入图片描述
现在A要调用b,c,d方法向他们发送数据,但是如果还要再添加服务的话,还需要修改a中的代码,这是因为A和他们的耦合度太高了,我们可以在中间加上一个rabbitmq服务器,把消息发给他,哪个服务想要获取就从rabbitmq上获取,这就是我们所说的ocp原则

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值