AMQP协议:是一个金融级的消息队列,确保消息万无一失

1、消息发布端的确认

  手动确认消息是否已经发送

  场景:发布消息到RabbitMQ中,我们需要知道这个消息是否发布成功了。

  *发布确认影响性能  confirm机制对性能的影响 < tx机制对性能的影响

  1)、confirm机制

  

             channel.ConfirmSelect();
channel.BasicPublish("headersExchange", string.Empty, properties, Encoding.UTF8.GetBytes("来自.net的问候"));
var isAllPublished = channel.WaitForConfirms();

  2)、tx机制

  

             try
{
//发布消息
//String exchange, 交换机名称
//String routingKey, routingKey
//IBasicProperties basicProperties, 发布属性
//Byte[] body 消息内容
channel.TxSelect();
channel.BasicPublish("headersExchange", string.Empty, properties, Encoding.UTF8.GetBytes("来自.net的问候"));
channel.TxCommit();
}
catch (Exception)
{
channel.TxRollback();
}

2、消息消费端的确认

  自动确认:消息出队列的时候就自动确认

  手动确认:消息出队列之后,要应用程序自己去确认是否已经消费完毕,如果消费端拿到消息之后没有手动确认,这个时候消息不会被丢失。

             //直接获取消息
//String queue, 队列名称
//Boolean autoAck 是否自动确认(一般设置为true)
var result = channel.BasicGet("headersQueue", false);
//手动确认
//UInt64 deliveryTag,
//Boolean multiple 结果是否为多条数据
channel.BasicAck(result.DeliveryTag, false);

  手动拒绝:消费端拒绝队列发送过来的消息

  

             //直接获取消息
//String queue, 队列名称
//Boolean autoAck 是否自动确认(一般设置为true)
var result = channel.BasicGet("headersQueue", false);
//手动确认
//UInt64 deliveryTag,
//Boolean multiple 结果是否为多条数据
channel.BasicAck(result.DeliveryTag, false);
//手动拒绝(单个)
//UInt64 deliveryTag,
//Boolean requeue 是否重新放回队列,true==是,false==丢弃
channel.BasicReject(result.DeliveryTag, true);
//手动拒绝(单或多均可)
//UInt64 deliveryTag,
//Boolean multiple, 是否多条数据
//Boolean requeue 是否重新放回队列,true==是,false==丢弃
channel.BasicNack(result.DeliveryTag, false, true);

  重新递送【商家补发】:类似于快递丢单,商家只能重新发一次

             //直接获取消息
//String queue, 队列名称
//Boolean autoAck 是否自动确认(一般设置为true)
var result = channel.BasicGet("headersQueue", false);
//手动确认
//UInt64 deliveryTag,
//Boolean multiple 结果是否为多条数据
channel.BasicAck(result.DeliveryTag, false);
//手动拒绝(单个)
//UInt64 deliveryTag,
//Boolean requeue 是否重新放回队列,true==是,false==丢弃
channel.BasicReject(result.DeliveryTag, true);
//手动拒绝(单或多均可)
//UInt64 deliveryTag,
//Boolean multiple, 是否多条数据
//Boolean requeue 是否重新放回队列,true==是,false==丢弃
channel.BasicNack(result.DeliveryTag, false, true);
//重新递送
//Boolean requeue true==重新入队列,可能会被其他消费者所接收;false==重新给当前消费者递送
channel.BasicRecover(false);

消息中的Properties属性

  创建方式

  

             //设置消息属性
var properties = channel.CreateBasicProperties();

  1.Persistent:Bool

  是否持久化

