rabbitmq 传递文件_RabbitMQ:计划邮件传递

rabbitmq 传递文件

本月初,我在ComoRichWeb上的RabbitMQ上做了一个演讲,与会人员提出的一个问题是“是否可以发布一条消息供以后使用?” 我回答说,就我所知,这是不可能的,但是可能会有一些技巧来实现它。 好吧,今天晚上,在试图弄清楚如何将推送与轮询模型用于定时通知时,我发现了一个使用临时队列,x-message-ttl和死信交换的巧妙技巧。

其背后的主要思想是利用2.8.0中可用的新功能, 即死信交换 。 此AMQP扩展允许您在队列中指定一个交换,当消息过期或被拒绝且requeue设置为false时,消息应发布到该队列上。

考虑到这一点,我们可以为要稍后发送的消息创建一个队列,将x-message-ttl设置为我们希望在发送之前等待的持续时间。 为了确保消息被传输到另一个队列,我们​​只需将x-dead-letter-exchange定义为我们创建的交换(在这种情况下,我将其称为即时交换),然后将队列绑定到该交换(“ right.now。队列”)。

在带有node-amqp的coffeescript中,这看起来像这样:

amqp   = require 'amqp'
conn   = amqp.createConnection()key = "send.later.#{new Date().getTime()}"
conn.on 'ready', ->'conn.queue key, {arguments:{"x-dead-letter-exchange":"immediate", "x-message-ttl": 5000}}

接下来,我定义立即交换,将队列绑定到它并订阅。

conn.exchange 'immediate'conn.queue 'right.now.queue', {autoDelete: false, durable: true}, (q) ->q.bind('immediate', 'right.now.queue')q.subscribe (msg, headers, deliveryInfo) ->console.log msgconsole.log headers

最后,在定义了我之前创建的队列之后,我们要在其上发布一条消息。 因此,为了重新访问先前的队列定义,我们添加了一个publish调用,以直接发布到队列(使用默认交换)。

conn.on 'ready', ->conn.queue key, {arguments:{"x-dead-letter-exchange":"immediate", "x-message-ttl": 5000}}, ->conn.publish key, {v:1}, {contentType:'application/json'}

运行此命令的结果是我们将等待5秒钟,然后将消息内容和标头转储到控制台。 由于该队列仅在此情况下临时使用,因此我还将队列的x-expires属性设置为在消息过期后的合理时间内过期。 这确保了我们不会在周围坐满大量未使用的队列。

这是整个练习的结果。

amqp   = require 'amqp'
events = require 'events'
em     = new events.EventEmitter()
conn   = amqp.createConnection()key = "send.later.#{new Date().getTime()}"
conn.on 'ready', ->conn.queue key, {arguments:{"x-dead-letter-exchange":"immediate", "x-message-ttl": 5000, "x-expires": 6000}}, ->conn.publish key, {v:1}, {contentType:'application/json'}conn.exchange 'immediate'conn.queue 'right.now.queue', {autoDelete: false, durable: true}, (q) ->q.bind('immediate', 'right.now.queue')q.subscribe (msg, headers, deliveryInfo) ->console.log msgconsole.log headers

您可以在github上完整地获得此练习。

这非常有趣,我计划在我的生产node.js应用程序之一中利用它进行进一步实验,该应用程序使用基于间隔的轮询来触发计划的事件。

参考: 敏捷开发人员博客的Rants and Musings中我们的JCG合作伙伴 James Carr 使用RabbitMQ进行的预定消息传递 。


翻译自: https://www.javacodegeeks.com/2012/04/rabbitmq-scheduled-message-delivery.html

rabbitmq 传递文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/357177.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《01》ECMAScript 6 简介

ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了。它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言。 目录 1.ECMAScript 和 JavaScr…

BZOJ4562: [Haoi2016]食物链

Description 如图所示为某生态系统的食物网示意图,据图回答第1小题现在给你n个物种和m条能量流动关系,求其中的食物链条数。物种的名称为从1到n编号M条能量流动关系形如a1 b1a2 b2a3 b3......am-1 bm-1am bm其中ai bi表示能量从物种ai流向物种bi,注意单独…

JLupin Next Server乍一看

JEE基础结构现在有了一个新的管理解决方案– JLupin Next Server。 它为应用程序实现提供了另一种方法。 它提供什么? 用于实现JEE应用程序的现有解决方案受到限制。 通过新的应用程序管理方式,JLupin Next Server打破了所有障碍。 JEE的足迹 良好实践…

《02》let 和 const 命令

目录 1.let命令 基本用法 暂时性死区 不允许重复声明 2.块级作用域 3.const 命令 基本用法 本质 1.let命令 基本用法 ES6 新增了let命令&#xff0c;用来声明变量。它的用法类似于var&#xff0c;但是所声明的变量&#xff0c;只在let命令所在的代码块内有效。 <…

在线支付模块小结

一、概述 在所有的电子商务网站中都提供了在线支付功能&#xff0c;用户可以将在网上选购的商品生成订单后通过网站提供的在线支付功能进行结算。网站开发者可以直接使用银行提供的接口实现在线支付&#xff0c;也可以使用第三方支付平台来实现。使用银行接口需要自行开发程序&…

《03》JavaScript编码风格

探讨如何将 ES6 的新语法&#xff0c;运用到编码实践之中&#xff0c;与传统的 JavaScript 语法结合在一起&#xff0c;写出合理的、易于阅读和维护的JavaScript 风格规范代码。 目录 1.块级作用域 &#xff08;1&#xff09;let 取代 var &#xff08;2&#xff09;全局常量…

