求这个软件的名字和安装地址(软件安装包后缀也行)


  • 要是github下载慢的话,都有自己的文明上网加速方式,要是没有的话,可以进入 /rabbitmq/rabbitmq-server/releases , 选择自己要的版本即可


  • 这表示正在启动,需要等一会儿,看到下面的样子就表示启动成功

  • 7、安装web管理插件
  • 要是访问不了,看看自己的防火墙关没关啊
# 一劳永逸 禁用防火墙
  • 同时查看自己的服务器有没有开放15672端口,不同的东西有不同的处理方式,如我的云服务器直接在服务器网址中添加规则即可,其他的方式自行百度



  • 使用下面的两种方式都不需要进行web管理插件的安装和erlang的安装


  • 1、查看自己的docker容器中是否已有了rabbitmq这个名字的镜像


  • 3、查看Docker容器是否启动

  • 4、再次在浏览器进行访问就可以吃鸡了,不需要再安装插件啊,刚刚上一步拉镜像和启动时已经安装好了

  • 采用了第二种方式的话,记得把已经启动的Docker容器关了,以下是附加的一些Docker的基操
  • # 加载本地的镜像文件 # -d:代表后台运行容器 # -p 宿主机端口:容器端口:为了映射当前Linux的端口和容器的端口 # --name 容器名称:指定容器的名称 # -a:查看全部的容器,包括没有运行 # -q:只查看容器的标识 # -f:可以滚动查看日志的最后几行 # 将宿主机的文件复制到容器内部的指定目录 # 启动停止运行的容器 # 停止指定的容器(删除容器前,需要先停止容器)
    • 1、创建一个文件夹,这些我很早之前就玩过了,所以建好了的

    • 2、进入文件夹,创建docker-compose.yml文件,注意:文件名必须是这个

    • 里面编写的内容如下,编写好保存即可。注意:别用tab缩进啊,会出问题的,另外:每句的后面别有空格,严格遵循yml格式的
    # 端口号,docker容器内部端口 映射 外部端口 # 数据卷映射 把容器里面的东西映射到容器外面去 容易操作,否则每次都要进入容器
    • 4、在docker-compose.yml所在路径执行如下命令,注意:一定要在此文件路径中才行,因为默认是在当前文件夹下找寻docker-compose文件
    # 2. 关闭并删除容器 # 有兴趣的也可以去了解docker-file自定义镜像
    • 去浏览器访问一样的吃鸡
    • 上面就是RabbitMQ的基操做完了,不过默认账号是guest游客状态,很多事情还做不了呢,所以还得做一些操作

    2.1.4、解决不能登入web管理界面的问题

    • 这种方式直接使用guest进行登录是不得吃的

    • 这是因为guest是游客身份,不能进入,需要添加新用户
     查看当前用户 / 角色有哪些
     设置用户权限【 ps:guest角色就是没有这一步 】
    # 设置用户权限指令解释
    

    • 现在使用admin去浏览器登录就可以了
    • 这两种方式直接使用guest就可以进行登录,后续的操作就是一样的了

    • 创建Maven项目 并导入如下依赖

    • 对照原理图来玩,官网中有Hello word的模式图

    // 1、获取链接工厂 // 2、设置链接信息 当然:这里还可以设置vhost虚拟机 - 前提是自己在web管理界面中添加了vhost // 4、创建channel信道 - 它才是去和交换机 / 队列打交道的 // 这里理论上是去和exchange打交道,但是:这里是hello word简单模式,所以直接使用默认的exchange即可 下面这是参数的完整意思,源码中偷懒了,没有见名知意 参数2、是否持久化( 保存到磁盘 ),默认是在内存中的 参数3、是否共享,即:是否只供一个消费者消费,是否让多个消费者共享这个队列中的信息 参数4、是否自动删除,即:最后一个消费者获取信息之后,这个队列是否自动删除 参数5、其他配置项,这涉及到后面的知识,目前选择null // 6、推送信息到队列中 // 准备发送的信息内容 参数1、交互机名字 - 目前使用了默认的 参数2、指定路由规则 - 目前使用队列名字 参数3、指定传递的消息所携带的properties 参数4、推送的具体消息 - byte类型的 // 7、释放资源 - 倒着关闭即可

    • 运行之后,去浏览器管理界面进行查看

    // 1、创建链接工厂 // 2、设置链接信息 // 3、创建链接对象 // 5、从指定队列中获取消息 参数2、是否自动应答,为true时,消费者接收到消息后,会立即告诉RabbitMQ 参数3、消费者如何消费消息的回调 参数4、消费者取消消费的回调 // 6、释放资源 - 但是这里不能直接关闭啊,否则:看不到接收的结果的,可以选择不关,也可以选择加一句代码System.in.read();


    • 一个生产者批量生产消息
    • 换言之:就是有大量的任务 / 密集型任务有待处理( 生产者生产的消息 ),此时我们就将这些任务推到队列中去,然后使用多个工作线程( 消费者 )来进行处理,否则:一堆任务直接就跑来了,那消费者不得乱套了,因此:这种就需要让这种模式具有如下的特点:
      • 1、消息是有序排好的( 也就是在队列中 )
      • 2、工作线程 / 消费者不能同时接收同一个消息,换言之:生产者推送的任务必须是轮询分发的,即:工作线程1接收第一个,工作线程2接收第二个;工作线程1再接收第三个,工作线程2接收第四个


      下面这是参数的完整意思,源码中偷懒了,没有见名知意 参数2、是否持久化( 保存到磁盘 ),默认是在内存中的 参数3、是否共享,即:是否只供一个消费者消费,是否让多个消费者共享这个队列中的信息 参数4、是否自动删除,即:最后一个消费者获取信息之后,这个队列是否自动删除 参数5、其他配置项,这涉及到后面的知识,目前选择null // 3、推送信息到队列中 参数1、交互机名字 - 目前是使用了默认的 参数2、指定路由规则 - 目前使用队列名字 参数3、指定传递的消息所携带的properties 参数4、推送的具体消息 - byte类型的

      • 消费者在接收到消息并且处理该消息之后,告诉 rabbitmq 它已经处理了,rabbitmq 可以把该消息删除了
      • 目的就是为了保证数据的安全,如果没有这个机制的话,那么就会造成下面的情况
      • 消费者接收队列中的消息时,没接收完,出现异常了,然后此时MQ以为消费者已经把消息接收并处理了( MQ并没有接收到消息有没有被消费者处理完毕 ),然后MQ就把队列 / 消息给删了,后续消费者异常恢复之后再次接收消息,就会出现:接收不到了

      3.3.1、消息应答机制的分类

      参数2、是否自动应答,为true时,消费者接收到消息后,会立即告诉RabbitMQ 参数3、消费者如何消费消息的回调 参数4、消费者取消消费的回调
      • 指的是:消息发送后立即被认为已经传送成功
        • 1、发送的消息很多,就是高吞吐量的那种
        • 2、发送的消息在传输方面是安全的
      • 优点:处理效率快,很高效

      • 就是我们自己去设定,好处是可以批量应答并且减少网络拥堵

      • multiple参数说明,它为true和false有着截然不同的意义【 ps:建议弄成false,虽然是挨个去处理,从而应答,效率慢,但是:数据安全,否则:很大可能造成数据丢失 】

        • true 代表批量应答MQ,channel 上未应答 / 消费者未被处理完毕的消息
        • false 只会处理队列放到channel信道中当前正在处理的消息告知MQ是否确认应答 / 消费者处理完毕了
      3.3.1.3、消息重新入队原理
      • 指的是:如果消费者由于某些原因失去连接(其通道已关闭,连接已关闭或 TCP 连接丢失),导致消息未发送 ACK 确认,RabbitMQ 将了解到消息未完全处理,并将对其重新排队。如果此时其他消费者可以处理,它将很快将其重新分发给另一个消费者。这样,即使某个消费者偶尔死亡,也可以确保不会丢失任何消息
      • 如下图:消息1原本是C1这个消费者来接收的,但是C1失去链接了,而C2消费者并没有断开链接,所以:最后MQ将消息重新入队queue,然后让C2来处理消息1
      3.3.1.4、手动应答的代码演示
      下面这是参数的完整意思,源码中偷懒了,没有见名知意 参数2、是否持久化( 保存到磁盘 ),默认是在内存中的 参数3、是否共享,即:是否只供一个消费者消费,是否让多个消费者共享这个队列中的信息 参数4、是否自动删除,即:最后一个消费者获取信息之后,这个队列是否自动删除 参数5、其他配置项,这涉及到后面的知识,目前选择null 参数1、交互机名字 - 使用了默认的 参数2、指定路由规则,使用队列名字 参数3、指定传递的消息所携带的properties 参数4、推送的具体消息 - byte类型的
      参数1、消息的标识tag,这个标识就相当于是消息的ID
      
       参数1、消息的标识tag,这个标识就相当于是消息的ID
      

      3.4.1、队列持久化

      • 这个玩意儿的配置吧,早就见过了,在生产者消息发送时,有一个声明队列的过程,那里面就有一个是否持久化的配置
      下面这是参数的完整意思,源码中偷懒了,没有见名知意 参数2、是否持久化( 保存到磁盘 ),默认是在内存中的 参数3、是否共享,即:是否只供一个消费者消费,是否让多个消费者共享这个队列中的信息 参数4、是否自动删除,即:最后一个消费者获取信息之后,这个队列是否自动删除 参数5、其他配置项,这涉及到后面的知识,目前选择null
      • 而如果没有持久化,那么RabbitMQ服务由于其他什么原因导致挂彩的时候,那么重启之后,这个没有持久化的队列就灰飞烟灭了【 ps:注意和里面的消息还没关系啊,不是说队列持久化了,那么消息就持久化了 】
      • 在这个队列持久化配置中,它的默认值就是false,所以要改成true时,需要注意一个点:选择队列持久化,那么必须保证当前这个队列是新的,即:RabbitMQ中没有当前队列,否则:需要进到web管理界面把已有的同名队列删了,然后重新配置当前队列持久化选项为true,不然:报错
      • 那么:当我把持久化选项改为true,并 重新发送消息时
      • 告知你:vhost虚拟机中已经有了这个叫做durable的队列,要接收的选项值是true,但是它当前的值是false,所以报错了呗
      • 解决方式就是去web管理界面,把已有的durable队列删了,重新执行
      • 再次执行就可以吃鸡了,同时去web管理界面会发现它状态变了,多了一个D标识
      • 有了这个玩意儿之后,那么就算RabbitMQ出问题了,后续恢复之后,那么这个队列也不会丢失

      3.4.2、消息持久化

      • 注意:这里说的消息持久化不是说配置之后消息就一定不会丢失,而是:把消息标记为持久化,然后RabbitMQ尽量让其持久化到磁盘

      • 但是:也会有意外,比如:RabbitMQ在将消息持久化到磁盘时,这是有一个时间间隔的,数据还没完全刷写到磁盘呢,RabbitMQ万一出问题了,那么消息 / 数据还是会丢失的,所以:消息持久化配置是一个弱持久化,但是:对于简单队列模式完全足够了,强持久化的实现方式在后续的publisher / confirm发布确认模式中

      • 至于配置极其地简单,在前面都已经见过这个配置项,就是生产者发消息时做文章,就是下面的第三个参数,把它改为MessageProperties.PERSISTENT_TEXT_PLAIN即可

      参数1、交互机名字 - 使用了默认的 参数2、指定路由规则,使用队列名字 参数3、指定传递的消息所携带的properties 参数4、推送的具体消息 - byte类型的 // 消息内容的编码格式 // 消息是否持久化,1:否,2:是 // :用于指定回复的队列的名称

      3.5、不公平分发 和 预取值

      • 这个东西是在消费者那一方进行设置的
      • RabbitMQ默认是公平分发,即:轮询分发
      • 轮询分发有缺点:如前面消费者01( 设5秒的那个 )和 消费者02 ( 设10秒的那个 ),这种情况如果采用轮询分发,那么:01要快一点,而02要慢一点,所以01很快处理完了,然后处于空闲状态,而02还在拼命奋斗中,最后的结果就是02不停干,而01悠悠闲闲的,浪费了时间,所以:应该压榨一下01,让它不能停
       // 不公平分发,就是在这里接收消息之前做处理
       为0、轮询分发 也是RabbitMQ的默认值
      

      • 指的是:多个消费者在消费消息时,让每一个消费者预计消费多少条消息
      • 而要设置这种效果,和前面不公平分发的设置是一样的,只是把里面的参数改一下即可
      
       // 预取值,也是在这里接收消息之前做处理,和不公平分发调的是同一个API
       而当这里的数字变成其他的,如:上图中上面的那个消费者要消费20条消息,那么把下面的数字改成对应的即可
       注意点:这是要设置哪个消费者的预取值,那就是在哪个消费者代码中进行设定啊
      

      3.6.1、发布确认模式的原理

      • 这个玩意儿的目的就是为了持久化
      • 在上面的过程中,想要让数据持久化,那么需要具备以下的条件
    • 而所谓的发布确认指的就是:数据在刷写到磁盘时,成功了,那么MQ就回复生产者一下,数据确认刷写到磁盘了,否则:只具备前面的二者的话,那也有可能出问题,如:数据推到了队列中,但是还没来得及刷写到磁盘呢,结果RabbitMQ宕机了,那数据也有可能会丢失,所以:现在持久化的过程就是如下的样子:

    • 在发送消息之前( 即:调basicPublish() 之前 )调一个API就可以了

    3.6.2、发布确认的分类

    • 一句话:一手交钱一手交货,即 生产者发布一条消息,RabbitMQ就要回复确认状态,否则不再发放消息,因此:这种模式是同步发布确认的方式,缺点:很慢,优点:能够实时地了解到那条消息出异常 / 哪些消息都发布成功了
    // 声明队列 并 让队列持久化 // 发送消息 并 让消息持久化
    • 一句话:只要结果,是怎么一个批量管不着,只需要把一堆消息发布之后,回复一个结果即可,这种发布也是同步的
    • 优点:效率相比单个发布要高
    • 缺点:如果因为什么系统故障而导致发布消息出现问题,那么就会导致是批量发了一些消息,然后再回复的,中间有哪个消息出问题了鬼知道
    // 声明队列 并 让队列持久化 // 发送消息 并 让消息持久化 // 批量发布 并 回复批量发布的结果 - 发了10条之后再确认 // 为了以防还有另外的消息未被确认,再次确认一下
    3.6.2.3、异步确认发布 - 必须会的一种
    • 由上图可知:所谓的异步确认发布就是:
      • 1、生产者只管发消息就行,不用管消息有没有成功
      • 2、发布的消息是存在一个map集合中的,其key就是消息的标识tag / id,value就是消息内容
      • 3、如果消息成功发布了,那么实体broker会有一个ackCallback()回调函数来进行处理【 ps:里面的处理逻辑是需要我们进行设计的 】
      • 4、如果消息未成功发布,那么实体broker会调用一个nackCallback()回调函数来进行处理【 ps:里面的处理逻辑是需要我们进行设计的 】
      • 5、而需要异步处理,就是因为生产者只管发就行了,因此:一轮的消息肯定是很快就发布过去了,就可以做下一轮的事情了,至于上一轮的结果是怎么样的,那就需要等到两个callback回调执行完了之后给结果,而想要能够调取到两个callback回调,那么:就需要对发送的信息进行监听 / 对信道进行监听
    • 而上述牵扯到一个map集合,那么这个集合需要具备如下的条件:
      • 1、首先此集合应是一个安全且有序的,同时还支持高并发