Basic(消息)的一些属性及方法的更多相关文章

  1. Node.js process 模块常用属性和方法

    Node.js是常用的Javascript运行环境,本文和大家发分享的主要是Node.js中process 模块的常用属性和方法,希望通过本文的分享,对大家学习Node.js http://www.m ...

  2. easyUI validatebox设置值和获取值,以及属性和方法

    一:表单元素使用easyui时,textbox和validatebox设置值和获取值的方式不一样[转] 1.为text-box设置值只能使用id选择器选择表单元素,只能使用textbox(" ...

  3. SVG DOM常用属性和方法介绍

    将以Adobe SVG Viewer提供的属性和方法为准,因为不同解析器对JavaScript以及相关的属性和方法支持的程度不同,有些方法和属性是某个解析器所特有的.SVG支持DOM2标准. 12.2 ...

  4. JMS学习(三)JMS 消息结构之属性及消息体详解

    一.前言 通过上一篇的学习我们知道了消息分为三个部分,即消息头,属性及消息体,并对消息头的十个属性进行了详细的介绍,本文再对消息属性及消息体进行详细的介绍. 二.属性介绍 消息属性的主要作用是可以对头 ...

  5. VB中的属性、方法和事件概念解析

    Visual Basic 语言中的所有对象都有它们自己的属性.方法和事件,其中包括窗体和控件.可以将属性视为对象的特性,将方法视为对象的操作,而将事件视为对象的响应. 日常生活中的对象(如氦气球)也具 ...

  6. JavaSE——面向对象与面向过程、类与对象、(属性、方法、构造器)等

    一:面向对象与面向过程 二者都是一种思想,面向对象是相对于面向过程而言的. 面向过程: 1.面向过程思想强调的是过程(动作). 2.在面向过程的开发中,其实就是面向着具体的每一个步骤和过程,把每一个步 ...

  7. JS操作DOM元素属性和方法

    Dom元素基本操作方法API,先记录下,方便以后使用. W3C DOM和JavaScript很容易混淆不清.DOM是面向HTML和XML文档的API,为文档提供了结构化表示,并定义了如何通过脚本来访 ...

  8. 《JS权威指南学习总结--8.7 函数属性、方法和构造函数》

    内容要点:   在JS程序中,函数是值.对函数执行typeof运算会返回字符串 "function",但是函数是JS中特殊的对象.因为函数也是对象,它们也可以拥有属性和方法,就像普 ...

  9. Ajax01 什么是ajax、获取ajax对象、ajax对象的属性和方法

    1 什么是ajax ajax是一种用来改善用户体验的技术,其本质是利用浏览器提供的一个对象(XMLHttpRequest,也可称之为ajax对象) 向服务器发送异步请求;服务器返回部分数据(不是一个完 ...

  10. JavaScript中的window对象的属性和方法;JavaScript中如何选取文档元素

    一.window对象的属性和方法 ①setTimeout()方法用来实现一个函数在指定毫秒之后运行,该方法返回一个值,这个值可以传递给clearTimeout()用于取消这个函数的执行. ②setIn ...

随机推荐

  1. Four-Operations

    开发环境:Eclipse 结对小伙伴:201306114416 陈键 (http://www.cnblogs.com/be-the-one/) 201306114452 吴舒婷 (http://www ...

  2. Jira 添加自定义字段

    打开添加自定义字段,并选择字段类型 填写名称,并创建 3.选择关联的界面,并更新

  3. Docker HUB 的重要性

    1. 昨天晚上和今天早上 学习了下 mysql 的 主从配置(docker化部署) ,但是发现很多 -e 的参数不清楚. 然后在docker HUB 上面发现了具体的内容. 认识到 工作学习生活中 肯 ...

  4. Vue项目框架

    Vue项目框架 基本组件的使用: new Vue({ el, //要绑定的DOM element data, //要绑定的资料 props, //可用来接收父原件资料的属性 template, //要 ...

  5. 前端学PHP之会话Session

    前面的话 Session技术和Cookie相似,都是用来储存使用者的相关资料.但最大的不同之处在于Cookie是将数据存放在客户端的计算机之中,而Session则是将数据存放于服务器系统之下.Sess ...

  6. 【设计模式】—— 创建者模式Builder

    前言:[模式总览]——————————by xingoo 模式意图 一个对象的创建十分复杂,为了区分构建过程和使用过程,因此分开.使用一个Director类进行对象的创建,Builder规定了这个创建 ...

  7. 学习《Unix/Linux编程实践教程》(1):Unix 系统编程概述

    0.目录 1.概念 2.系统资源 3.学习方法 4.从用户的角度来理解 Unix 4.1 登录--运行程序--注销 4.2 目录操作 4.3 文件操作 5.从系统的角度来理解 Unix 5.1 网络桥 ...

  8. git merge以及比较两个repo

    一.需求 1)有两个相关的branch github下载的repo有master和work两个分支,由于远端已经更新,master分支落后于远端分支,work分支又有新的更新内容,需要将远端maste ...

  9. 2017-2018 ACM-ICPC, Asia Daejeon Regional Contest C(记忆化搜索)

    C题 Problem C Game Map 思路: 之前暴力搜索写了好几发,一直超时,后面看其他人的题解发现要用记忆化搜索..直接暴力搜的话有太多重 复的计算. dist u 表示以u 为起点所能走的 ...

  10. BZOJ刷题指南(转)

    基础(65) 巨水无比(4):1214.3816:2B题:1000A+B:2462:输出10个1 模拟/枚举/暴力(15):4063傻子模拟:1968小学生暴力:1218前缀和暴力:3856读英文:4 ...