粉丝537获赞914

今天给大家讲一下如何用群辉搭建 resty fask 远程桌面服务,然后 resty 是一个远,是一个开源的远程桌面软件,他可以远程控制电脑。 嗯,题目 yyow 和向日葵的替代产品,您可以完全掌握数据,不用担心安全问题。他如何搭建,具体流程如下,首先我们在权威里面安装这个服务器, 打开选位,然后打开套件中心,利用手动安装 选择那个,选择安装包, 这是他的套件, 点击打开,下一步 要按默认端口,不用修改,点下一步点击应用,等安装好之后,我们这个服务器端就会就已经安装好了,很简单, 我们可以打开看一下, 这是夫妻端的界面。好,下面我们来配置一下这个客户端。首先 打开之后就是我们平常常用的远程桌面的界面, 我们来配置一下这个 id, 还有中意服务器,这地址是我们的内网地址, 端口是我们巡回里面这服务器上的端口。 充气服务器端口是一个二,三个幺,一个七,同样是内网地址 啊。点击确定 好这个桌面端,其中一个桌面端已经配置好,我们来打开另外一个。呃,另外一个远程的需要远程的桌面,这里我用 虚拟机来演示,也是一个温漆系统。首先打开这个控制界面, 点开 id 终极服务器配置,同样将这个服务器内网地址输入上去, 中济服务汽车地址, 需要配置两个,需要配置这两个地址,然后点击确定, 下面我们演示一下怎么去远程这个桌面, 将这个虚拟机作为远程端的,需要远程的桌面, 然后是他的 id 号,是输入到这个控制端, 然后点击连接 好,已经连接上,看一下,这是我们用控制用我们的实体机来远程的这个虚拟机, 我们随便来操作一下,同样可以打开里面的盘符, 我们来看一下,传出个文件,看一下, 将这个比方说我们将这个桌面上文档传到这个服务器,传到这个虚拟机里面, 选中这个文件 发射成功,看一下。 好,我们桌面上这虚拟桌面上多出来一个,这是我们刚才发生发生到的接收到的这个文件。 好,今天视频讲到这里,谢谢大家观看。


rustisk 是 一款免费开源的远程控制软件,我们提供中继和私有化部署服务。安装好软件后运行,点击 id 右侧的三个点,第一次使用需要配置中继服务器, 点击右上角第一个按钮,粘贴配置即可。 配置好后,你可以设置一次性密码和固定密码,其他设备同样配置好就可以通过 id 和密码远程控制。这是远程控制苹果电脑, 速度流畅,画面清晰,有需要可联系客服试用。 接下来演示远程控制安卓手机。 以上是 rustdisc 使用中继服务演示过程,购买中继服务后导入 rustdisc 即可使用,方便快捷。如果您更在意隐私安全,我们也提供私有化部署,只需一台云服务器,一年总费用也就一百元左右。

