Vue记录

vue2、vue3记录

vue2记录

经典vue2结构 index.vue:

<template>
    <div>...</div>
</template>

<script>
    import method from "xxx.js"
    import component from "xxx.vue"
    export default {
      name: "ComponentName",
      props: {
        rowId: {
          type: Number
        }
      },
      components: {
        component1, component2 ..
      },
      data() {
        return {
          table: [],
          ...
        }
      },
      created() {
        ...
      },
      mounted() {
        ...
      },
      methods: {
        method1() {
        
        }
        ...
      }
    }
</script>

<style scoped>
  .style1 {
    width: 90px
  }
  ...
</style>

实例如:

<template>
  <div class="app-container">
    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px"
    >
      <el-form-item label="录入时间" prop="createTime">
        <el-date-picker v-model="dateRangeCreateTime" style="width: 250px" value-format="yyyy-MM-dd" type="daterange"
                        range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"/>
      </el-form-item>
      <el-form-item label="网点" prop="networkId">
        <el-select
          multiple
          v-model="queryParams.networkId"
          placeholder="请选择网点"
          clearable size="small">
          <el-option
            v-for="dict in netWorkOptions"
            :key="dict.dictValue"
            :label="dict.dictLabel"
            :value="dict.dictValue"
          />
        </el-select>
      </el-form-item>
      <el-form-item label="单证编号" prop="dzNo">
        <el-input type="textarea"
                  v-model="queryParams.dzNo"
                  placeholder="请输入单证编号"
                  clearable
                  size="small"
        />
      </el-form-item>
      <el-form-item>
        <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
      </el-form-item>
    </el-form>

    <el-row :gutter="10" class="mb8">
      <el-col :span="1.5">
        <el-button
          type="primary"
          icon="el-icon-plus"
          size="mini"
          @click="handleAdd"
          v-hasPermi="['cusservice:dzmanage:add']"
        >新增
        </el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button
          type="danger"
          icon="el-icon-delete"
          size="mini"
          :disabled="multiple"
          @click="handleDelete"
          v-hasPermi="['cusservice:dzmanage:remove']"
        >删除
        </el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button
          type="info"
          icon="el-icon-download"
          size="mini"
          @click="handleImport"
          v-hasPermi="['cusservice:dzmanage:export']"
        >导入
        </el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button
          type="warning"
          icon="el-icon-upload"
          size="mini"
          @click="handleExport"
          v-hasPermi="['cusservice:dzmanage:export']"
        >导出
        </el-button>
      </el-col>
      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
    </el-row>

    <el-table
      border
      v-loading="loading"
      :data="manageList"
      @selection-change="handleSelectionChange">
      <el-table-column type="selection" width="55" align="center"/>
      <el-table-column label="录入时间" align="center" prop="createTime" width="160" fixed="left"/>
      <el-table-column label="网点" align="center" prop="networkName" fixed="left"/>
      <el-table-column label="单证编号" align="center" prop="dzNo" min-width="130px" fixed="left">
        <template slot-scope="{ row }">
          <copyView>
            <el-link type="primary" @click="handleDetail(row)">{{ row.dzNo }}</el-link>
          </copyView>
        </template>
      </el-table-column>
      <el-table-column label="单证类型" align="center" prop="dzType" :formatter="dzTypeFormat"/>
      <el-table-column label="快递公司" align="center" prop="expressCompany" :formatter="expressCompanyFormat"/>
      <el-table-column label="票数" align="center" prop="piaoNum"/>
      <el-table-column label="明细导入" align="center" prop="detailFileList">
        <template slot-scope="{ row }">
          <el-popover
            placement="right"
            width="400"
            trigger="click">
            <el-table :data="checkDetailShow(row) ? row.detailFiles : []">
              <el-table-column property="fileOriFileName" label="文件名">
                <template slot-scope="scope">
                  <el-link @click="downloadOss(scope.row.fileName)">
                    {{ scope.row.fileOriFileName }}
                  </el-link>
                </template>
              </el-table-column>
            </el-table>
            <el-link slot="reference" v-show="checkDetailShow(row)" type="primary"
                     @click="showDetail(row.detailFiles)">
              明细文件{{' (' + (checkDetailShow(row) ? row.detailFiles.length : 0) + ')'}}
            </el-link>
          </el-popover>
        </template>
      </el-table-column>
      <el-table-column label="录入人" align="center" prop="createBy"/>
      <el-table-column label="备注" align="center" prop="descr" :show-overflow-tooltip="true"/>
      <el-table-column label="状态" align="center" prop="dzStatus">
        <template slot-scope="scope">
          <el-tag v-if="scope.row.dzStatus == 'zc'">暂存</el-tag>
          <el-tag type="success" v-else>归档</el-tag>
        </template>
      </el-table-column>
      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right" width="160"
                       v-if="checkPermi(['*:*:*','cusservice:dzmanage:edit','cusservice:dzmanage:remove'])">
        <template slot-scope="scope">
          <el-button
            size="mini"
            type="text"
            icon="el-icon-edit"
            @click="handleUpdate(scope.row)"
            v-hasPermi="['cusservice:dzmanage:edit']"
          >修改
          </el-button>
          <el-button
            type="text"
            icon="el-icon-delete"
            size="mini"
            @click="handleDelete(scope.row)"
            v-hasPermi="['cusservice:dzmanage:remove']"
          >删除
          </el-button>
        </template>
      </el-table-column>
    </el-table>

    <pagination
      v-show="total>0"
      :total="total"
      :page.sync="queryParams.pageNum"
      :limit.sync="queryParams.pageSize"
      @pagination="getList"
    />

    <!-- 用户导入对话框 -->
    <el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
      <el-upload ref="upload" :limit="1" accept=".xlsx, .xls" :headers="upload.headers"
                 :action="upload.url" :disabled="upload.isUploading"
                 :on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag>
        <i class="el-icon-upload"></i>
        <div class="el-upload__text">
          将文件拖到此处,或
          <em>点击上传</em>
        </div>
        <div class="el-upload__tip" slot="tip">
          <el-link type="info" style="font-size: 12px" @click="downTemple">下载模板</el-link>
        </div>
        <div class="el-upload__tip" style="color: red" slot="tip">
          提示:仅允许导入“xls”或“xlsx”格式文件!
        </div>
      </el-upload>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="submitFileForm">确 定</el-button>
        <el-button @click="upload.open = false">取 消</el-button>
      </div>
    </el-dialog>

    <el-dialog title="新增单证" :visible.sync="openAddForm" v-if="openAddForm" width="800px" :before-close="cancelAdd">
      <addDz @cancelAdd="cancelAdd" @completeAdd="completeAdd"></addDz>
    </el-dialog>

    <el-dialog title="修改单证" :visible.sync="openEditForm" v-if="openEditForm" width="800px" :before-close="cancelEdit">
      <editDz @cancelEdit="cancelEdit" :rowId="rowId"></editDz>
    </el-dialog>
  </div>
