gpt4 book ai didi

c# - 通过 C# 的 MSMQ - 确认收到该消息?

转载 作者:太空狗 更新时间:2023-10-29 23:22:51 24 4
gpt4 key购买 nike

我正在通过 C# 向私有(private)队列发送消息:

MessageQueue msgQ = new MessageQueue(@".\private$\aaa");
msgQ.Formatter = new XmlMessageFormatter(new[] { typeof (String) });
msgQ.Send(msg);

它确实有效,而且我确实在队列中看到了消息。

但是,是否有任何方法可以在消息是否成功进入队列时获得 ACK?

附言

BeginPeekPeekCompleted 是一个事件,当消息在队列中可用或指定的时间间隔已过期时引发 .它没有帮助我,因为我需要知道msmq 是否收到了我发送 的消息。 BeginPeek 也会在有人else 向队列中输入消息时引发。我最不想做的就是通过 BeginPeek 检查这条消息来自谁。

我该怎么做?

PS2

或者也许我不必担心,因为如果未插入消息,msgQ.Send(msg); 将引发异常....?

最佳答案

我认为你正在尝试做的事情不应该在代码中处理。当您发送消息时,它被放置在传出队列中。它无法到达目的地的原因有很多,例如网络分区或目标队列已满。但这对您的应用程序应该无关紧要 - 就它而言,它发送了消息,它提交了事务,它没有收到任何错误。底层基础设施有责任完成其余工作,并且应监控该基础设施以确保不存在技术问题。

现在对您的应用程序真正重要的是交付保证。我从您所描述的场景假设您需要持久的事务队列来确保消息不会丢失。有关可用选项的更多信息,请阅读 here

此外,如果您需要一些标识符作为确认显示给用户,通常的做法是在发送代码中生成它并将其放在消息本身中。然后处理代码将使用该 ID 来完成所需的工作。

关于c# - 通过 C# 的 MSMQ - 确认收到该消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22985953/

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