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消息消费者的更多相关文章

  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. Ant 执行 exec cmd.exe 时路径包含空格的问题

    需求描述 通过Ant脚本调用bat脚本 问题描述 bat脚本所在目录名称包含空格(space),cmd.exe调用时候报错The system cannot find the path specifi ...

  2. day63-webservice 03.解析cxf提供的例子

    Path配置: C:\Program Files (x86)\ScanSign;E:\app\zhongzh\product\11.2.0\dbhome_1\bin;D:\app\zhongzh\pr ...

  3. 【bzoj1018】[SHOI2008]堵塞的交通traffic

    1018: [SHOI2008]堵塞的交通traffic Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 2887  Solved: 954[Submit ...

  4. mysql 基本操作 alter

    查看数据库 show  databases; 新建数据库 命令 create database 库名字. 选择数据库 use  2016test; 创建表:create table 表名(字段1,2, ...

  5. jQuery基础教程-第8章-002Adding jQuery object methods

    一.Object method context 1.We have seen that adding global functions requires extending the jQuery ob ...

  6. javascript DES加密

    研究联通wifi登陆中,发现了一个名为"encryption.js"的文件.这个文件一看即知是加密过的,首先自己尝试去手工解密,看到太烦琐了,忽然想到网上有js解密工具,遂决定用来 ...

  7. Bean管理注解的例子

  8. Classification and Prediction

    # coding: utf-8 # In[128]: get_ipython().magic(u'matplotlib inline') import pandas as pd from pandas ...

  9. 第十三课 Actionlib(2)

    上节课讲到了客户端,这节课讲解一下服务器 1.创建服务器源文件touch fibonacciserver.cpp 2.编写源文件 3.修改CMakeLists.txt 4.编译之catkin_make ...

  10. js-修改url中某个指定的参数的值

    /* * url 目标url * arg 需要替换的参数名称 * arg_val 替换后的参数的值 * return url 参数替换后的url */ function changeURLArg(ur ...