gpt4 book ai didi

node.js - 如何设置 "publisher confirms"?

转载 作者:行者123 更新时间:2023-12-05 02:15:50 26 4
gpt4 key购买 nike

我的应用程序不能丢失任何消息。 RabbitMQ 做得很好,但它并不总是完美无缺。

将消息标记为持久化是不够的。有一个小的时间窗口,消息可能会写入缓存但不会写入磁盘。如果这里发生了什么事,比如崩溃(不太可能),未写入磁盘的消息就会丢失。这是文档中的注释 (link here)

Note on message persistence

Marking messages as persistent doesn'tfully guarantee that a message won't be lost. Although it tellsRabbitMQ to save the message to disk, there is still a short timewindow when RabbitMQ has accepted a message and hasn't saved it yet.Also, RabbitMQ doesn't do fsync(2) for every message -- it may be justsaved to cache and not really written to the disk. The persistenceguarantees aren't strong, but it's more than enough for our simpletask queue. If you need a stronger guarantee then you can usepublisher confirms.

发布者确认是保证消息不会丢失所需的机制。

我无法理解如何使用 Node.js 启用此功能,尤其是使用 amqplib 包 ( github code )。在图书馆里挖了一点我发现了这个:

var open = require('amqplib').connect();
open.then(function(c) {
c.createConfirmChannel().then(function(ch) {
ch.sendToQueue('foo', new Buffer('foobar'), {},
function(err, ok) {
if (err !== null)
console.warn('Message nacked!');
else
console.log('Message acked');
});
});
});

但我不确定这就是我所需要的。另外,我应该在消费者方面做什么?以同样的方式连接,用createConfirmChannel再次创建 channel ?

最佳答案

RabbitMQ 团队监控the rabbitmq-users mailing list并且只是偶尔在 StackOverflow 上回答问题。


您的代码是正确的,createConfirmChannel 创建了一个启用了发布者确认的 channel 。你应该看看 this example code

关于node.js - 如何设置 "publisher confirms"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50949029/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com