package com.jiefupay;

 import java.io.IOException;
import java.util.HashMap;
import java.util.Map; 8
import org.apache.log4j.Logger; import com.jiefupay.dao.Dao; import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Consumer;
import com.rabbitmq.client.DefaultConsumer;
import com.rabbitmq.client.Envelope; public class App{ private static final Logger log = Logger.getLogger(App.class); 26
private static final String EXCHANGE_NAME = "refreshDispatcherMemoryExchange"; private static String QUEUE_NAME = "refreshDispatcherMemoryhfQueue"; public static void main(String[] args) throws Exception { ConnectionFactory factory = new ConnectionFactory();
factory.setHost("127.0.0.1");
factory.setPort(5672);
factory.setUsername("yourusername");
factory.setPassword("yourpassword"); //0.创建连接和通道
Connection connection = factory.newConnection();
Channel channel = connection.createChannel(); //1.声明一个死信交换机(扇形交换机)
channel.exchangeDeclare("refreshDispatcherDeadExchange", "fanout"); //2.创建队列的参数
Map<String, Object> queueArgs = new HashMap<String, Object>();
queueArgs.put("x-dead-letter-exchange", "refreshDispatcherDeadExchange"); //死信队列
queueArgs.put("x-message-ttl", 10000); // 消息超时:让发布的message在队列中可以存活多长时间,以毫秒为单位。
queueArgs.put("x-expires", 1000); // 队列超时:当前的queue在指定的时间内,没有消费者订阅就会被删除,以毫秒为单位。
queueArgs.put("x-max-length", 100); // 队列最大长度:当超过了这个大小的时候,会删除之前最早插入的消息为本次的留出空间。
queueArgs.put("x-queue-mode", "lazy"); //延迟加载:queue的信息尽可能的都保存在磁盘上,仅在有消费者订阅的时候才会加载到RAM中。 //3.声明队列。-将队列参数传到队列 (队列名字,是否持久化,是否排外,是否自动清理,参数)
channel.queueDeclare(QUEUE_NAME, true, false, false, queueArgs); //4.队列绑定交换机。 绑定键的意义依赖于转发器的类型,对于fanout类型,忽略此参数(第三个参数为binding key)。
channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, ""); Consumer consumer = new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties,
byte[] body) throws IOException {
// 捕获消息内容
String message = new String(body, "UTF-8"); try {
//消息处理(自己实现的方法)
messageHandler(message); //消息确认
channel.basicAck(envelope.getDeliveryTag(), false); }catch (Exception e) { //出现异常,置为true,重新入队。
channel.basicAck(envelope.getDeliveryTag(), true); //出现异常,不重新入队,而是reject入死信队列。
//channel.basicReject(envelope.getDeliveryTag(), false); }
}
};
//第二个参数值为false代表关闭RabbitMQ的自动应答机制,改为手动应答。
channel.basicConsume(QUEUE_NAME, false, consumer);
} public static void messageHandler(String message) {
switch (message) {
case "loadQDProductData": // 渠道信息 渠道产品
Dao.loadQDProductDataToSystem();
break;
case "loadQDGroupData": //渠道组
Dao.loadQDGroupDataToSystem();
break;
case "loadCustomerData": // 客户信息
Dao.loadCustomerDataToSystem();
break;
case "loadUserProductData": // 客户产品
Dao.loadUserProductDataToSystem();
break;
default:
break;
}
log.info( message + " Done" ); }
}