// 1、准备符合条件的map // 成功确认发布回调 // 4、把确认发布的消息删掉,减少内存开销 // 判断是否是批量删除 // 通过消息标识tag 把 确认发布的消息取出 * 上面这句代码拆分写法 // 没成功发布确认回调 // 2、将要发布的全部信息保存到map中去 // 生产者只管发布就行

  • 正如前面一开始就画的原理图,交换机的作用就是为了接收生产者发送的消息 并 将消息发送到队列中去
  • 注意点:前面一直玩的那些模式,虽然没有写交换机,但并不是说RabbitMQ就没用交换机【 ps:使用的是""空串,也就是使用了RabbitMQ的默认交换机 】,生产者发送的消息只能发到交换机中,从而由交换机来把消息发给队列


  • 所谓的临时队列指的就是:自动帮我们生成队列名 并且 当生产者和队列断开之后,这个队列会被自动删除
  • 所以这么一说:前面玩过的一种就属于临时队列,即:将下面的第四个参数改成true即可【 ps:当然让队列名随机生成就完全匹配了 】
下面这是参数的完整意思,源码中偷懒了,没有见名知意 参数2、是否持久化( 保存到磁盘 ),默认是在内存中的 参数3、是否共享,即:是否只供一个消费者消费,是否让多个消费者共享这个队列中的信息 参数4、是否自动删除,即:最后一个消费者获取信息之后,这个队列是否自动删除 参数5、其他配置项,这涉及到后面的知识,目前选择null
  • 而如果要更简单的生成临时队列,那么调用如下的API即可

  • 这玩意儿吧,好比群发,一人发,很多人收到消息,就是原理图的另一种样子,生产者发布的一个消息,可以供多个消费者进行消费
  • 实现方式就是让一个交换机binding绑定多个队列

