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. 19-从零玩转JavaWeb-继承关系与方法覆盖

    配套视频详解 继承子类与父类的关系 继承子类与父类的关系代码演示 继承方法的覆盖 方法覆盖原则 一.继承编写过程   二.子类可以继承父类当中哪些内容 可以自行把修饰符换下, 然后查看子类能不能访问 ...

  2. Weblogic的安装、配置与应用部署

    1. Weblogic安装 1.1 Linux下安装过程 安装环境: 操作系统: redhat-release-5Server-5.4.0.3 Weblogic版本: Weblogic 9.24 1) ...

  3. Python父类调用子类

    首先说明,上面的标题其实是不正确的,Python是一门解释型.动态数据类型的高级语言,运行时,动态判断调用对象,其实还是子类自己在调用自己的方法或属性. 举个例子(copy过来的):SocketSer ...

  4. 面试题:filter过滤器 listener 监听器 案例有点用

    1.Filter工作原理(执行流程) 当客户端发出Web资源的请求时,Web服务器根据应用程序配置文件设置的过滤规则进行检查,若客户请求满足过滤规则,则对客户请求/响应进行拦截,对请求头和请求数据进行 ...

  5. BOOL运算符号(从C#入门经典第五版中摘录)

    只总结自己觉得难的哈: (1) var1=!var2;    //(非) (2) var1=var2&var3;    //(与) (3)var1=var2|var3;    //(或) (4 ...

  6. Win10 linux子系统Ubuntu下显示图形界面

    转载 https://jingyan.baidu.com/article/ed2a5d1f98577809f6be17a3.html 打开终端界面,在这个窗口测试一下ls命令,无误. # 更新 sud ...

  7. IntelliJ IDEA——利用maven插件构建web工程

  8. elasticsearch plugin

    bin/plugin -install de.spinscale/elasticsearch-plugin-suggest/0.90.5-0.9 plugin -install mobz/elasti ...

  9. 《the art of software testing》第四章 测试用例的设计

    白盒测试 逻辑覆盖测试: 逻辑覆盖是以程序内部的逻辑结构为基础的设计测试用例的技术.它属白盒测试.白盒测试的测试方法有代码检查法.静态结构分析法.静态质量度量法.逻辑覆盖法.基本路径测试法.域测试.符 ...

  10. MongoDB整理笔记のSharding分片

    这是一种将海量的数据水平扩展的数据库集群系统,数据分表存储在sharding 的各个节点上,使用者通过简单的配置就可以很方便地构建一个分布式MongoDB 集群.MongoDB 的数据分块称为 chu ...