大家好,前两期我们讲了 pod 和 service, 搞懂了 pod 是 什么, service 怎么做负债均衡,但有个关键问题一直没回答,它们之间到底怎么通信的?今天我们就来拆开看。先说最简单的情况,同一个 pod 里的容器怎么通信? 上期我们说过一个 pod 共享网络,命名空间,所以容器之间直接用 local host 就 行,就像同在一个办公室里喊一嗓子。再看同一个 note 上的不同 pod, 每个 pod 都有一对虚拟网线,叫 mesh pair, 一端连着 pod, 另一端连着宿主机上的网桥 cb 二零。就像同一层楼的不同办公室,通过走廊连在一起,所以同 node 的 pod 之间通信,数据包走网桥就能到达。 最复杂的是跨 node 通信, pod 在 不同的机器上怎么找到彼此?这就需要 cni 插件出场了。 cni 全称 container network interface, 他负责为 pod 分 配 ip 和建立跨节点网络。最常见的做法是 overlay 网络,用 vislan 技术在物理网络之上建一条虚拟隧道,就像在不同城市之间修了一条高速公路,数据包封装后走隧道到达对端 再解封装,交给目标 pod, 搞定了 pod 之间的通信,接下来看 service 怎么把流量转到 pod。 上期我们说了 cluster ip, 但有个真相你可能不知道, cluster ip 根本不存在, 它不在任何网卡的 r 表里,也不在任何一个交换机上。那请求是怎么到达的呢?关键就在 cuba proxy。 每个 node 上都运行着一个 cuba proxy, 它的工作就是在 linux 内核里写规则,具体说是 ipvs 或者 ipvs 规则,当数据包的目标地址是 cluster ip 时, ipos 规则匹配命中 执行 d n a t 操作,也就是改写目标 ip, 从虚拟的 cluster ip 改成某个真实 pod 的 ip。 就 像你拨打四零零客服电话, 总机查到某个空闲的坐席号码,直接帮你转接过去。那这些 octables 规则谁来维护呢?就是 cuba proxy, 它会 watch api server 上 service 和 endpoints 的 变化,一旦有变化就更新本机的规则, 保证转发规则始终和集群状态一致。最后还有一个好帮手, card dns k 八 s 集群里每个 service 都会自动获得一条 dns, 记录格式是服务名点命名空间点 svc 点 cluster 点 local。 所以在 pod 里,你根本不需要记 ip, 直接用服务名就能访问。比如你的代码里写 h t t p 冒号,斜杠斜杠 my 杠 api 杠 service 八千零八十 cardin s 会帮你解析成 cluster ip, 然后走刚才说的 cuba proxy 转发链路。 就像幺幺四,查号台记不住号码,没关系,查名字就行。总结一下, c n i 负责 pod 之间跨节点通信, cuba proxy 负责 service 到 pod 的 流量转发, cordns 负责把服务名翻译成 ip, 三个组建各司其职, k 八 s 网络就全通了。三段视频带你搞懂 k 八 s 流量管理。点个赞,关注我们下个系列见!

