Rabbit的事务
加入事务的方法:
txSelect() txCommit() txRollback()
生产者:
package com.kf.queueDemo.transactions; import java.io.IOException;
import java.util.concurrent.TimeoutException; import com.kf.utils.RabbitConnectionUtils;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection; /**
* 简单队列 (事务) txSelect() txCommit() txRollback()
* @author kf
*
*/
public class TransactionsQueueProducer { //队列名称
private static String QUEUENAME = "TRANSACTIONSQUEUE"; public static void main(String[] args) throws IOException, TimeoutException{
Connection connection = RabbitConnectionUtils.getConnection(); //创建通道
Channel channel = connection.createChannel(); //通道里放入队列
/**
* 第一个参数是 队列名称
* 第二个参数指 要不要持久化
*/
channel.queueDeclare(QUEUENAME, false, false, false, null); /* //消息体
String mes = "demo_message汉字"; //发送消息
*//**
* 参数为 exchange, routingKey, props, body
* exchange 交换机
* routingKey 路由键
*
* body 消息体
*//*
channel.basicPublish("", QUEUENAME, null, mes.getBytes());*/ /**
* 集群环境下,多个消费者情况下。消费者默认采用均摊
*/
try {
//开启事务
channel.txSelect();
String mes = "demo_message汉字";
System.out.println("发送消息"+mes);
channel.basicPublish("", QUEUENAME, null, mes.getBytes());
//提交事务
channel.txCommit();
int i = 1/0;
} catch (Exception e) {
e.printStackTrace();
//事务回滚
channel.txRollback();
System.out.println("生产者发生错误,事务已回滚");
}finally {
channel.close();
connection.close();
} } }
消费者:
package com.kf.queueDemo.transactions; import java.io.IOException;
import java.util.concurrent.TimeoutException; import com.kf.utils.RabbitConnectionUtils;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.DefaultConsumer;
import com.rabbitmq.client.Envelope;
import com.rabbitmq.client.AMQP.BasicProperties; /**
* 简单队列消费者 事务
* @author kf
*
*/
public class TransactionsConsumer {
//队列名称
private static String QUEUENAME = "TRANSACTIONSQUEUE"; public static void main(String[] args) throws IOException, TimeoutException{
System.out.println("开始接收消息");
Connection connection = RabbitConnectionUtils.getConnection(); //创建通道
final Channel channel = connection.createChannel(); //通道里放入队列
/**
* 第一个参数是 队列名称
* 第二个参数指 要不要持久化
*/
channel.queueDeclare(QUEUENAME, false, false, false, null); DefaultConsumer consumer = new DefaultConsumer(channel){
//监听队列
@Override
public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties,
byte[] body) throws IOException {
System.out.println("------------进入监听---------");
String s = new String(body, "utf-8");
System.out.println("获取到的消息是:"+s);
//手动应答。
/**
* 当 channel.basicConsume(QUEUENAME, true, consumer);第二个参数为false时 是手动应答模式
*/
// channel.basicAck(envelope.getDeliveryTag(), false);
}
}; //设置应答模式
/**
* 参数: 对列名,是否自动签收,监听的类
*/
System.out.println("获取消息的方法之前");
channel.basicConsume(QUEUENAME, true, consumer);
System.out.println("获取消息的方法之后"); } }
Rabbit的事务的更多相关文章
- 在 Windows 上安装Rabbit MQ 指南
rabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统.他遵循Mozilla Public License开源协议.采用 Erlang 实现的工业级的消息队列(MQ)服务器. Ra ...
- amqp事务
摘要: 介绍confirm的工作机制.使用spring-amqp介绍事务以及发布确认的使用方式.因为事务以及发布确认是针对channel来讲,所以在一个连接中两个channel,一个channel可以 ...
- (转)在 Windows 上安装Rabbit MQ 指南
rabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统.他遵循Mozilla Public License开源协议.采用 Erlang 实现的工业级的消息队列(MQ)服务器. Ra ...
- spring+hibernate管理多个数据源(非分布式事务)
本文通过一个demo,介绍如何使用spring+hibernate管理多个数据源,注意,本文的事务管理并非之前博文介绍的分布式事务. 这个demo将使用两个事务管理器分别管理两个数据源.对于每一个独立 ...
- spring+mybatis管理多个数据源(非分布式事务)
本文通过一个demo,介绍如何使用spring+mybatis管理多个数据源,注意,本文的事务管理并非之前博文介绍的分布式事务. 这个demo将使用两个事务管理器分别管理两个数据源.对于每一个独立的事 ...
- 使用spring+hibernate+atomikos+tomcat构建分布式事务
本文通过一个demo,介绍如何使用spring+hibernate+atomikos+tomcat构建在一个事务中涉及两个数据源的web应用. demo功能:实现一个能成功提交和回滚的涉及两个数据库数 ...
- 使用spring+mybatis+atomikos+tomcat构建分布式事务
本文通过一个demo,介绍如何使用spring+mybatis+atomikos+tomcat构建在一个事务中涉及两个数据源的web应用. demo功能:实现一个能成功提交和回滚的涉及两个数据库数据源 ...
- 分布式事务,EventBus 解决方案:CAP【中文文档】
前言 很多同学想对CAP的机制以及用法等想有一个详细的了解,所以花了将近两周时间写了这份中文的CAP文档,对 CAP 还不知道的同学可以先看一下这篇文章. 本文档为 CAP 文献(Wiki),本文献同 ...
- Rabbit MQ
前言: MQ 是什么?队列是什么,MQ 我们可以理解为消息队列,队列我们可以理解为管道.以管道的方式做消息传递. 场景: 1.其实我们在双11的时候,当我们凌晨大量的秒杀和抢购商品,然后去结算的时候, ...
随机推荐
- Hbase的安装与测试
实验环境 虚拟机伪分布式 Ubuntu 17.10 JDK 1.8 Hadoop 2.7.6 Hbase 1.3.3 ①安装和配置HBase. 首先从官网http://archive.apache.o ...
- 比较旧的写法:验证车牌、手机号、电话、qq等
1.验证车牌代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- C++11 template parameter deduction
C++11 引入了右值引用的概念,由此在引出 an rvalue reference to a cv-unqualified template parameter. 在template functio ...
- leetcode-806-Number of Lines To Write String
题目描述: We are to write the letters of a given string S, from left to right into lines. Each line has ...
- ubuntu->桌面版-常用设置
1.目前使用unity桌面 ,使用Gnome,未来将会采用 Qt/QML 语言写的桌面 2.汉化 系统: 在 设置(setting)->语言支持(language support)->选择 ...
- Doc/Docx/PDF to Html
TODO 判断源文件是否有格式??
- Flutter Navigator operation requested with a context that does not include a Navigat
如下直接在 MaterialApp 中使用 Navigator 是会报 Navigator operation requested with a context that does not inclu ...
- 论文阅读 | FPN:Feature Pyramid Networks for Object Detection
论文地址:https://arxiv.org/pdf/1612.03144v2.pdf 代码地址:https://github.com/unsky/FPN 概述 FPN是FAIR发表在CVPR 201 ...
- EXTJS文档地址
文档地址:http://docs.sencha.com/extjs/4.2.3/#!/api/Ext.form.field.Field-event-change
- python小游戏开发关于pygame库的安装
---恢复内容开始--- 测试环境:运行环境 Window 10 64bit上运行 前提条件 python3.7(当前时间最新版本20181021)安装(记住安装路径如C:\application\p ...