问题标签 [reliable-message-delivery]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3437 浏览

rabbitmq - PubSub + 可靠的消息传递给不可靠的订阅者

我需要构建一个使用 Publish/Subscribe 总线(例如 Mule、ZeroMQ、RabbitMQ)的系统,但文献都暗示订阅者应用程序可以可靠地接收来自他们订阅的主题的消息,只要 Pub/Sub 总线能够传递消息。

我有一个系统,其中一些应用程序将可靠地连接到发布/订阅总线,但其他应用程序不会一直处于活动状态或连接到总线。

显而易见的解决方案是在不可靠的应用程序和发布/订阅总线之间建立某种“存在”协议,以便“存在”应用程序立即传递它们的消息,而“不存在”应用程序将它们的消息排队在持久缓冲区中某种形式的,一旦他们完成“在场握手”,排队的消息就会被传递给新出现的应用程序。

是否有任何发布/订阅总线内置了这种功能,或者是否有任何开源插件可以做到这一点?你能指出任何描述这一点的网址吗?

0 投票
2 回答
598 浏览

biztalk - 可以通过使用顺序护送的 BizTalk 横向扩展来实现有序消息传递吗?

我有一个 BizTalk 接收端口连接到用于接收有序消息的队列(使用 MQ 系列适配器)。我需要使用多个 BizTalk 主机实例扩展此端口(我使用的是 BizTalk Server 2006 R2)。

根据 MSDN,这是无法做到的,因为有序消息传递对横向扩展技术起作用。

有没有其他方法可以通过扩展多个 BizTalk 主机实例来实现有序的消息传递?是否可以通过顺序护航模式实现这一目标?

感谢您的反馈。

谢谢,

查图尔

0 投票
0 回答
1463 浏览

java - DatagramChannel 在 UDP 程序中抛出 closedSocketException

作为课程项目的一部分,我正在尝试使用选择性重复在 java 中的基本 UDP 协议上实现一层可靠性:http ://en.wikipedia.org/wiki/Selective_Repeat_ARQ 。基本上,每个数据包 - 在发送时 - 在单独的线程中跟踪自己的计时器。如果任何特定计时器用完,则重新发送数据包。

对于相对较大的超时设置(例如 500 毫秒),此代码执行良好,并且大文件完全发送到接收器。但是,如果设置了较低的超时时间(例如 20 毫秒),我会收到以下向终端发送垃圾邮件的错误:

然而,据我所见,该频道并未关闭。此异常的文档指出:

当尝试在已关闭或至少对该操作关闭的通道上调用或完成 I/O 操作时抛出已检查异常。抛出此异常并不一定意味着通道已完全关闭。例如,写入一半已关闭的套接字通道可能仍处于打开状态以供读取。

这让我认为它可能已关闭,因为它在某些方面不可用。由于它只发生在较小的超时值,也许这是因为两个线程试图同时重新发送?但是,发送(sendPak)的方法是同步的......所以这应该是不可能的。

是什么导致了这个问题?或者我可以使用什么修复程序来避免遇到这个问题?这是我程序的发送方部分的代码,我很确定接收方没问题:

0 投票
0 回答
341 浏览

.net - MSMQ 可靠度

最近我在域环境中使用本地帐户设置 msmq 通信通道时遇到了一些困难。这是很常见的场景,我需要在队列属性中授予匿名用户的访问权限。

但是从那一刻起有一件事困扰着我:当我的应用程序无法将消息发送到远程私有队列时,它们就消失在某个地方了。我的队列是事务性的,我将 DefaultPropertiesToSend.Recoverable 设置为 true。在发送消息的机器上创建了出站消息队列,但在发送尝试后,出站队列中没有等待消息,发送过程中也没有异常。这是设计使然吗?

0 投票
1 回答
1273 浏览

messaging - 可靠的消息传递与有保证的消息传递

可靠的消息传递系统和有保证的消息传递系统之间有区别吗?

0 投票
1 回答
1759 浏览

redis - 用于多线程处理的 Redis 可靠队列

对于我正在进行的项目,我使用 Redis 跨多个进程分发消息。现在,我应该让它们可靠

我考虑通过 BRPOPLPUSH 命令使用可靠队列模式。此模式建议处理线程在作业成功完成后通过 lrem 命令从“处理列表”中删除额外的消息副本。

当我使用多个线程来弹出时,弹出项目的额外副本会从多个线程进入处理列表。也就是说,处理队列包含多个线程弹出的元素。因此,如果一个线程完成了它的工作,它就无法知道要从“处理队列”中删除哪个项目。

为了克服这个问题,我认为我应该基于threadId维护多个处理队列(每个线程一个)。所以,我的 BRPOPLPUSH 将是:

然后为了清理超时对象,我的监控线程必须监控所有这些线程特定的处理队列。

有没有比上面设想的更好的方法来解决这个问题?

0 投票
1 回答
259 浏览

c# - 我应该为 Intranet 方案禁用 WCF 可靠会话吗?

该方案是 DMZ 中的 Web 服务器,它与 WCF 服务器进行所有与数据库相关的调用。

所有调用都是 Intranet 中的服务器到服务器,通过 netTcp 或来自调用 SVC 服务的 ASPX 页面的 wsHttp。

从理论上讲,我应该采取措施禁用可靠会话功能,还是应该启用它们,或者没有区别?

似乎可靠会话引入了配置风险(即由于 WCF 难以配置而导致失败)。

如果从来没有消息无法从一个 Intranet 服务器传送到另一个,或者如果从来没有乱序消息,这将是有问题的。

我希望我可以对此进行负载测试并监视是否存在丢弃的消息,但我可用的测试环境与生产环境在网络可靠性方面有很大不同。

注意:用户没有使用 WCF 客户端,他们只是使用普通的 Web 浏览器与 ASPX 页面对话,所有 WCF 活动都在防火墙的 Intranet 端。

0 投票
2 回答
1715 浏览

tcp - TCP(传输控制协议)是否提供最多一次、至少一次或恰好一次的传递

我听说它说提供一次性交付几乎是不可能的。同时,据说 TCP 提供有保证的交付。如果 TCP 不提供完全一次保证交付,那么它提供最多一次或至少一次

0 投票
1 回答
410 浏览

erlang - 如何在ejabberd中实现消息传递状态

我是 Ejabberd 的新手。我想知道我的消息是否已发送给收件人。我使用的客户端是 pidgin。我已经通过了协议XEP-0184我不知道如何实现这个(我不知道 Erlang)。是否有任何可用的模块实现了我可以安装和使用的这个协议?如果它没有实施,我该如何实施?

0 投票
0 回答
91 浏览

sockets - 可靠的消息传递 XMPP

在某些情况下,服务器无法在套接字级别确定客户端的状态,有时,由于连接断开,套接字返回成功,用户没有连接到服务器。一些消息被丢弃,我们如何克服这个问题。

Client c1 向Server S1 发送消息 服务器向Client2 c2 发送消息,如果返回成功,我们只能在socket send 上确定客户端连接的状态,我们可以假设客户端处于活动状态并且消息已成功发送。但是,由于连接不再并且套接字无法预测,因此有时消息会丢失?如何克服这个问题。

如果错误代码成功,我们假设消息已成功发送到该客户端,但是在连接断开后它不会立即通知,在几秒钟后预期的错误代码在此间隔内返回我们丢失了消息