</template>

<script>
  import {
    listManage,
    getManage,
    delManage,
    addManage,
    updateManage,
    downTemple,
    importTemplate,
    exportManage
  } from "@/api/cusservice/dzmanage";
  import {listNetworkOptions2} from "@/api/cusservice/network";
  import {checkPermi} from '@/utils/permission'
  import {getToken} from "@/utils/auth";
  import {downloadOss} from "@/utils/ruoyi";
  import addDz from "./add"
  import editDz from "./edit"


  export default {
    name: "Manage",
    components: {
      addDz, editDz
    },
    data() {
      return {
        // 遮罩层
        loading: true,
        // 选中数组
        ids: [],
        // 非单个禁用
        single: true,
        // 非多个禁用
        multiple: true,
        // 显示搜索条件
        showSearch: true,
        // 总条数
        total: 0,
        // 单证管理表格数据
        manageList: [],
        // 弹出层标题
        title: "",
        // 是否显示弹出层
        open: false,
        // 查询参数
        queryParams: {
          pageNum: 1,
          pageSize: 10,
          networkId: [],
          dzNo: null,
          yundanNo: null,
          dzType: [],
          expressCompany: [],
          userId: null,
          descr: null,
          dzStatus: null,
        },
        //创建日期
        dateRangeCreateTime: [],
        //网点字典
        netWorkOptions: [],
        //单证类型字典
        dzTypeOptions: [],
        // 快递公司字典
        expressCompanyOptions: [],
        // 单证中台字典
        dzStatusOptions: [],

        //选中的行
        multipleTable: [],
        upload: {
          // 是否显示弹出层(用户导入)
          open: false,
          // 弹出层标题(用户导入)
          title: "单证导入",
          // 是否禁用上传
          isUploading: false,
          // 是否更新已经存在的用户数据
          updateSupport: 0,
          // 设置上传的请求头部
          headers: {Authorization: "Bearer " + getToken()},
          // 上传的地址
          url: process.env.VUE_APP_BASE_API + "/cusservice/dzmanage/ImportData",
        },
        openAddForm: false,
        openEditForm: false,
        rowId: null,

      };
    },
    created() {
      this.initPage();
    },
    methods: {
      checkPermi,
      initPage() {
        listNetworkOptions2().then((response) => {
          let temlist = [];
          response.rows.map((value, index, arry) => {
            temlist.push({
              dictValue: value.rowid + "",
              dictLabel: value.networkName,
            });
          });
          this.netWorkOptions = temlist;
        });
        this.getDicts("biz_dz_type").then((response) => {
          this.dzTypeOptions = response.data;
        });
        this.getDicts("bc_express_company").then((response) => {
          this.expressCompanyOptions = response.data;
        });
        this.getDicts("biz_dz_status").then((response) => {
          this.dzStatusOptions = response.data;
        });
        this.getList()
      },
      /** 查询单证管理列表 */
      getList() {
        this.loading = true;
        let query = {...this.queryParams}
        query.networkId = query.networkId ? query.networkId.join(',') : ''
        query.dzType = query.dzType ? query.dzType.join(',') : ''
        query.expressCompany = query.expressCompany ? query.expressCompany.join(',') : ''
        listManage(query).then(response => {
          this.manageList = response.rows;
          this.total = response.total;
          this.loading = false;
        });
      },
      // 取消按钮
      cancel() {
        this.open = false;
        this.reset();
      },
      // 表单重置
      reset() {
        this.dateRangeCreateTime = []
        this.queryParams = {
          pageNum: 1,
          pageSize: 10
        };
        this.resetForm("form");
      },
      /** 搜索按钮操作 */
      handleQuery() {
        this.queryParams.pageNum = 1;
        this.getList();
      },
      /** 重置按钮操作 */
      resetQuery() {
        this.reset();
        this.handleQuery();
      },
      // 多选框选中数据
      handleSelectionChange(selection) {
        this.ids = selection.map(item => item.id)
        this.single = selection.length !== 1
        this.multiple = !selection.length
        this.multipleTable = selection
      },
      /** 新增按钮操作 */
      handleAdd() {
        // this.reset();
        // this.$router.push({
        //   path: "/dzmanage/add",
        // });
        this.openAddForm = true;
      },
      cancelAdd() {
        // this.reset();
        // this.$router.push({
        //   path: "/dzmanage/add",
        // });
        this.openAddForm = false;
        // this.getList()
      },
      completeAdd() {
        this.openAddForm = false;
        this.getList();
      },
      cancelEdit() {
        this.openEditForm = false;
        this.rowId = null
        // this.getList()
      },
      /** 修改按钮操作 */
      handleUpdate(row) {
        // this.$router.push("/dzmanage/edit/" + row.id + "?t=" + Date.now());
        this.rowId = row.id;
        this.openEditForm = true;
      },
      guidang() {
        const ids = this.ids
        let ask = this.multipleTable && this.multipleTable.length == 1 ? ('单证编号为:' + this.multipleTable[0].dzNo)
          : (this.ids.length + '条')
        let ths = this;
        this.$confirm('是否确认归档所选的 ' + ask + ' 的数据项?', "警告", {
          confirmButtonText: "确定",
          cancelButtonText: "取消",
          type: "warning"
        }).then(function () {
          updateManage({id: ids[0], dzStatus: 'gd'}).then(() => {
            ths.getList();
            ths.msgSuccess("归档成功");
          })
        }).catch((e) => {
          console.log(e)
        })
      },
      /** 删除按钮操作 */
      handleDelete(row) {
        const ids = row.id || this.ids;
        let ask = row && row.dzNo ? ('单证编号:' + row.dzNo) : (this.ids.length + '条')
        this.$confirm('是否确认删除所选的 ' + ask + ' 数据项?', "警告", {
          confirmButtonText: "确定",
          cancelButtonText: "取消",
          type: "warning"
        }).then(() => {
          this.loading = true
          return delManage(ids)
        }).then(() => {
          this.msgSuccess("删除成功");
          this.getList();
        }).catch(() => {
          this.loading = false
        })
      },
      handleImport() {
        this.upload.open = true;
      },
      /** 下载模板 */
      downTemple() {
        downTemple().then((response) => {
          console.log(response)
          this.download(response.msg);
        });
      },
      /** 导入模板 */
      importTemplate() {
        importTemplate().then((response) => {
          console.log(response)
        });
      },
      // 文件上传中处理
      handleFileUploadProgress(event, file, fileList) {
        this.upload.isUploading = true;
      },
      // 文件上传成功处理
      handleFileSuccess(response, file, fileList) {
        this.upload.open = false;
        this.upload.isUploading = false;
        this.$refs.upload.clearFiles();
        this.$alert(response.msg, "导入结果", {
          dangerouslyUseHTMLString: true
        });
        this.getList();
      },
      // 提交上传文件
      submitFileForm() {
        this.$refs.upload.submit();
      },
      /** 导出按钮操作 */
      handleExport() {
        const queryParams = this.queryParams;
        this.$confirm('是否确认导出所有单证管理数据项?', "警告", {
          confirmButtonText: "确定",
          cancelButtonText: "取消",
          type: "warning"
        }).then(function () {
          return exportManage(queryParams);
        }).then(response => {
          this.download(response.msg);
        }).catch(() => {
        })
      },
      dzTypeFormat(row, column) {
        return this.selectDictLabel(this.dzTypeOptions, row[column.property]);
      },
      expressCompanyFormat(row, column) {
        return this.selectDictLabel(this.expressCompanyOptions, row[column.property]);
      },
      handleDetail(row) {
        console.log(row)
        this.$router.push("/dzmanage/detail/" + row.id + "?t=" + Date.now());
      },
      checkDetailShow(row) {
        return (row.detailFiles && row.detailFiles.length > 0);
      },
      showDetail(fileList) {
        console.log(fileList)
      },
      downloadOss(fileName) {
        console.log(fileName)
        this.$message.info("正在下载,下载期间请勿重复操作...")
        downloadOss(fileName);
      },
    }
  };
