1. package com.toov5.amqp;
  2.  
  3. import java.io.IOException;
  4. import java.util.concurrent.TimeoutException;
  5.  
  6. import com.rabbitmq.client.Channel;
  7. import com.rabbitmq.client.Connection;
  8. import com.toov5.utils.MQConnectionUtils;
  9.  
  10. public class Producer {
  11. // 队列名称
  12. private static final String UEUE_NAME = "test_queue";
  13.  
  14. public static void main(String[] args) throws IOException, TimeoutException {
  15. // 创建新的连接
  16. Connection connection = MQConnectionUtils.newConnection();
  17. // 创建Channel
  18. Channel channel = connection.createChannel();
  19. // 创建队列
  20. channel.queueDeclare(UEUE_NAME, false, false, false, null);
  21. channel.basicQos(1); // 保证 取一个消费
  22. try {
  23. channel.txSelect(); //开启事务
  24. // 创建message
  25. String msg = "toov5_message";
  26. System.out.println("生产者投递消息" + msg );
  27. // 生产者发送消息
  28. channel.basicPublish("", UEUE_NAME, null, msg.getBytes());
  29. int i = 1/0;
  30. channel.txCommit(); //提交事务
  31. } catch (Exception e) {
  32. System.out.println("生产者消息事务已经回滚");
  33. channel.txRollback(); //回滚事务
  34. }finally {
  35. // 关闭通道和连接
  36. channel.close();
  37. connection.close();
  38.  
  39. }
  40.  
  41. }
  42.  
  43. }

consumer:

  1. package com.toov5.amqp;
  2.  
  3. import java.io.IOException;
  4. import java.util.concurrent.TimeoutException;
  5.  
  6. import com.rabbitmq.client.AMQP.BasicProperties;
  7. import com.rabbitmq.client.Channel;
  8. import com.rabbitmq.client.Connection;
  9. import com.rabbitmq.client.DefaultConsumer;
  10. import com.rabbitmq.client.Envelope;
  11. import com.toov5.utils.MQConnectionUtils;
  12.  
  13. public class Consumer1 {
  14.  
  15. //队列名称
  16. private static final String QUEUE_NAME = "test_queue";
  17.  
  18. public static void main(String[] args) throws IOException, TimeoutException {
  19. System.out.println("消费者启动..........1");
  20. //创建新的连接
  21. Connection connection = MQConnectionUtils.newConnection();
  22. //创建Channel
  23. final Channel channel = connection.createChannel();
  24. // 消费者关联队列
  25. channel.queueDeclare(QUEUE_NAME, false, false, false, null);
  26. channel.basicQos(1);
  27. DefaultConsumer defaultConsumerr = new DefaultConsumer(channel) {
  28. //监听获取消息
  29. @Override
  30. public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties,
  31. byte[] body) throws IOException {
  32. String msg =new String(body,"UTF-8");
  33. System.out.println("消费者获取生产者消息:"+msg);
  34. try {
  35. //模拟应答等待时间
  36. Thread.sleep(1000);
  37. } catch (Exception e) {
  38.  
  39. }finally {
  40. channel.basicAck(envelope.getDeliveryTag(), false); //手动应答 告诉消息队列服务器 消费成功
  41. }
  42. }
  43. };
  44. //牵手模式设置 默认自动应答模式 true:自动应答模式
  45. channel.basicConsume(QUEUE_NAME, false, defaultConsumerr);// fanse手动应答
  46.  
  47. }
  48. }

结果:

上面可以做个AOP~~

可以参考下 Confirm模式

