问题标签 [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 回答
2379 浏览

rabbitmq - RabbitMQ - 处理不可靠的服务

我有一个服务 AAA,每分钟向 RabbitMQ 交换发布 10 到 5 万条消息。一个 .NET Core 服务 BBB 订阅一个队列(所有消息都被路由到该队列),并为每条消息通过 Internet 调用另一个 HTTP 服务 CCC。问题是 CCC 非常不可靠,一天几次它会完全关闭一两分钟,每周至少一次它会死掉一个小时。

我无法控制 AAA 或 CCC。如何使用 RabbitMQ 路由功能可靠地传递所有已处理的消息?

0 投票
1 回答
146 浏览

rabbitmq - Is there a way to transport data with a 100% delivery guarantee using RabbitMQ?

I'm building a system in which I'd like to use RabbitMQ as the main message passing mechanism.

My system requires very strong guarantees for message delivery, as in, messages must arrive at their destination and acknowledged, otherwise I expect them to be requeued, and redelievered.

The use case is maintaining eventual consistency between 2 systems

I'd also like to avoid having to manage any state regarding the messages in my application.

I know that publishing a persistent message does not provide a 100% guarantee that it was persisted to disk, because fsync(2) is not called for every message.

thus, my question is - Can I use RabbitMQ as a 100% reliable* message passing mechanism?

I've read about transactions, but couldn't find anything besides a 2011 blogpost which also doesn't explicitly state that an fsync(2) is performed for every message, or that a (synchronous) failure occurs if it doesn't succeed.

* by reliable I mean that the messages should eventually be delivered, always. duplicate messages are acceptable.

0 投票
0 回答
311 浏览

python - 使用序列号的可靠 UDP 实现,死锁

我正在尝试在单个客户端和服务器之间实现可靠的 UDP 消息传递方案。

在我当前的代码中,如果他只使用接收命令,我可以将递增数字 1 发送到服务器。如果服务器尝试使用发送命令回复接收到的数据,它似乎可以来回处理 1-3 条消息,然后我进入死锁。我不明白死锁的根源来自哪里。下面是我的发送和接收实现。

客户端和服务器都以将 self.seqnumber 设置为 0 开始,并且两个套接字都设置为 1 秒后超时。客户端和服务器共享这些方法,因为它们属于客户端和服务器导入的类。

在服务器上运行的代码(commInf 是定义 get 和 send 命令的类):

以及在客户端上运行的代码:

我希望输出允许我可靠地发送消息并使用 sendCommand(带有接收的数据)返回它们,因为从 getCommand 返回的数据不包括其序列号,而只是原始数据。

0 投票
2 回答
166 浏览

java - Realiable UDP - TCP 握手何时发生?

尝试为连接到 Java 服务器的我的游戏(在 GameMaker: Studio 中制作)开发可靠的 UDP 协议。我需要确保数据包到达并且它们以正确的顺序到达。

我试图模拟 TCP 协议来做到这一点,而让我困惑的一件事是 3 次握手:它什么时候发生?

握手基本上是当你第一次连接到某个东西时?只做过一次吗?(直到连接断开)

如果是这种情况,那么我将哪些数据附加到常规数据包中?

假设我有最初的 3 个连接数据包:SYN -> SYN-ACK -> ACK

让我们假设这一切进展顺利,我们已经连接好了。

然后假设我想向服务器发送一条消息:“你好”。我基本上是SYN -> SYN-ACK -> ACK为这条消息做的吗?我究竟在这个消息包/数据报上附加了什么以确保它按顺序到达和到达?

0 投票
1 回答
21 浏览

hazelcast - Hazelcast,由于消息丢失而终止后恢复 MessageListener 成员

我们有一个ReliableMessageListener通过实现同步它在集群中保存的一些数据结构onMessage

集群由三个节点组成。我们注意到其中一个主题不同步,并且由于消息丢失而被终止,由环形缓冲区检测到,因为我们得到一个“ Terminating MessageListener, ... Reason: Underlying ring buffer data related to reliable topic is lost”异常。发生的情况是该节点仍处于启动状态,但该特定侦听器没有从其他两个节点获取事件/消息,而他们确实从中获取了事件/消息。

我们对这个特定主题进行了事实上的脑裂。

我们的消息监听器配置为isLossTolerant = false, 和isTerminal = false

我试图了解什么被认为是处理这种情况并从中恢复的好策略。

例如,再次尝试订阅此主题是一个好习惯吗?发送消息以清除集群中其他节点的数据是一种好习惯吗?在环形缓冲区不同步后,他们甚至会收到消息吗?

谢谢