嘿,大家好,今天咱们来聊一个计算机底层里非常核心的一个概念,进程监通信,英文缩写就是 ipc。 说白了,它就是一套能让那些八根子打不着的独立程序,能够手拉手一起干活的魔法工具。 好,咱们就从一个具体的问题开始吧。您想想看,假设有一个程序,他特别擅长做那种复杂的数学计算,另一个呢,是用完全不同的语言写的,专门负责把计算结果画在屏幕上。 那问题来了,这两个程序怎么沟通?怎么才能把他们各自干的活完美的拼在一起,最终显示出那张漂亮的图像呢?这就是我们今天要解开的谜题。 又想搞明白他们是怎么合作的,咱们得先知道他们为什么天生就是老死不相往来的。没错,操作系统在每个程序之间都砌了一堵又高又厚的隔离之墙。 你看,每一个正在运行的程序,我们都管它叫一个进程,你可以把它想象成一个完全封闭的泡泡,或者说一个有自己围墙的小花园,这个花园里有它运行需要的所有东西,代码啊,数据啊,还有一块完全归它自己使用的内存。 而且啊,这堵墙可不是开玩笑的,要是哪个程序不守规矩,想偷偷伸只手到隔壁的内存里去,砰,操作系统会立马把它给干掉。这是一种极其重要的安全机制,就是为了防止一个程序出问题,把整个电脑系统都给带崩了。 既然隔离这么重要,这么严格,那我们干嘛还要费那么大劲让他们合作呢?嗯,主要就两个原因。第一,为了快 把一个超级大的任务拆成好几份儿,让好几个进城一块干,这不就快了吗?第二呢,是为了模块化,就像搭积木一样,我们可以用一堆功能专一的小程序,拼出一个功能强大的复杂系统。 好,那怎么合作呢?咱们来看第一条路,我喜欢叫它共享工作区模型,你想就好像两个本来在各自独立办公室里干活的人,现在我们给他们开辟了一个共用的工作台,这个工作台在计算机里就叫共享内存。 那这个共享工作区是怎么建起来的呢?其实分这么几步,首先得有个进程,先举手跟操作系统说,老板给我开一块共享空间, 操作系统一看行,批准了,然后就把这块空间的访问限制给取消掉。接着其他想合作的进程,就可以把这块共享空间接到自己的小花园里 好了,一旦这个主备工作做完,操作系统就拍拍屁股走人了,剩下的事他就不管了。这就是共享内存最大的优点,快, 简直是飞快。因为进城之间可以直接在这块共享的内存上读写数据,中间没有任何人传话,就跟在自己家地盘上操作一样,速度当然快的惊人, 但是快是有代价的。最大的风险就是误解。比如说一个进城往共享区里写了个数字,他的意思是负一,可另外一个进城呢?他不知道啊,他按自己的理解去读,结果读出来一个二百五十五, 你看数据本身没错,但因为双方的解读方式不一样,意思就全拧了,对吧?这种事儿一旦发生,操作系统是不会帮你检查的,所有的烂摊子都得开发者自己来收拾。 那么现实中谁会用这种又快又险的方法呢?其实我们天天都在用,就拿 chrome 浏览器来说吧,你打开的每一个网页标签,它都是一个独立的进程,这么做就是为了防止一个网页崩了,整个浏览器都跟着完蛋。 那这些独立的标签页之间要怎么高效沟通呢?没错,就是靠的共享内存。好说完了风驰电掣的共享工作区,咱们再来看第二条路,我管它叫邮政服务模型,也就是消息传递。 在这个模型里,操作系统就摇身一变,成了一个极其靠谱、任劳任怨的邮递员。 这个模式的核心思想就是,进城之间绝对不碰对方的内存,大家的小花园还是各自独立的,谁也别进谁家。所有的沟通都通过打包好的消息来完成,就像写信一样。 那这个邮政服务具体是怎么跑的呢?你想啊,就跟寄信一样,进城 a 想给进城 b 发点东西,他会调用一个发送函数,把打包好的消息交给操作系统这个邮递员。 操作系统呢,会先把这个消息复制一份,存到自己一个特别安全的地方,就叫内核空间吧。然后等进城必想收信了,他就调用一个接收函数,跟邮递员说,我来取信了,操作系统再把信安全地交给他。 你看,从寄信到收信,每一步都有邮递员在中间协调啊。这里有一个很深刻的洞见,就是这句引言里说的,不是直接发给进城的 这个端口,你就可以把它理解成每个进城专属的独一无二的信箱地址,这么一来,系统就变得特别灵活,进城之间不需要知道对方到底在哪, 所以这种模式最牛的地方在哪呢?就是它的通用性,因为大家压根就不共享任何物理内存,那他们根本就没必要待在同一台电脑上。 一个进城可以在北京的服务器上,另一个可以在纽约的服务器上通过网络互相发消息。但对于写代码的我们来说,感觉就跟他们在隔壁一样方便。 好了,两条路咱们都看过了,一个是追求极致速度的飞毛腿,一个是注重安全稳妥的老司机。现在呢,是时候把他们拉到台面上,来一场正面对决,看看这速度和安全之间到底该怎么选。 你看这张对比表,总结的特别清楚,要论速度,那共享内存肯定是王者,快的没边。但是代价呢,就是开发者得自己处理各种复杂的同步问题,特别头大。 而消息传递呢,速度是慢一点,毕竟每条消息都得让操作系统过一手,有开销嘛。但它的好处是,操作系统把脏活累活都干了,开发者省心多了,而且还能轻松地跨网络工作。 所以你看这事吧,它没有一个绝对的谁好谁坏,这完全是一个权衡。你做的这个应用,是追求那种极致的压榨出最后一滴性能的速度呢?还是更看重开发的便利性,系统的稳定性和未来的扩展能力?这是一个经典的工程选择题。 最后呢,我想留给大家一个问题来思考一下,你看现在这个时代,到处都在谈分布式系统,微服务软件系统变得越来越分散,越来越依赖网络。 那么咱们今天聊的这两种最古老、最基础的通信魔镜,共享内存和消息传递,你觉得哪一种更能代表未来的发展方向,为我们未来的软件架构提供更好的蓝图呢? 这个问题没有标准答案,但它确实值得我们每个人去深入思考。

