博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MQ确认机制之事务机制------tx
阅读量:6002 次
发布时间:2019-06-20

本文共 2061 字,大约阅读时间需要 6 分钟。

一:介绍

1.介绍

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

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

  有两种解决方式。

    AMQP实现事务机制

    Confirm机制。

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

 

2.事务机制

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

  txCommit:用于提交事务

  txRollback:回滚事务

 

3.缺点

  很耗时,降低吞吐量。

 

二:程序

1.生产者

1 package com.mq.TxCommit; 2  3 import com.mq.utils.ConnectionUtil; 4 import com.rabbitmq.client.*; 5  6 import java.io.IOException; 7 import java.util.Map; 8 import java.util.concurrent.TimeoutException; 9 10 public class Send {11     private static final String QUEUE_NAME="test_queue_tx";12     public static void main(String[] args)throws Exception{13         Connection connection= ConnectionUtil.getConnection();14         Channel channel=connection.createChannel();15         channel.queueDeclare(QUEUE_NAME,false,false,false,null);16         String msg="tx msg";17         try {18             channel.txSelect();19             channel.basicPublish("",QUEUE_NAME,null,msg.getBytes());20             System.out.println("msg:"+msg);21             //营造一个可以回退的语句22             int a=1/0;23             channel.txCommit();24         }catch (Exception e){25             channel.txRollback();26         }27     }28 }

 

2.消费者

1 package com.mq.TxCommit; 2  3 import com.mq.utils.ConnectionUtil; 4 import com.rabbitmq.client.*; 5  6 import java.io.IOException; 7  8 public class Receive { 9     private static final String QUEUE_NAME="test_queue_tx";10     public static void main(String[] args)throws Exception {11         Connection connection = ConnectionUtil.getConnection();12         Channel channel = connection.createChannel();13         channel.queueDeclare(QUEUE_NAME, false, false, false, null);14         channel.basicConsume(QUEUE_NAME,true,new DefaultConsumer(channel){15             @Override16             public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {17                 System.out.println(new String(body,"utf-8"));18             }19         });20     }21 }

 

3.现象

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

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

    

转载地址:http://prbmx.baihongyu.com/

你可能感兴趣的文章
三维数组
查看>>
mysql类的封装
查看>>
php 正则匹配出a标签级a标签中的内容
查看>>
iOS ReactiveCocoa 最全常用API整理
查看>>
0621补-MVC的基础整理
查看>>
一种简单的处理大流量访问的方法
查看>>
CSS常见样式
查看>>
swift UICollectionView使用
查看>>
[Uva10559]Blocks(区间DP)
查看>>
openSUSE 13.2 RPM及包管理相关命令记录
查看>>
syslog-ng:retint_careful导致机器hang
查看>>
手撕面试题ThreadLocal!!!
查看>>
【BZOJ】1778: [Usaco2010 Hol]Dotp 驱逐猪猡
查看>>
【BZOJ】3572: [Hnoi2014]世界树 虚树+倍增
查看>>
Cent OS安装使用ffmpeg(完整版)
查看>>
Activity常用方法
查看>>
Ansible 入门指南 - 学习总结
查看>>
2014 蓝桥杯 预赛 c/c++ 本科B组 第九题:地宫取宝(12') [ dp ]
查看>>
第六课 以太坊客户端Geth命令用法-参数详解
查看>>
leetcode-762-Prime Number of Set Bits in Binary Representation
查看>>