一:介绍

1.介绍

  在前面的说的模式中会出现一个问题。

  就是生产者将消息发送出去到底有没有到达rabbitMq,默认情况下是不知道。

  有两种解决方式。

    AMQP实现事务机制

    Confirm机制。

  这里先说明第一种实现方式。

2.事务机制

  txSelect:用于将当前的channel设置成transation模式。

  txCommit:用于提交事务

  txRollback:回滚事务

3.缺点

  很耗时,降低吞吐量。

二:程序

1.生产者

 package com.mq.TxCommit;

 import com.mq.utils.ConnectionUtil;
import com.rabbitmq.client.*; import java.io.IOException;
import java.util.Map;
import java.util.concurrent.TimeoutException; public class Send {
private static final String QUEUE_NAME="test_queue_tx";
public static void main(String[] args)throws Exception{
Connection connection= ConnectionUtil.getConnection();
Channel channel=connection.createChannel();
channel.queueDeclare(QUEUE_NAME,false,false,false,null);
String msg="tx msg";
try {
channel.txSelect();
channel.basicPublish("",QUEUE_NAME,null,msg.getBytes());
System.out.println("msg:"+msg);
//营造一个可以回退的语句
int a=1/0;
channel.txCommit();
}catch (Exception e){
channel.txRollback();
}
}
}

2.消费者

 package com.mq.TxCommit;

 import com.mq.utils.ConnectionUtil;
import com.rabbitmq.client.*; import java.io.IOException; public class Receive {
private static final String QUEUE_NAME="test_queue_tx";
public static void main(String[] args)throws Exception {
Connection connection = ConnectionUtil.getConnection();
Channel channel = connection.createChannel();
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
channel.basicConsume(QUEUE_NAME,true,new DefaultConsumer(channel){
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
System.out.println(new String(body,"utf-8"));
}
});
}
}

3.现象

  就不粘图了,用文字说明一番。

  如果没有粘贴可以造成异常的语句,就可以收到消息;如果有,就收不到消息。

    

MQ确认机制之事务机制------tx的更多相关文章

  1. MQ确认机制之事务机制----confirm串行

    一:介绍 1.说明原理 A:生产者将信道设置成confirm模式,一旦信道进到confirm模式,所有该信道上发布的消息都会被指派一个唯一的ID(从1开始). 一旦消息被投递到所有匹配的队列后,bro ...

  2. JMS 基本可靠性机制 和 事务机制

    4.3.1 基本可靠性机制4.3.1.1 控制消息的签收(Acknowledgment) 客户端成功接收一条消息的标志是这条消息被签收.成功接收一条消息一般包括如 下三个阶段:1.客户端接收消息:2. ...

  3. Kafka设计解析(八)- Exactly Once语义与事务机制原理

    原创文章,首发自作者个人博客,转载请务必将下面这段话置于文章开头处. 本文转发自技术世界,原文链接 http://www.jasongj.com/kafka/transaction/ 写在前面的话 本 ...

  4. Kafka设计解析(八)Exactly Once语义与事务机制原理

    转载自 技术世界,原文链接 Kafka设计解析(八)- Exactly Once语义与事务机制原理 本文介绍了Kafka实现事务性的几个阶段——正好一次语义与原子操作.之后详细分析了Kafka事务机制 ...

  5. RabbitMQ---9、消息确认机制(事务+Confirm)

    转载至:https://blog.csdn.net/u013256816/article/details/55515234 参考资料:https://www.cnblogs.com/520playbo ...

  6. RabbitMQ 之消息确认机制(事务+Confirm)

    概述 在 Rabbitmq 中我们可以通过持久化来解决因为服务器异常而导致丢失的问题,除此之外我们还会遇到一个问题:生产者将消息发送出去之后,消息到底有没有正确到达 Rabbit 服务器呢?如果不错得 ...

  7. 学习RabbitMQ(三):AMQP事务机制

    本文转自:http://m.blog.csdn.net/article/details?id=54315940 在使用RabbitMQ的时候,我们可以通过消息持久化操作来解决因为服务器的异常奔溃导致的 ...

  8. 62、Spark Streaming:容错机制以及事务语义

    一. 容错机制 1.背景 要理解Spark Streaming提供的容错机制,先回忆一下Spark RDD的基础容错语义: 1.RDD,Ressilient Distributed Dataset,是 ...

  9. Spring @Transactional 事务机制

    几个概念要清楚:事务的传播机制,事务的边界 工作原理 运行配置@Transactional注解的测试类的时候,具体会发生如下步骤 1)事务开始时,通过AOP机制,生成一个代理connection对象, ...

随机推荐

  1. 自动提取文件系统---binwalk(一)

    Binwalk是路由器固件分析的必备工具,该工具最大的优点就是可以自动完成指定文件的扫描,智能发掘潜藏在文件中所有可疑的文件类型及文件系统. 1.Binwalk和libmagic Binwalk的扫描 ...

  2. Oracle——存储过程的使用

    为什么使用存储过程? 存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度. 存储过程的定义: 存储过程(Sto ...

  3. C++:error 1189(转)

    在VS 2013中编译程序时出现错误: 错误提示1: error C1189: #error : Building MFC application with /MD[d] (CRT dll versi ...

  4. C# ffmpeg工具将视频转为SWF格式

    1.下载ffmpeg工具 using System; using System.Collections; using System.Configuration; using System.Data; ...

  5. try 、catch 、finally 、throw 测试js错误

    try语句允许我们定义在执行时进行错误测试的代码块. catch 语句允许我们定义当 try 代码块发生错误时,所执行的代码块. finally 语句在 try 和 catch 之后无论有无异常都会执 ...

  6. box-cox 转换

    box-cox 由于线性回归是基于正态分布的前提假设,所以对其进行统计分析时,需经过数据的转换,使得数据符合正态分布. Box 和 Cox在1964年提出的Box-Cox变换可使线性回归模型满足线性性 ...

  7. nodejs 使用http模块保存源码

    var xpath=require("xpath"); var fs=require("fs"); var dom = require('xmldom').DO ...

  8. mysql系列八、mysql数据库优化、慢查询优化、执行计划分析

    mysql的性能优化无法一蹴而就,必须一步一步慢慢来,从各个方面进行优化,最终性能就会有大的提升. 一.介绍 对mysql优化是一个综合性的技术,主要包括 表的设计合理化(符合3NF) 添加适当索引( ...

  9. Python3学习笔记15-迭代器与生成器

    生成器 如果创建一个有很多元素的列表,但是只需要访问前几个元素,后面的元素占着的空间就白白浪费了 在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间. 在Pytho ...

  10. python脚本发送邮件

    #!/usr/bin/python #_*_ coding:utf-8 _*_ from email.MIMEText import MIMEText from email.MIMEMultipart ...