RabbitMQ之消费者Demo(队列参数详细说明)的更多相关文章

  1. RabbitMQ五:生产者--队列--多消费者

    一.生成者-队列-多消费者(前言) 上篇文章,我们做了一个简单的Demo,一个生产者对应一个消费者,本篇文章就介绍 生产者-队列-多个消费者,下面简单示意图 P 生产者    C 消费者  中间队列 ...

  2. (四)RabbitMQ消息队列-服务详细配置与日常监控管理

    原文:(四)RabbitMQ消息队列-服务详细配置与日常监控管理 RabbitMQ服务管理 启动服务:rabbitmq-server -detached[ /usr/local/rabbitmq/sb ...

  3. Python进阶----进程之间通信(互斥锁,队列(参数:timeout和block),), ***生产消费者模型

    Python进阶----进程之间通信(互斥锁,队列(参数:timeout和block),), ***生产消费者模型 一丶互斥锁 含义: ​ ​ ​ 每个对象都对应于一个可称为" 互斥锁&qu ...

  4. AMQP协议与RabbitMQ、MQ消息队列的应用场景

    什么是AMQP? 在异步通讯中,消息不会立刻到达接收方,而是被存放到一个容器中,当满足一定的条件之后,消息会被容器发送给接收方,这个容器即消息队列,而完成这个功能需要双方和容器以及其中的各个组件遵守统 ...

  5. RabbitMQ AMQP (高级消息队列协议)

    目录 RabbitMQ AMQP (高级消息队列协议) Message Queue 简介 概念 基本组成 场景及作用 AMQP简介 模型架构 基础组件 AMQP-RabbitMQ 简介 模型 特性 参 ...

  6. rabbitmq消息消费者

    pom <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http:// ...

  7. RabbitMq学习3-工作队列(Work queues)

    工作队列(又称:任务队列——Task Queues)是为了避免等待一些占用大量资源.时间的操作.当我们把任务(Task)当作消息发送到队列中,一个运行在后台的工作者(worker)进程就会取出任务然后 ...

  8. RabbitMQ使用 prefetch_count优化队列的消费,使用死信队列和延迟队列实现消息的定时重试,golang版本

    RabbitMQ 的优化 channel prefetch Count 死信队列 什么是死信队列 使用场景 代码实现 延迟队列 什么是延迟队列 使用场景 实现延迟队列的方式 Queue TTL Mes ...

  9. RabbitMQ如何实现延迟队列?(转)

    什么是延迟队列 延迟队列存储的对象肯定是对应的延迟消息,所谓"延迟消息"是指当消息被发送以后,并不想让消费者立即拿到消息,而是等待指定时间后,消费者才拿到这个消息进行消费. 场景一 ...

随机推荐

  1. 【架构篇】OCP和依赖注入

    描述 本篇文章主要讲解 : (1)OO设计OCP原则: (2)依赖注入引入 (3)依赖注入分析 (4)依赖注入种类 1   内容区 1.1   IOC背景 (1)Ralph E. Johnson &a ...

  2. 重要:关于PPT转图片需要注意的问题

    关于PPT转图片的问题需要注意的问题   我们有一个项目做过直接上传ppt的功能,但是网页不可能显示ppt,所以只能把ppt转成pdf或者图片来显示,我们的做法是转成了图片,然后使用swiper做成类 ...

  3. StringUtils工具类常用方法汇总2(截取、去除空白、包含、查询索引)

      在上一篇中总结了StringUtils工具类在判断字符串为空,大小写转换,移除字符或字符序列,替换,反转,切割合并等方面的方法,这次再汇总一下其它常用的方法. 一.截取   StringUtils ...

  4. 两天快速开发一个自己的微信小程序

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Songti SC" } p.p2 { margin: 0.0px 0. ...

  5. jquery无new构建学习笔记

    当我们想要创建一个对象,我们可能使用new方法去构建一个对象,那按道理jquery也是一个对象,应该也是用new jquery()来构建呀为什么我们创建jquery对象不用new jquery()而是 ...

  6. Codeforces 482B Interesting Array

    题意:构造一个长度为n的序列,使其满足m个形式如下如下约束:a[l]&a[l+1]&a[l+2]&....&a[r]=q 从Dalao的博客上看到这题,决定去水水.做法 ...

  7. 【机器学习】RNN学习

    感谢中国人民大学的胡鹤老师,课程容量巨大,收获颇丰. 之前提到的CNN模型主要用到人类的视觉中枢,但其有一劣势,无论是人类的视觉神经还是听觉神经,所接受到的都是一个连续的序列,使用CNN相当于割裂了前 ...

  8. 小白的Python之路 day1 用户输入

    1 2 3 4 5 6 7 8 #!/usr/bin/env python #_*_coding:utf-8_*_   username =input("username:") p ...

  9. Linux 网络编程中的read和write函数正确的使用方式

    字节流套接字上的read和write函数所表现的行为不同于通常的文件IO,字节流套接字上调用read和write输入或输出的可能比请求的数量少,然而这不是出错的状态,例如某个中端使read和write ...

  10. 如何在BIOS里设置定时关机?

    如何在BIOS里设置定时关机? 通过CMOS设置实现定时开机的设置过程如下: 首先进入"CMOS SETUP"程序(大多数主板是在计算机启动时按DEL键进入): 然后将光条移到&q ...