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. github建仓库注意

    在导入新的项目工程时,github建仓库时不要选择readme文件初始化仓库

  2. Docker(十)-Docker创建DockerFile文件

    制作Docker image 有两种方式: 使用 Docker container,直接构建容器,再导出成 image 使用. 是使用 Dockerfile,将所有动作写在文件中,再 build 成 ...

  3. RANCHER2.0 的简单使用

    1. RANCHER2.0  能够管理 k8s 集群 也能够用来搭建 k8s 集群 但是因为网络问题 只测试了如何去管理集群 还没有去 测试 安装集群. 2. 创建rancher 服务的方法 dock ...

  4. C# Stopwatch获取循环中某操作的时间消耗

    在C#中通常使用DateTime来表示当前时间,可以在一个操作的前后分别使用一个DateTime对象获取当前时间,再将两个DateTime对象相减获得时间差(TimeSpan对象),从而得到这个操作耗 ...

  5. DevOps简介

    DevOps 是一个完整的面向IT运维的工作流,以 IT 自动化以及持续集成(CI).持续部署(CD)为基础,来优化程式开发.测试.系统运维等所有环节. DevOps的概念 DevOps一词的来自于D ...

  6. MyBatis关联查询,一对一关联查询

    数据库E-R关系 实体类 public class City { Long id; String name; Long countryId; Date lastUpdate; } public cla ...

  7. .net mvc ajax 上传文件

    1.前端 <div> <input type="file" id="upfile" /> <button type="b ...

  8. MySQL5.7安装(RPM)笔记

    1. 检查MySQL是否安装,如果有安装,则移除(rpm –e 名称)[root@localhost ~]# rpm -qa | grep -i mysqlmysql-libs-xxxxxxxxxx. ...

  9. 【刷题】BZOJ 3724 PA2014Final Krolestwo

    Description 你有一个无向连通图,边的总数为偶数. 设图中有k个奇点(度数为奇数的点),你需要把它们配成k/2个点对(显然k被2整除).对于每个点对(u,v),你需要用一条长度为偶数(假设每 ...

  10. 一台机子同时启动两个相同版本的tomcat

    其实我的机子之前是可以同时启动两个tomcat的,但是是两个不同版本的tomcat,一个是6.0,一个是7.0,我的环境变量都没有设置,所以我对解压过的tomcat唯一改动的就是在catalina.b ...