rabbitmq消息消费者
pom
- <?xml version="1.0" encoding="UTF-8"?>
- <project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <parent>
- <artifactId>springcloudparent</artifactId>
- <groupId>com.cxy</groupId>
- <version>0.0.-SNAPSHOT</version>
- </parent>
- <modelVersion>4.0.</modelVersion>
- <artifactId>rabbitMqConsumer</artifactId>
- <dependencies>
- <dependency>
- <groupId>com.rabbitmq</groupId>
- <artifactId>amqp-client</artifactId>
- <version>5.4.</version>
- </dependency>
- </dependencies>
- </project>
消费者代码:
- package com.cxy.consumer;
- import com.rabbitmq.client.*;
- import java.io.IOException;
- import java.util.concurrent.TimeoutException;
- /***
- * @ClassName: Consumer1
- * @Description:
- * @Auther: cxy
- * @Date: 2019/3/24:11:37
- * @version : V1.0
- */
- public class Consumer1 {
- private static final String Queue="helloworld";
- public static void main(String[] args) {
- ConnectionFactory connectionFactory= new ConnectionFactory();
- //设置连接地址
- connectionFactory.setHost("192.168.230.134");
- //设置端口
- connectionFactory.setPort();
- //设置密码用户名
- connectionFactory.setUsername("guest");
- connectionFactory.setPassword("guest");
- //设置虚拟机,每个虚拟机相当于一个小的mq
- connectionFactory.setVirtualHost("/");
- Connection connection =null;
- try {
- //建立连接
- connection = connectionFactory.newConnection();
- //建立通道,生产着和消费者都是在通道中完成
- Channel channel = connection.createChannel();
- /*
- queueDeclare(String queue, boolean durable, boolean exclusive, boolean autoDelete,
- Map<String, Object> arguments)
- 参数1,声明队列
- 参数2 是否持久化
- 参数3 是否排他,是否独战连接,队列只允许该链接中访问,如果连接关闭,队列也就删除了
- 参数4:是否自动删除,如果将此参数设置true,那么就变成零时队列
- 参数5 :扩展参数,例如存活时间
- */
- channel.queueDeclare(Queue,true,false,false,null);
- /*
- String basicConsume(String queue, boolean autoAck, Consumer callback)
- 参数一:队列名称
- 参数二:自动回复
- 参数三 消费者方法
- */
- DefaultConsumer defaultConsumer=new DefaultConsumer(channel) {
- //当接受到消息时候,此方法被调用
- /**
- * @Author cxy
- * @Description //TODO
- * @Date 2019/3/24
- * @Param [consumerTag, envelope, properties, body]
- * @return void
- *
- * consumerTag 用来标识.可以再监听队列时候设置
- * envelope 信封,通过envelope可以通过这个获取到很多东西
- * properties 额外的消息属性
- * body:消息体
- **/
- @Override
- public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
- //获取交换机
- String exchange = envelope.getExchange();
- //消息id,用来表示那个消息消费了
- long deliveryTag = envelope.getDeliveryTag();
- String message=new String(body,"utf-8");
- System.out.println("receive");
- }
- };
- channel.basicConsume(Queue,true ,defaultConsumer);
- } catch (IOException e) {
- e.printStackTrace();
- } catch (TimeoutException e) {
- e.printStackTrace();
- }
- }
- }
由于注释内容都写得很详细就没有单独写文字了.运行之后可以发掘管控台中消息没有了,
在正式开发中不会使用这种原生得代码去使用,会采用springboot去整合相关内容,至于以上代码为什么还要去监听队列,防止如果队列不存在,程序会存在异常,所以这样,在正式开发中
会采用手动会签得方式,如果,没有会签,就会进行消息重试.保证消息不会丢失
rabbitmq消息消费者的更多相关文章
- RabbitMQ消息队列之二:消费者和生产者
在使用RabbitMQ之前,需要了解RabbitMQ的工作原理. RabbitMQ的工作原理 RabbitMQ是消息代理.从本质上说,它接受来自生产者的信息,并将它们传递给消费者.在两者之间,它可以根 ...
- rabbitmq消息队列,消息发送失败,消息持久化,消费者处理失败相关
转:https://blog.csdn.net/u014373554/article/details/92686063 项目是使用springboot项目开发的,前是代码实现,后面有分析发送消息失败. ...
- Net分布式系统之四:RabbitMQ消息队列应用
消息通信组件Net分布式系统的核心中间件之一,应用与系统高并发,各个组件之间解耦的依赖的场景.本框架采用消息队列中间件主要应用于两方面:一是解决部分高并发的业务处理:二是通过消息队列传输系统日志.目前 ...
- (转)RabbitMQ消息队列(九):Publisher的消息确认机制
在前面的文章中提到了queue和consumer之间的消息确认机制:通过设置ack.那么Publisher能不到知道他post的Message有没有到达queue,甚至更近一步,是否被某个Consum ...
- RabbitMQ消息队列应用
RabbitMQ消息队列应用 消息通信组件Net分布式系统的核心中间件之一,应用与系统高并发,各个组件之间解耦的依赖的场景.本框架采用消息队列中间件主要应用于两方面:一是解决部分高并发的业务处理:二是 ...
- RabbitMQ消息队列(九):Publisher的消息确认机制
在前面的文章中提到了queue和consumer之间的消息确认机制:通过设置ack.那么Publisher能不到知道他post的Message有没有到达queue,甚至更近一步,是否被某个Consum ...
- 使用EasyNetQ组件操作RabbitMQ消息队列服务
RabbitMQ是一个由erlang开发的AMQP(Advanved Message Queue)的开源实现,是实现消息队列应用的一个中间件,消息队列中间件是分布式系统中重要的组件,主要解决应用耦合, ...
- 译MassTransit 创建消息消费者
创建消息消费者一个消息消费者是一个 可以消费一个或多个消息类型的类,指定IConsumer<T>接口,T为消息类型 public class UpdateCustomerConsumer ...
- RabbitMQ 消息队列 入门 第一章
RabbitMQ : 官网:https://www.rabbitmq.com/ GitHub:https://github.com/rabbitmq?q=rabbitmq 第一步安装: 点击 htt ...
随机推荐
- HTML中 .clearfix:after的使用
将一个<div>标签随着内容的增加而增加
- python子进程模块subprocess详解与应用实例 之三
二.应用实例解析 2.1 subprocess模块的使用 1. subprocess.call >>> subprocess.call(["ls", " ...
- 微信内置浏览器中的cookie很诡异呀
微信内置浏览器中的cookie很诡异呀 这是设置和删除COOKIE的代码 function set_cookie($var ,$value = '' ,$expire = 0){ $path = '/ ...
- Hibernate和Mybatis区别 详细 有用
1.开发上手难度 hibernate的真正掌握(封装的功能和特性非常多)要比Mybatis来得难. 在真正产品级应用上要用Hibernate,不仅对开发人员的要求高,hibernate往往还不适合(多 ...
- Linux中IO监控命令的使用分析
一篇不错的有关linux io监控命令的介绍和使用. 1.系统级IO监控 iostat iostat -xdm 1 # 个人习惯 %util 代表磁盘繁忙程度.100% 表示磁盘 ...
- 2.Hive的几种常见的数据导入方式
好久没写Hive的那些事了,今天开始写点吧.今天的话题是总结Hive的几种常见的数据导入方式,我总结为四种:(1).从本地文件系统中导入数据到Hive表:(2).从HDFS上导入数据到Hive表:(3 ...
- Hyper-V和vmware在虚拟机中安装xen总结
1. Hyper-V 在hyper-v中安装了ubuntu13.04,运行很好,使用起来的效果感觉比vmware要舒服.安装变异xen的内核也没有问题,可以正常的安装,update-grub之后也可以 ...
- C# File类常用方法
File 类 提供用于创建.复制.删除.移动和打开文件的静态方法,并协助创建 FileStream 对象. 1. File.Exists —— 确定指定的文件是否存在. public static ...
- ComicEnhancerPro 系列教程十七:二值化图像去毛刺
作者:马健邮箱:stronghorse_mj@hotmail.com 主页:http://www.comicer.com/stronghorse/ 发布:2017.07.23 教程十七:二值化图像去毛 ...
- layui之弹出层--从父窗口传递数据到子窗口
原文链接:https://blog.csdn.net/Code_shadow/article/details/80524633 var Index = layer.open({ title: &quo ...