pom

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <parent>
  6. <artifactId>springcloudparent</artifactId>
  7. <groupId>com.cxy</groupId>
  8. <version>0.0.-SNAPSHOT</version>
  9. </parent>
  10. <modelVersion>4.0.</modelVersion>
  11.  
  12. <artifactId>rabbitMqConsumer</artifactId>
  13. <dependencies>
  14. <dependency>
  15. <groupId>com.rabbitmq</groupId>
  16. <artifactId>amqp-client</artifactId>
  17. <version>5.4.</version>
  18. </dependency>
  19. </dependencies>
  20.  
  21. </project>

消费者代码:

  1. package com.cxy.consumer;
  2.  
  3. import com.rabbitmq.client.*;
  4.  
  5. import java.io.IOException;
  6. import java.util.concurrent.TimeoutException;
  7.  
  8. /***
  9. * @ClassName: Consumer1
  10. * @Description:
  11. * @Auther: cxy
  12. * @Date: 2019/3/24:11:37
  13. * @version : V1.0
  14. */
  15. public class Consumer1 {
  16. private static final String Queue="helloworld";
  17.  
  18. public static void main(String[] args) {
  19. ConnectionFactory connectionFactory= new ConnectionFactory();
  20. //设置连接地址
  21. connectionFactory.setHost("192.168.230.134");
  22. //设置端口
  23. connectionFactory.setPort();
  24. //设置密码用户名
  25. connectionFactory.setUsername("guest");
  26. connectionFactory.setPassword("guest");
  27. //设置虚拟机,每个虚拟机相当于一个小的mq
  28. connectionFactory.setVirtualHost("/");
  29. Connection connection =null;
  30. try {
  31. //建立连接
  32. connection = connectionFactory.newConnection();
  33. //建立通道,生产着和消费者都是在通道中完成
  34. Channel channel = connection.createChannel();
  35. /*
  36. queueDeclare(String queue, boolean durable, boolean exclusive, boolean autoDelete,
  37. Map<String, Object> arguments)
  38. 参数1,声明队列
  39. 参数2 是否持久化
  40. 参数3 是否排他,是否独战连接,队列只允许该链接中访问,如果连接关闭,队列也就删除了
  41. 参数4:是否自动删除,如果将此参数设置true,那么就变成零时队列
  42. 参数5 :扩展参数,例如存活时间
  43. */
  44. channel.queueDeclare(Queue,true,false,false,null);
  45. /*
  46. String basicConsume(String queue, boolean autoAck, Consumer callback)
  47. 参数一:队列名称
  48. 参数二:自动回复
  49. 参数三 消费者方法
  50. */
  51. DefaultConsumer defaultConsumer=new DefaultConsumer(channel) {
  52. //当接受到消息时候,此方法被调用
  53. /**
  54. * @Author cxy
  55. * @Description //TODO
  56. * @Date 2019/3/24
  57. * @Param [consumerTag, envelope, properties, body]
  58. * @return void
  59. *
  60. * consumerTag 用来标识.可以再监听队列时候设置
  61. * envelope 信封,通过envelope可以通过这个获取到很多东西
  62. * properties 额外的消息属性
  63. * body:消息体
  64. **/
  65. @Override
  66. public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
  67. //获取交换机
  68. String exchange = envelope.getExchange();
  69. //消息id,用来表示那个消息消费了
  70. long deliveryTag = envelope.getDeliveryTag();
  71. String message=new String(body,"utf-8");
  72. System.out.println("receive");
  73. }
  74. };
  75. channel.basicConsume(Queue,true ,defaultConsumer);
  76. } catch (IOException e) {
  77. e.printStackTrace();
  78. } catch (TimeoutException e) {
  79. e.printStackTrace();
  80. }
  81.  
  82. }
  83. }

由于注释内容都写得很详细就没有单独写文字了.运行之后可以发掘管控台中消息没有了,

在正式开发中不会使用这种原生得代码去使用,会采用springboot去整合相关内容,至于以上代码为什么还要去监听队列,防止如果队列不存在,程序会存在异常,所以这样,在正式开发中

会采用手动会签得方式,如果,没有会签,就会进行消息重试.保证消息不会丢失