code outs pipeline 流水线服务提供了基于微服务 diox 的敏捷变更开发模式, 可以实现快速自动合并代码,做到特性暗区发布,加速企业价值变现,同时提供变更承载为服务需求的开发特式。发布上线全过程、全流程,一推一可追溯 微服务是一种软件治理架构,一个复杂的软件项目可以由一个或多个微服务组成。系统中各个微服务之间是双偶合的,各微服务病情独立开发、 构建、验证及部署上线。通常来说,微服务具备边界清晰、独立部署、技术多样等优点。本节视频中,我们将对微服务和变更发布流水线进行简单介绍。 首先登录 codax 软件开发生产线,进入项目下的流水线服务页面,点击上方微服务标签,进入微服务列表页面, 点击新建微服务按钮,开始进行微服务的创建。根据需要填写微服务名称, 选择所需代码仓,选择相应分支,指定微服务开发语言, 点击确定完成微服务的创建。 微服务创建完毕后,将进入自动进入微服务盖栏页面。 微服务盖栏页面展示了当前微服务的基本信息,包括创建人、创建时间、微服务绑定、艾玛汤及分支等相关信息。 除盖览信息页面外,微服务还提供了变更流水线环境等其他相关页面。 接下来我们将对微服务变更发布流水线进行简单介绍,并演示其创建过程。 首先点击微服务当中的流水线标签页,进入到微服务下的流水线列表页面,点击新建流水线, 进入到微服务流水线的按键页面,根据需要配置流水线名称等 微服务流水线的流水线源,艾玛仓将自动设置与微服务一致, 打开基于变更触发开关,将当 前流水线设置为微服务变更发布流水线开启。基于变更出发后需要设置 codas viper h t t p s 授权,根据需要新建或选择合适的授权扩展点。 微服务变更发布流水线与普通流水线存在一定区别,微服务变更发布流水线仅支持基于变更触发运行, 且单个微服务下能且仅能存在一条微服务变更 w 流水线 配置完毕后,点击下一步, 点击确定进入到微服务,并跟流水线编排页面。 微服务变更发布流水线的编排与普通流水线编排任务相似,根据需要配置相应的代码检查、构建、部署等任务。点击新建任务按钮, 选择 code arts build 构建,根据需要选择相应的构建任务,设置构建任务场所,点击确定 完成固定任务编排,同理配置代码检查任务及部署相应任务, 点击保存完成微服务变更。 up 流水线的创建。 微服务发布流水线也将档次在项目下的流水线列表当中。除此之外,我们还可以前往微服务流水线列表进行相应查看。 点击上方微服务标签页,选择我们创建的微服务,切换至流水线列表页面, 可以看到这里就是我们刚才创建好的微服务变更发布流水线。 本节视频我们进行了微服务 及微服务变更发布流水线创建的简单介绍,下节视频中我们将继续介绍 如何创建变更,并通过微服务变更发布流水线进行变更发布。