</script>

<style scoped>
	.app-container {
	  padding: 10px
	}

</style>

vue2的组件通讯方式有:

vue3记录

1、父组件向子组件传递参数(通过符号:),子组件通过defineProps接收:

//1、父组件中引入子组件并通过":"向子组件传值:
<Child info="我是父组件,给你钱" :money="money"></Child>

//2、子组件中使用"defineProps"接收:
<template>
  <div class="son">
       <h1>我是子组件:曹植</h1>
       <p>{{props.info}}</p>
       <p>{{props.money}}</p>
      <!--props可以省略前面的名字--->
       <p>{{info}}</p>
       <p>{{money}}</p>
       <button @click="updateProps">修改props数据</button>
  </div>
</template>

<script setup>
//需要使用到defineProps方法去接受父组件传递过来的数据
//defineProps是Vue3提供方法,不需要引入直接使用
let props = defineProps(['info','money']); //数组|对象写法都可以
//按钮点击的回调
const updateProps = ()=>{
  props.money+=10;  //props:只读的
  console.log(props)
}
</script>

2、

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/337321.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue3.0性能提升主要是通过哪几方面体现的?

文章目录 一、编译阶段diff算法优化静态提升事件监听缓存SSR优化 二、源码体积三、响应式系统参考文献 一、编译阶段 回顾Vue2&#xff0c;我们知道每个组件实例都对应一个 watcher 实例&#xff0c;它会在组件渲染的过程中把用到的数据property记录为依赖&#xff0c;当依赖发…