rabbitmq消息消费者的更多相关文章

  1. RabbitMQ消息队列之二:消费者和生产者

    在使用RabbitMQ之前,需要了解RabbitMQ的工作原理. RabbitMQ的工作原理 RabbitMQ是消息代理.从本质上说,它接受来自生产者的信息,并将它们传递给消费者.在两者之间,它可以根 ...

  2. rabbitmq消息队列,消息发送失败,消息持久化,消费者处理失败相关

    转:https://blog.csdn.net/u014373554/article/details/92686063 项目是使用springboot项目开发的,前是代码实现,后面有分析发送消息失败. ...

  3. Net分布式系统之四:RabbitMQ消息队列应用

    消息通信组件Net分布式系统的核心中间件之一,应用与系统高并发,各个组件之间解耦的依赖的场景.本框架采用消息队列中间件主要应用于两方面:一是解决部分高并发的业务处理:二是通过消息队列传输系统日志.目前 ...

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

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

  5. RabbitMQ消息队列应用

    RabbitMQ消息队列应用 消息通信组件Net分布式系统的核心中间件之一,应用与系统高并发,各个组件之间解耦的依赖的场景.本框架采用消息队列中间件主要应用于两方面:一是解决部分高并发的业务处理:二是 ...

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

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

  7. 使用EasyNetQ组件操作RabbitMQ消息队列服务

    RabbitMQ是一个由erlang开发的AMQP(Advanved Message Queue)的开源实现,是实现消息队列应用的一个中间件,消息队列中间件是分布式系统中重要的组件,主要解决应用耦合, ...

  8. 译MassTransit 创建消息消费者

    创建消息消费者一个消息消费者是一个 可以消费一个或多个消息类型的类,指定IConsumer<T>接口,T为消息类型 public class UpdateCustomerConsumer ...

  9. RabbitMQ 消息队列 入门 第一章

    RabbitMQ : 官网:https://www.rabbitmq.com/ GitHub:https://github.com/rabbitmq?q=rabbitmq 第一步安装: 点击  htt ...

随机推荐

  1. HTML中 .clearfix:after的使用

    将一个<div>标签随着内容的增加而增加

  2. python子进程模块subprocess详解与应用实例 之三

    二.应用实例解析 2.1 subprocess模块的使用 1. subprocess.call >>> subprocess.call(["ls", " ...

  3. 微信内置浏览器中的cookie很诡异呀

    微信内置浏览器中的cookie很诡异呀 这是设置和删除COOKIE的代码 function set_cookie($var ,$value = '' ,$expire = 0){ $path = '/ ...

  4. Hibernate和Mybatis区别 详细 有用

    1.开发上手难度 hibernate的真正掌握(封装的功能和特性非常多)要比Mybatis来得难. 在真正产品级应用上要用Hibernate,不仅对开发人员的要求高,hibernate往往还不适合(多 ...

  5. Linux中IO监控命令的使用分析

    一篇不错的有关linux io监控命令的介绍和使用. 1.系统级IO监控 iostat iostat -xdm 1    # 个人习惯 %util         代表磁盘繁忙程度.100% 表示磁盘 ...

  6. 2.Hive的几种常见的数据导入方式

    好久没写Hive的那些事了,今天开始写点吧.今天的话题是总结Hive的几种常见的数据导入方式,我总结为四种:(1).从本地文件系统中导入数据到Hive表:(2).从HDFS上导入数据到Hive表:(3 ...

  7. Hyper-V和vmware在虚拟机中安装xen总结

    1. Hyper-V 在hyper-v中安装了ubuntu13.04,运行很好,使用起来的效果感觉比vmware要舒服.安装变异xen的内核也没有问题,可以正常的安装,update-grub之后也可以 ...

  8. C# File类常用方法

    File 类 提供用于创建.复制.删除.移动和打开文件的静态方法,并协助创建 FileStream 对象. 1. File.Exists ——  确定指定的文件是否存在. public static ...

  9. ComicEnhancerPro 系列教程十七:二值化图像去毛刺

    作者:马健邮箱:stronghorse_mj@hotmail.com 主页:http://www.comicer.com/stronghorse/ 发布:2017.07.23 教程十七:二值化图像去毛 ...

  10. layui之弹出层--从父窗口传递数据到子窗口

    原文链接:https://blog.csdn.net/Code_shadow/article/details/80524633 var Index = layer.open({ title: &quo ...