简历上一写就是精通 spring cloud, 主导微服务架构转型。面试官问你什么是微服务?你张嘴就是微服务,就是把单体应用拆分成一个个独立的小服务,独立部署,通过 r p c 调用。 excuse me? 这就是你对架构的理解? 本视频完整笔记我都整理进了两百万字的 java 加 ai 面试提库里了,里面包含了主流技术占与几十个项目场景题, 还有各个工作年限的简历模板,以及 java 和 ai 大 模型的学习路线。这不就是把一个大的史山拆成了几百个分布式管理的小史山吗?这就叫架构升级,我看你是架构降级,来 look at me。 要理解微服务,先算算这笔账,单体架构下一个方法调用是本地调用,耗时是那秒级的,拆分之后呢?变成了网络, r p c 耗时直接变成了毫秒级,这一来一回,网络开销翻了成千上万倍。 这里的性能损耗你算过吗?没算过就敢拆?更可怕的在后面单体架构里,一个 transactional 就 能搞定的 s a、 d。 现在呢?服务 a 扣款成功了,服务 b 发货失败了,服务 c 的 积分还没加上,怎么办?这时候你发现 s、 a、 d 没了,迎面而来的是丢单, 这就是所谓的数据分家噩梦开始,出了问题怎么办?以前你连上服务器,一个 grab 就 能查日记,现在几百个服务实力几百个容器在跑,你还在用 grab? 服务数量爆炸,你的运维能力跟上了吗? 要是没有完善的基建,微服务就是瞎子摸象。所以,到底什么是微服务? listen carefully? 微服务不是银弹,它本质上是一场交易, 你是用运维的复杂度和系统的强一致性去换取业务的敏捷性和团队的独立性。 这是一场通过痛来换取自由的交易,懂了吗?既然痛,那怎么止痛?如果一个服务挂了,会不会拖垮整个链路?你的护城河修了吗?熔断? circuit, breaking, 降级, fallback, 限流 rate, limiting? 三 t 脑配了吗? haystrex 用了吗?没有这些,你的系统就是多米诺骨牌,一推就倒。那数据一致性怎么解?你是想上 sata 搞分布式事务? no, 顶级高手的直觉告诉我们,尽量避免分布式事务,能一步的全部给我用 mq 做,最终一致性 强。一致性是性能杀手,能躲就躲。那几百个服务怎么监控?你必须得有可观测性的三架马车, logging 用 ilk 搜集日记, tracing 用 skywalking 搞全链路追踪, matrix 用 prometheus 看监控指标,缺一个,你就是瞎子摸象。 最后也是最高级的理解,康威定律告诉我们,系统架构最终反映的是组织的沟通结构。如果你们公司没有带 boss 文化,没有自动化的 c c d, 没有 k 八 s 这种底座,别揽瓷器活。基础设施决定上层建筑硬上微服务就是找死。 总结一下,规模小的时候单体就是王道,规模大了才考虑微服务,别只做一个 api 搬运工。真正的高手是懂权衡的。听懂了吗?回去把你简历上的精通改成了解, 别在行家面前丢人现眼。大家还有什么问题可以评论区聊聊。我是 fox, 关注我,技术面试不迷路。