Cloudreve存储策略-通过从机存储来拓展容量

Sham的云服务器是搬瓦工最低低低配的&#xff0c;1H 0.5G不说&#xff0c;硬盘容量也只有10g&#xff0c;说实话&#xff0c;装了宝塔面板和服务器套件后&#xff0c;基本满了&#xff0c;这时又想在云服务器上打个网盘用于下载、存储&#xff0c;这时就需要拓展硬盘&#xff0…

Redis 面试题 | 01.精选Redis高频面试题

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

HCIA——22DNS:DNS层次域名空间、域名服务器、域名解析的原理

学习目标&#xff1a; 计算机网络 1.掌握计算机网络的基本概念、基本原理和基本方法。 2.掌握计算机网络的体系结构和典型网络协议&#xff0c;了解典型网络设备的组成和特点&#xff0c;理解典型网络设备的工作原理。 3.能够运用计算机网络的基本概念、基本原理和基本方法进行…

基于springboot+vue的母婴商城系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目背景…

第二课:BERT

文章目录 第二课&#xff1a;BERT1、学习总结&#xff1a;为什么要学习BERT&#xff1f;预训练模型的发展历程BERT结构BERT 输入BERT EmbeddingBERT 模型构建BERT self-attention 层BERT self-attention 输出层BERT feed-forward 层BERT 最后的Add&NormBERT EncoderBERT 输…