RabbitMQ事务确认机制(生产者)的更多相关文章

  1. RabbitMQ消息确认机制

    文章目录 1. 事务机制2. Confirm模式2.1 生产者2.1.1 普通Confirm模式2.1.2 批量Confirm模式2.1.3 异步Confirm模式2.2 消费者3. 其他 消费者如何 ...

  2. RabbitMQ 消息确认机制

    消息确认机制 在之前异常处理部分就已经写了,对于consumer的异常退出导致消息丢失,可以时候consumer的消息确认机制.重复的就不说了,这里说一些不一样的. consumer的消息确认机制 当 ...

  3. RabbitMQ 消息确认机制以及lazy queue+ disk消息持久化

    一:Basic的一些属性,一些方法 1. 消费端的确认 自动确认: message出队列的时候就自动确认[broke] basicget... 手工确认: message出队列之后,要应用程序自己去确 ...

  4. SpringBoot(九)RabbitMQ安装及配置和使用,消息确认机制

    Windows下RabbitMQ安装及配置地址: https://blog.csdn.net/zhm3023/article/details/82217222RabbitMQ(四)订阅模式:https ...

  5. springboot + rabbitmq 用了消息确认机制,感觉掉坑里了

    本文收录在个人博客:www.chengxy-nds.top,技术资源共享,一起进步 最近部门号召大伙多组织一些技术分享会,说是要活跃公司的技术氛围,但早就看穿一切的我知道,这 T M 就是为了刷KPI ...

  6. RabbitMQ消息确认(发送确认,接收确认)

    前面几篇记录了收发消息的demo,今天记录下关于 消息确认方面的 问题. 下面是几个问题: 1.为什么要进行消息确认? 2.rabbitmq消息确认 机制是什么样的? 3.发送方如何确认消息发送成功? ...

  7. RabbitMQ(四): rabbitmq 的消息确认机制(事务+confirm)

    在 rabbitmq 中我们可以通过持久化数据解决 rabbitmq 服务器异常的数据丢失问题. 问题:生产者将消息发送出去之后,消息到底有没有到达 rabbitmq 服务器.默认情况下是不知道的. ...

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

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

  9. (转)RabbitMQ消息队列(九):Publisher的消息确认机制

    在前面的文章中提到了queue和consumer之间的消息确认机制:通过设置ack.那么Publisher能不到知道他post的Message有没有到达queue,甚至更近一步,是否被某个Consum ...

随机推荐

  1. Machine Learning——Unsupervised Learning(机器学习之非监督学习)

    前面,我们提到了监督学习,在机器学习中,与之对应的是非监督学习.无监督学习的问题是,在未加标签的数据中,试图找到隐藏的结构.因为提供给学习者的实例是未标记的,因此没有错误或报酬信号来评估潜在的解决方案 ...

  2. cat 命令

    cat命令的用途是连接文件或标准输入并打印.这个命令常用来显示文件内容,或者将几个文件连接起来显示,或者从标准输入读取内容并显示,它常与重定向符号配合使用. 1.命令格式: cat [选项] [文件] ...

  3. PHP性能:序——谈性能

    PHP性能:序——谈性能 这里不谈PHP的性能和其他语言的性能,这里讨论PHP自身的性能问题. 性能是什么? 通俗的来讲,性能,就是在固定的环境下能做的事情的多少. 为什么要性能? 1.每一个软件或网 ...

  4. sublime使用技巧(3)-- 常用快捷键【持续更新】

    ♥ Ctrl + Shift + v 这样粘贴可以保持原格式,不会有缩进上的困扰 Ctrl + k 用Ctrl + d选中重复单词时跳过当前选中 Ctrl + Enter 在光标所在行的下一行新建一行 ...

  5. Live555 中的客户端openRTSP 保存H264文件

    http://amitapba.blog.163.com/blog/static/20361020720140189239762/ http://amitapba.blog.163.com/blog/ ...

  6. Java图形界面实战案例——实现打字母游戏

    实现打字母的游戏 这次这个案例能够说是头几次所讲的内容的一个技术汇总,主要是 运用了几大块的知识.我们先来定义一下案例的背景:在一个300*400的窗口上.有10个随机产生的字母下落,在键盘上敲击字母 ...

  7. spring 事务传播行为类型

    事务传播行为种类 Spring在TransactionDefinition接口中规定了7种类型的事务传播行为, 它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播: 事务传播行为类型 说明 P ...

  8. Mybatis中的关联映射和查询

    一.商品订单数据模型 1.数据表 这里定义了四个表,分别表示用户,商品,订单,和订单详情. 用户表user CREATE TABLE `user` ( `id` int(11) NOT NULL AU ...

  9. 记录-在jsp页面获取后台值在页面显示过长处理

    在下面的红色标记处 后台获取的值(字符串)在页面显示过长或者与其他重叠 (xxx).cutStr(15) 15代表的是展示字符串的长度 data.rows[i].avgPrice, ), data.r ...

  10. Pipeline模式(netty源码死磕6)

    精进篇:netty源码死磕6  巧夺天工--Pipeline模式揭秘 1. 巧夺天工--Pipeline模式揭秘 1.1. Pipeline模式简介 管道的发名者叫,Malcolm Douglas M ...