* 参数1、交换机名字 * 参数2、交换机类型
* 参数2、交换机名字 // 这里面接收到消息之后就可以用来做其他事情了,如:存到磁盘
* 参数2、交换机名字 // 这里面接收到消息之后就可以用来做其他事情了,如:存到磁盘

  • 这个玩意儿吧就是发布订阅模式,也就是fanout类型交换机的变样板,即:多了一个routing key的配置而已,也就是说:生产者和消费者传输消息就通过routing key进行关联起来因此:现在就变成了生产者想把消息发给谁就发给谁

* 假如这里的routing key为zixieqing 那么:就意味着消费者只能是绑定了zixieqing的队列才可以进行接收这里发的消息内容
* 参数2、交换机名字
  • 上面这种,生产者的消息肯定能够被01消费者给消费,因为:他们的交换机名字、队列名字和routing key的值都是相同的

  • 而此时再加一个消费者,让它的routing key值和消费者中的不同
* 参数2、交换机名字

  • 前面玩的fanout扇出类型的交换机 / 发布订阅模式是一个生产者发布,多个消费者共享消息,和qq群类似;而direct直接交换机 / 路由模式是消费者只能消费和消费者相同routing key的消息
  • 而上述这两种还有局限性,如:现在生产者的routing key为zi.xie.qing,而一个消费者只消费含xie的消息,一个消费者只消费含qing的消息,另一个消费者只消费第一个为zi的零个或无数个单词的消息,甚至还有一个消费者只消费最后一个单词为qing,前面有三个单词的routing key的消息呢?
  • 这样一看,发布订阅模式和路由模式都不能解决,更别说前面玩的简单模式、工作队列模式、发布确认模式了,这些和目前的这个需求更不搭了,因此:就来了这个topic主题模式

  • 只要交换机类型是topic类型的,那么其routing key就不能乱写,要求:routing key只能是一个单词列表,多个单词之间采用点隔开,如:cn.zixieqing.rabbit
  • 单词列表的长度不能超过255个字节

  • 在routing key的规则列表中有两个替换符可以用
    • 2、# 代表零活无数个单词

  • 假如有如下的一个绑定关系图
  • 熟悉一下这种绑定关系( 左为一些routes路由规则,右为能匹配到上图绑定关系的结果 )
  • quick.brown.fox 不满足任何绑定关系,不会被任何队列接收到,会被丢弃
    • 当队列绑定关系是下列这种情况时需要引起注意
      • 当一个队列绑定键是#,那么这个队列将接收所有数据,就有点像 fanout 了
      • 如果队列绑定键当中没有#和*出现,那么该队列绑定类型就是 direct 了

    把上面的绑定关系和测试转换成代码玩一波



    3.8.2、队列超过最大长度

    3.8.2.1、队列超过所限制的最大个数
    • 意思就是:某一个队列要求只能放N个消息,但是放了N+1个消息,这就超过队列的最大个数了

    • 就是一个正常的生产者发送消息而已

    // 声明正常交换机、死信交换机 // 死信交换机和死信队列进行绑定 // 声明正常队列 并 考虑达到条件时和死信交换机进行联系 // 达到队列能接受的最大个数限制就多了如下的配置 // 正常队列和正常交换机进行绑定
    • 启动01消费者,然后关掉( 模仿异常 ),最后启动生产者,那么:生产者发送了10个消息,由于01消费者这边做了配置,所以有6个消息是在正常队列中,余下的4个消息就会进入死信队列
    3.8.2.2、超过队列能接受消息的最大字节长度
    • 和前面一种相比,在01消费者方做另一个配置即可

    注意:关于两种情况同时使用的问题

    • 那么先达到哪个上限设置就执行哪个

    3.8.3、消息被拒收

    • 注意点:必须开启手动应答


    // 声明正常交换机、死信交换机 // 死信队列绑定死信交换机 // 1、注意:需要开启手动应答( 第二个参数为false ) // 如果发送的消息为:生产者发送的消息5 则:拒收 // 2、做拒收处理 - 注意:第二个参数设为false,表示不再重新入正常队列的队,这样消息才可以进入死信队列