c++ mysql数据库编程(linux系统)

ubuntu下mysql数据库的安装 ubuntu安装mysql&#xff08;图文详解&#xff09;-CSDN博客https://blog.csdn.net/qq_58158950/article/details/135667062?spm1001.2014.3001.5501 项目目录结构 数据库及表结构 public.h //打印错误信息 #ifndef PUBLIC_h #define PUBLIC_H…

Centos使用Docker搭建自己的Gitlab(社区版和设置汉化、修改密码、设置SSH秘钥)

根据我的经验 部署Gitlab&#xff08;社区版&#xff09; 至少需要2核4g的服务器 带宽3~4M 1. 在自己电脑上安装终端&#xff1a;宝塔ssl终端 或者 FinalShell&#xff0c;根据喜好安装即可 http://www.hostbuf.com/t/988.html http://www.hostbuf.com/downloads/finalshell_w…

macOS磁盘管理工具Paragon Hard Disk Manager,轻松且安全的改变磁盘分区

Paragon Hard Disk Manager mac版是Macos上一款磁盘管理工具&#xff0c;可以帮助你轻松而且安全的随意改变磁盘分区的大小和各种分区参数&#xff0c;作为mac磁盘分区工具也是游刃有余&#xff0c;同时在找回数据的时候也非常容易&#xff0c;并且不会损坏原来的数据&#xff…

项目解决方案:多地医馆的高清视频监控接入汇聚联网

目 录 一、背景 二、建设目标及需求 1.建设目标 2.现状分析 3.需求分析 三、方案设计 1.设计依据 2.设计原则 3.方案设计 3.1 方案描述 3.2 组网说明 四、产品介绍 1.视频监控综合资源管理平台介绍 2.视频录像服务器和存储 2.1概述 2.2存储设计 …

【工具】使用ssh进行socket5代理

文章目录 shellssh命令详解正向代理&#xff1a;反向代理&#xff1a;本地 socks5 代理 shell ssh -D 3333 root192.168.0.11 #输入密码 #3333端口已经使用远程机进行转发设置Windows全局代理转发 socks127.0.0.1 3333如果远程机为公网ip&#xff0c;可通过搜索引擎查询出网…

