手表网站推荐,企业网站开发 文献综述,郑州企业建站网站,最近国际新闻50条rabbitmq 传递文件本月初#xff0c;我在ComoRichWeb上的RabbitMQ上做了一个演讲#xff0c;与会人员提出的一个问题是“是否可以发布一条消息供以后使用#xff1f;” 我回答说#xff0c;就我所知#xff0c;这是不可能的#xff0c;但是可能会有一些技巧来实现它。 好… 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 immediateconn.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 immediateconn.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.htmlrabbitmq 传递文件