js 闭包作用域和作用域链_Java:伪造工厂的闭包以创建域对象

js 闭包作用域和作用域链最近&#xff0c;我们想创建一个域对象&#xff0c;该对象需要具有外部依赖关系才能进行计算&#xff0c;并且希望能够在测试中解决该依赖关系。 最初&#xff0c;我们只是在领域类中引入依赖关系&#xff0c;但这使得无法在测试中控制其值。 同样&…

读《第一次把事情做对》有感

上班的时候&#xff0c;领导在群里发了一个PDF书籍《第一次把事情做对》&#xff0c;被这个书籍名称吸引住了&#xff0c;因为作为程序员每天有开发新任务&#xff0c;解决旧任务的BUG&#xff0c;第一次就把事情做的完全正确几乎不可能呀&#xff0c;觉得很有看的必要&#xf…

Centos配置国内yum源

网易&#xff08;163&#xff09;yum源是国内最好的yum源之一 &#xff0c;无论是速度还是软件版本&#xff0c;都非常的不错&#xff0c;将yum源设置为163yum&#xff0c;可以提升软件包安装和更新的速度&#xff0c;同时避免一些常见软件版本无法找到。具体设置方法如下&…

做了三年前端,你才知道10分钟就能实现一个PC版魔方游戏

导读&#xff1a;最近手头有点紧&#xff0c;看到很多小朋友都在玩魔方&#xff0c;又没有money买&#xff0c;只能自己用JavaScriptcss实现一个&#xff0c;在电脑端就能开启魔方之旅。 目录 项目启动演示 项目目录 ​源码地址 项目启动演示 前端使用JavaScript和纯CSS实现…

UVA 2474 - Balloons in a Box 爆搜

2474 - Balloons in a Box题目连接&#xff1a; https://icpcarchive.ecs.baylor.edu/index.php?optioncom_onlinejudge&Itemid99999999&pageshow_problem&category36&problem475&mosmsgSubmissionreceivedwithID1967446 Description You must write a pr…

15K的前端应届毕业生,就因为掌握了这些知识点!(前端企业级开发必备)

目录 1.前端开发 下载安装VScode 优化配置 2、插件安装 3、设置字体大小 4、开启完整的Emmet语法支持 5、视图 2.Node.js 入门 2.1、什么是Node.js 2.2、Node.js有什么用 2.3、安装 下载&#xff1a; 2.4、快速入门 2.5、服务器端应用开发 3、ES6入门 3.2、let声…

[Training Video - 1] [Selenium Basics] [Download and Install Selenium]

Download Selenium Jars Configure jars in eclipse Webdriver http://docs.seleniumhq.org/download/ Selenium RC http://code.google.com/p/selenium/downloads/detail?nameselenium-remote-control-1.0.3.zip&can2&q转载于:https://www.cnblogs.com/MasterMonkInT…

【0元试用微软 Azure人工智能认知服务】这个人脸识别功能太强大啦

导读&#xff1a;这个由美丽的客服小姐姐提前申请好了企业试用的账号&#xff0c;个人的话还得需要visa卡。 官网地址&#xff1a;azure.cn 登录地址&#xff1a;portal.azure.cn 目录 1.简介 2.Azure 认知服务是什么&#xff1f; ​ 3.认知服务的四种职能 4.人脸API 5.新建一…

OpenMap教程3 –使用MapHandler构建基本的地图应用程序–第2部分

1.简介 在上一教程中&#xff0c;我们看到了MapHandler如何将各种组件连接在一起&#xff08;更具体地说&#xff0c;是从MapHandlerChild派生的类&#xff09;。 我们看到了如何以编程方式执行此操作&#xff0c;但是还有另一种声明性地使用openmap.properties 。 样本OpenMa…

《javaScript100例|01》超级经典一套鼠标控制左右滚动图片带自动翻滚

目录 HTML示例 图片示例 HTML示例 <html > <head> <meta http-equiv"Content-Type" content"text/html; charsetgb2312" /> <title>超级经典一套鼠标控制左右滚动图片带自动翻滚</title> <style type"text/css&quo…

jsf集成spring_Spring和JSF集成:MVC螺母和螺栓

jsf集成spring过去&#xff0c;我曾尝试将JSF与Spring MVC集成在一起&#xff0c;尽管我的第一次尝试成功了&#xff0c;但这远非理想。 这次&#xff0c;我决定做出一些关键决定来帮助我集中精力&#xff1a; 向后兼容。 支持JSF 1.2涉及的工作太多&#xff0c;而Spring 3.1中…

[BZOJ1007] [HNOI2008] 水平可见直线 (凸包)

Description 在xoy直角坐标平面上有n条直线L1,L2,...Ln,若在y值为正无穷大处往下看,能见到Li的某个子线段,则称Li为可见的,否则Li为被覆盖的. 例如,对于直线:L1:yx; L2:y-x; L3:y0 则L1和L2是可见的,L3是被覆盖的. 给出n条直线,表示成yAxB的形式(|A|,|B|<500000),且n条直线两…

《javaScript100例|02》超级经典一套鼠标控制左右滚动图片带自动翻滚

目录 效果图 JS示例 源码地址&#xff1a; 效果图 JS示例 <title>JavaScript切换图片</title> <script> function showDaTu(src){ document.getElementById("defaultImg").srcsrc; } </script> <img src"wall1.jpg" id"…

抽象工厂设计模式示例

本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中&#xff0c;您将深入研究大量的设计模式&#xff0c;并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因&#xff0c;并了解何时以及如何应用模式中的每一个。 在这里查看 &#xff01; 目录 …