软件资源管理下载系统全新带勋章功能 + Uniapp前端

测试环境&#xff1a;php7.1。ng1.2&#xff0c;MySQL 5.6 常见问题&#xff1a; 配置好登录后转圈圈&#xff0c;检查环境及伪静态以及后台创建好应用 上传图片不了&#xff0c;检查php拓展fileinfo 以及public文件权限 App个人主页随机背景图&#xff0c;在前端uitl文件…

【数学笔记】集合及简要逻辑

集合 基础简要逻辑集合间的关系与运算 基础 集合定义&#xff1a;把一些能够确定的不同对象组成的整体叫做一个集合&#xff0c;每个对象叫做元素。集合记法&#xff1a;一般用大写字母 A , B , C . . . . . . A,B,C...... A,B,C......表示集合&#xff0c;小写字母 a , b ,…

GD32E230C8T6《调试篇》之 (软件) IIC通信(主机接收从机) + GN1650驱动芯片 + 按键 + 4位8段数码管显示 (成功)

GD32E230C8T6《调试篇》之 &#xff08;软件&#xff09; IIC通信 GN1650驱动芯片 4位8段数码管显示&#xff08;成功&#xff09; IIC是什么IIC简介1&#xff09;IIC总线物理连接2&#xff09;IIC时序协议 按键扫描代码1&#xff09;DIG2短按只一次&#xff0c;长按超过1s 一…

[晓理紫]每日论文分享(有中文摘要,源码或项目地址)--大模型、扩散模型、视觉导航

专属领域论文订阅 VX 扫嘛关注{晓理紫}&#xff0c;每日更新论文&#xff0c;如感兴趣&#xff0c;请转发给有需要的同学&#xff0c;谢谢支持 分类: 大语言模型LLM视觉模型VLM扩散模型视觉导航具身智能&#xff0c;机器人强化学习开放词汇&#xff0c;检测分割 [晓理紫]每日论…

六、数组(1)一维数组

所谓数组&#xff0c;就是一个集合&#xff0c;里面存放了相同类型的数据元素 特点1&#xff1a;数组中每个数据元素都是相同的数据类型 特点2&#xff1a;数组是由连续的内存位置组成的 一、一维数组的定义方式 1、数据类型 数组名[数组长度]; 2、数据类型 数组名[数组长度…

谷歌浏览器通过network模拟HTTP中的GET/POST请求获取response

1、F12打开network选中需要模拟的方法Copy->Copy as fetch 2、通过AI帮你进行转换一下调用格式 原代码 fetch("https://mp.amap.com/api/forward/aggregate?mtop.alsc.kbt.intergration.toolkit.call.queryCallBlockInfo", {"headers": {"acce…

Latex绘图

排查Latex报错 “Command \csubfigure already defined” 这个可以通过添加如下命令&#xff1a; \usepackage{subfig} \usepackage{subfloat} ..... \begin{figure*}[h] \centering \subfloat[subfloat title]{ \label{fig:subfig:a} \includegraphics[scale0.7]{Figs/.....…

python-基础篇-函数

文章目录 函数基础目标01. 函数的快速体验1.1 快速体验 02. 函数基本使用2.1 函数的定义2.2 函数调用2.3 第一个函数演练思考 2.4 PyCharm 的调试工具2.5 函数的文档注释 03. 函数的参数3.1 函数参数的使用3.2 参数的作用3.3 形参和实参 04. 函数的返回值05. 函数的嵌套调用函数…

Spring RabbitMQ那些事(3-消息可靠传输和订阅)

目录 一、序言二、生产者确保消息发送成功1、为什么需要Publisher Confirms2、哪些消息会被确认处理成功 三、消费者保证消息被处理四、Spring RabbitMQ支持代码示例1、 application.yml2、RabbigtMQ配置3、可靠生产者配置4、可靠消费者配置5、测试用例 一、序言 在有些业务场…