一改信一行极其普通的 delete 命令,直接干垮了全站微服务。今天复盘一场真实的 s 级生产事故,当线上大面积超时,数据库正常,唯独 radis 连接时瞬间爆满,你会怎么排查?视 频设计的详细资料?我整理进了两百万字的 java 与 a 大 模型学习资料里面了,里面包含了 jvm、 radis、 ngo、 微服务、 a 大 模型等三十多个技术站,与一百多个项目长期实战笔记、 不同工作年限同学的简历模板,以第一份加瓦加 ai 三十天面试途径,给机会选的话直接拿去。其实我们可以顺着连接池后进这个线索往下挖,你会发现,压垮系统的根本不是病发突增,而是锐利斯的主线层被彻底卡死了。当大量业务客户端同时发起请求时,如果其中夹杂了一个耗时极长的操作, 整个连接池就会像早高峰的高架桥一样,瞬间拥堵爆满。过去的所有请求都会被连接池拖空,直接导致微服血崩。为什么会卡死?核心在于处理大 k 时的底层机制。 当业务尝试删除一个包含一千万个元素的哈希结构时,底层的内存分配器必须老老实实地去辨别字典数,逐 个节点回收内存。这个过程耗时高达五千毫秒以上。在这漫长的五秒内,主线层处于绝对堵塞状态,无法响应任何其他客户端的请求。清楚了单线层堵塞的破坏力,很多人可能会抱有侥幸心理, reds 早就升级支持了多线层了,怎么还会堵塞? 这是一个非常经典的技术误区,以为版本升级就能自动解决大 k 组测问题,往往会付出惨痛的代价。确实,这新版本的 reds 引入了多线城,但这仅仅作用于网络 i o 层面, 或者并发解析客户端发来的 i s p。 协议,以及把处理结果回写给客户端,在这个环节效率确实提升了。但是这些弊端的网络请求解析完毕后,他们必须乖乖排队进入核心引擎。 无论外层的网络 i o 有 多少个县城在迸发,真正执行命令的依然是唯一的那个主县城,而且命令的执行是绝对创行的。 既然手动执行删除会踩坑,那我不手动删,给数据设置一个 t t l 过期时间,让它自己销毁总行的吧。我们给庞大的业务记录设置了过期时间,很多开发商天真以为时间一到,瑞子会在后台默默地把它清理掉。 但如果没有做特殊处理,定期删除和断开删除,底层调用的依然是同步删除逻辑。这就导致了一个经典的定时炸弹。 到了凌晨零点,大 k 集中过期,主系统瞬间卡死,监控疯狂报警,全场瞬间崩溃,而排查时甚至连谁触发的都找不到。了解了这些隐蔽的炸弹,当线上真的出现内存突增和 cpu 监测时,我们该怎么精确定位? 排查的第一步是监控大盘,当发现内存突增伴随 cpu 打满且延迟指标超过五千毫秒时,基本可以断电时,可以在作祟。第二步是在线排查,这里有个存在底线,严禁使用型号同倍符去扫全盘。我们必须使用 bkk 命令, 它底层使用的是 scan 油标,便利每次只取少量数据,不会组测组现成。第三步,为了绝对不影响线上业务,最隐秘的做法是导出 r、 d、 b 备份文件,使用工具生成内存报告。通过导出的 csv 格式数据,我们一眼就能精准定位到具体的数据库和具体的 key。 比如占用高达八点五 gb 的 那个哈希结构,揪出了这个八 gb 的 元凶,接下来就是如何安全地把它清理掉。传统的同步注射模式会让主线成苦哈哈的耗时五秒去释放内存。更优雅的做法是改用 anik mini 的 核心价值在于 oe 摘除加异步释放。 如建成只做一件事,把这个 key 从字典树上摘下来,凑死不到一毫秒,然后立刻返回成功状态去处理其他进球。真正的内存释放工作交给了后台的异步现成,但后台默默便利释放,完全不影响主现成。 同时,为了解决前面提到的 t、 d、 l 过期炸弹,必须在配置文件中开启这个配置开启后,过期删除也会自动走异步释放逻辑。而宁可和参数调优确实能快速直选,但这只是事后补救。真正的高可用架构需要自行规避。 只要把一千万个元素塞进同一个 k 里,它就是一个单点热点。无论怎么优化删除,在写入和读取时依然极易造成网络贷款和 cpu 的 瓶颈。 真正的架构式方案是数据分片。通过哈奇、取模等路源逻辑,我们将运用庞大的单体架构打散成上千个子单元,每个子单元只有一万个元素,这就会让数据分布在极权的不同节点上,彻底根除了单点堵塞风险。

obantu 博客热议 rest 调度程序和未来可能的微内核设计站岗人 michael larabell 广告时间更新不易,如果觉得本频道对你有用,麻烦不要吝啬点赞收藏订阅。 obantu cananiko 目前一直在宣传 rest 编程在 linux 内核中的前景, 他们的一名内核工程师安德里亚里集 angel rigi 编写了一个用 rest 编写的 linux 调度程序,该调度程序具有有希望的结果,他利用 ibap 在运行时动态加载。虽然 obant 尚未承诺将其用作其发行版的一部分, 但今天出现在 obantu 博客上的是对该工作的更多赞誉,甚至讨论了通过利用 rust 和 ibep 在未来进行为内核设计的潜力,以及今天在 ubuntu 博客上发帖讨论使用 shadex 为 ibap 加载的调度程序实现 rust 和 buntu 实现 新的 linux 调度程序。除了开发人员优势之外,这种组合还可以产生最终用户优势,例如能够根据用户工作负债和其他根据用户情况的特殊情况加载优化的调度程序。这篇博文继续指出,如果需要, 可以通过 p p a。 将 s c x island 与 ubuntu 二十四点零四一起使用。这项 rest 调度程序工作已被证明是最近引入内核的默认引入的调度程序的潜在可行替代方案。 abuntu 博客文章最后总结到,我们正朝着微内核设计迈进,这种设计有可能为 linux 上的认证铺平道路。 在上述场景中,如果用户空间调度程序崩溃,任务将无缝过渡到默认的内盒内调度程序确保连续的系统可用性而没有任何停机时间。这表明类似的方法也可以用于其他此系统,从而允许 x 内核提供完全勇于且防故障的系统。尽管这超出了即将发布的 obontu 二十四点零四 lts 的范围,但看到这些评论出现在 obontu 博客上 以及在克纳内扣正在扩充其性能和工程团队的时候还是相当有趣的。值得关注的是,他们未来可能会在这个领域进行哪些创新,而 scx restland 工作本身已经证明非常有趣,未来值得期待。