2022年双十一活动方案范文(通用13篇)

  为确保活动顺利开展,常常需要提前准备一份具体、详细、针对性强的活动方案,活动方案是阐明活动时间,地点,目的,预期效果,预算及活动方法等的企划案。那么大家知道活动方案怎么写才规范吗?以下是小编帮大家整理的2022年双十一活动方案范文(通用13篇),希望对大家有所帮助。

  2022年双十一活动方案1

  一、光棍节活动主题

  美容院“光棍节联谊活动”

  二、光棍节活动的目的

  1、11月11日是所有单身年轻朋友的节日,不妨在美容院的“光棍节联谊活动”中寻找到自己心仪的对象。

  2、想要脱离光棍节,想要那个他/她看到自己美好的一面,不妨让美容院来为自己全副武装一下,意思就是让美容院团队精心为你打造心仪的妆容。

  3、美容院借助光棍节活动,刺激年轻男女消费,提高美容院的业绩

  4、进一步提升自己的品牌知名度,增加顾客的信任感。

  三、光棍节活动时间

  四、光棍节活动对象

  单身男女朋友(年龄在18―45岁)、美容院顾客

  五、光棍节活动内容

  主要是通过一些游戏,比如传递苹果,猜谜语等情侣游戏,让陌生的男女双方能都彼此更加了解,此外还有男女双方的才艺演出,也可以让双方增进好感,美容院将为会获得最佳情侣奖的三对,可以获得美容院专业团队提供的免费化妆一次,以及面部护理项目一个月,优惠多多。

  虽说光棍节不属于我们国家的传统节日,但是现在越来越多年轻人喜欢过,美容院可以抓住这些年轻人的口味,推出一些优惠的促销节目,比如消费满388元即可100元的代金券,此外还有获得最新电影门票一张。

  还没到光棍节就已经看到一些电商在做促销预热,这时美容院也不妨选择一下团购来增加人气。通过团购不仅可以带动消费者的需求,同时还能适当增加店内的营业额。值得注意的是,美容院在拟定团购促销内容时,一定要结合当季的促销商品,促销项目来做,要知道投其所好,是赢得顾客源的一大重要原因。

  很多单身的朋友觉得在光棍节那天去美容院做护理会很无趣的,因为到处可以看到一群群成双结对的热恋男女,为此,美容院特别在光棍节那天推出上门服务,这个优惠是向老会员客户的,名额一天只有五个哦,所以大家可以先电话预约的哦。

  如何让自己脱离光棍节呢,快来加入我们美容院“光棍节联谊活动”的吧,不仅让自己结识新朋友,同时还可以变漂亮哦,赶快行动吧!

  2022年双十一活动方案2

  在活动前夕,我们要积极参加聚划算、微抢购等活动以增加我们的品牌曝光率,提高品牌知名度,从而在活动中的销售做铺垫。

  预热:时间是11月1日至11月10日线上通过店铺自主设计预热活动页面,包括首页海报,店招,宝贝详情页,全部图片以为主题元素,旨在营造购物狂欢氛围,为活动打下基础、储备流量。设计好易拉宝、横幅、主题海报,购买一些气球和丝带布置好整个办公室,让大家充分感受气氛。

大家好,今天给大家带来p s 二零二零的安装教程。

鼠标右击压缩包,选择解压到photoshop。这些二零二零。

解压完成,打开解压出来的文件夹。

鼠标右击set up,点击以管理员身份运行。

点击这个文件夹小图标,可以修改软件安装路径,建议大家将软件安装在c 盘以外的磁盘。

在e 盘或其它磁盘内新建一个p s 二零二零的文件夹。

选择刚刚新建的文件夹,点击确定。

点击继续,然后软件就会开始自动安装了,我们等待安装完成。

然后我们打开软件看它能否正常使用。

刚刚安装好的软件,第一次打开都会比较慢,因为要加载生成很多文件,需要耐心等待一下。

软件没有问题,可以正常打开使用。我们先把软件关闭回到桌面。

软件安装成功之后,我们就可以把下载的安装包和解压出来的文件夹删除了。

今天的教程到这里结束了,我们下期再见。

我要回帖

更多关于 软件安装包后缀 的文章

 

随机推荐