奥特曼问,那刚才我们已经准备好了 hotel demand 这样一个管理的服务,那接下来我们进行第二步啊,就是声明 发送消息所需要的交换机对列和如听 k。 那么我们到底需要几个对列啊?什么样的如听 k 以及什么样的交换机呢? 大家来分析一下我们的业务啊。我们要做的事情其实很简单,就是当酒店发生增删改时去发消息,那也就说我们消息其实就三种吗?要么增,要么删,要么改,那这么说我们是不是需要三个对列,三个不同的人群可以呢? 哎,其实不是这样子啊,大家想,虽然酒店发生的事件是增山或改,但是对应到 es 里边呢, 那么你做增或改,对 es 来讲都是往所有库里去插入数据,因为你在 es 当中, 你往里面插入数据 id, 如果不存在就是新增 id, 如果存在他就是什么呢?修改。所以完全可以把增和改是合成一个业务 啊,因此呢,这两种业务将来发送的消息可以认为是同一种消息啊,而删除的时候呢,就不一样了,那 es 要做删除, 那因此呢,我们将来可以认为消息的类型就是两类消息,一类呢就是增或改的消息,一类就是删的消息,那因此将来对列呢,就两种,那每个对列有一个对应的柔君 k 就 ok 了。所以呢,我们最终的消息模型是这样子的,我们需要有一个交换机啊,我们为 比如说用 topic 类型吧。然后呢,我们需要两个对列,一个呢起名为 hotel insert q, 一个叫 hotel delete q, 那这个呢,就监听增或改的消息,那这个就监听删除消息,当然增和改其实是以类消息啊,所以,所以它所对应的这个 k 呢,就叫 hotel insert 啊,这个叫后跳 delete。 那当酒店去发送消息的时候,那如果是增或改,消息自然就发到了这个里边,那就用这个 k, 那么这个时候呢,我们的后台 demo 里边就会有一个对应的消费者啊,叫雷森林 start, 去监听对应的消息,完成啊,往缩影库里写入数据。 而如果说你做的是一个删除酒店的操作,那么这个消息呢,就会发送到 delete q 队列将来了,由于对应的消费者去监听完成数据的删除就可 好,所以接下来呢,我们就来声明这个 x change 啊,后调 topic 和这两个对列,以及对应的柔情 k, 那我们打开 ad, 我们声明这个交换机和对列一般都是在消费者里面去做的啊,所以我们应该找到后台啊, demo 啊,然后在这里边,我们首先去引入依赖 mq 相关的依赖,我们打开 pom, 然后呢, mq 相关的依赖呢,其实是我们 spring 的 amqp 依赖,对吧?所以我们在这里呢去引入 amqp 啊, spring boat am qp starter 就这个,然后打个包,而后呢,我还需要在 yima 文件当中去配置 一下 amqp 的啊,地址啊,所以我们打开 a 某文件,我们需要去配置啊, rapmq 的地址 w m q 啊,那这里啊,首先是他的地址,那我们是幺九二幺六八幺五零点幺零幺,然后是端口啊,端口呢,就是五六七二, 然后是用户名,用户名呢,我们是 itcast, 然后密码,密码,我们是一二三三二一,然后是虚拟主机,我们是杠,这些我们以前都做过啊,所以我这里就直接快速的进行了。 那接下来呢,我们就可以去声明对列交换机了,那声明的话,我们最好定义成一个常量,对吧?我们先定一个常量吧,比如说叫 mq 的 constance。 好,那在这 这里呢啊,我们把它添加到 get 里边,我们去定义这么几个东西啊,第一呢是交换机的名称 string 类型,那当然最好是 final static。 好了,这个呢,我们取名为 hotel exchange, 然后呢,他的值呢?我们就叫 hotel 点 topic 吧,起这么一个名字啊,然后呢,这个我们给他大写啊,就显得比较专业了。那我们还需要 定义对列的名称,还有这个柔情 k 啊,这是交换机。好,我们再来两个吧, 那接下来定一个对列监听啊,新增和修改的对列, 这个呢是监听删除的地理。 好,那这个对列的名字呢?我们叫 hotel insert cure, 好像对的名字也叫 hotel insert。 那下边那个我们就叫后跳 delete q, 好,这里起名为 delete q。 路行 k 呢,应该也有两个,一个呢是新增或修改。 好,那我们起名为后跳 insert 啊 k, 那这里就叫后跳 insert 吧,那我们再来一个是删除的一个如心 k 啊, 那起名为奥迪奥 delete key, 那这里呢就 delete, 那这样我们就定好了交换机的名字啊,还有 队列的名字,以及中间 k 的名字。接下来就是去定义他们之间的啊,绑定关系啊,还有队列和旧传记的对象了。那定义方式有两种,一种是基于注解, 第二种方式呢是基于病的。其实基于注解的方式是最简单的啊,那么基于病的方式相对会复杂一点啊,那这个地方呢,我们就用相对于麻烦一点的基于病的方式来给大家演示。好吧, 好,那定义呢,我们需要定一个专门的类啊,比如说看这个类啊,起个名字叫 mq, 看这个, 然后我们需要加上 configeration, 注解在这里啊,开始声明一个一个的变呐,那你要声明一个交换机,那 topic 类型,那你就来一个,叫 topic exchange。 好,那么交换机里边呢,你就要去创建出他的对象了,那比如说 new topic x change, 在这里呢,可以指定交换机的名称, 交换机的名称我们可以用 mq constance 这个长量里边的。呃,交换机的名字啊,我们刚刚没有定义成帕布雷克吗? 我们来看一下啊,都是 private, 我们定义成 public, 我们把每一个都调成 public, 我们再回到 come fig 内里点,我们可以选择这个后台前置,那这样名字就有了。然后呢,剩下的这几个参数呢?持久化,我们以前讲过这个啊,我们改成处啊,保证它持久化,奥迪给它改成 fouse 就行了,这个不需要。好的,这样我们就实现了一个旧换季的定义了。 好,那接下来呢,我们再来定义两个对立。 好,我们定义一个,第一个队列是 insert 啊,它的类型是 q 类型,对列类型啊,然后名字叫 insert q, 新增的一个对列 retired new eq。 那在这个 q 里呢,你肯定要指定的名称,对,这名称呢,我们同样用产量 mq constance, 点 这里,我们选择 insert q 这个队列的名字,然后同样给一个持有化,然后剩下的我们就不需要了。好,这样队列就创建好了。这是一个队列啊,你还需要一个用来做删除的队列,所以呢,再复制一份,这个地方改名为 delete, 所以呢,这个地方呢,材料值也要改了, delayed q, 然后呢,定义绑定关系,绑定关系呢,我们以前说过是用一个类叫扳定啊,注意选择 spring am q p 包下的啊,别选错了。 好,我们先来一个叫 insert cubandi, 那这个地方我们可以用 bending builder 来实现啊, banding builder, 它里边啊,有一个叫 band a band 呢,就是指定要对谁做绑定啊,那 band 的时候呢,我们要指定队列和交换机队列呢,我们先来指定这个 insert q 队列。好,然后 to 啊,绑定到哪个交换机,绑定到 topic x 禁止这个交换机。 好,然后呢,是用哪一个肉丁 k 啊?肉丁 k 呢?我们用长量 mq constance 点,我们选择啊 insert 的这个 k 就可以了。好,那 us 类似呢,还有 delete 这边呢,起名为 delete cubanding, 那用的对列就不再是银色的对列了,而是 delete 对列,那如定 k 也变了,如定可以变成 delete。 好,那写完这个代码呢,其实我们对列和交换机的这些个声明就全部完成了啊。行,那我们这一课内容啊,就到这里。