【问题标题】:MSMQ Messages Never Get Delivered - Sit in outbound when pausedMSMQ 消息永远不会被传递 - 暂停时处于出站状态
【发布时间】:2017-12-23 15:01:27
【问题描述】:

我有 3 台机器,我们称它们为 A、B(都是服务器)和 Dev(我的本地机器)。

我想将消息队列项从 A 发送到 B。

我的实际 C# 代码相当简单,老实说,我真的不认为这有问题。 (这是一个 webapi,它接受一个 POST 对象并将其推到队列中)。

我可以毫无问题地将这些消息从 Dev 发送到 B(登录到域管理员帐户时),并且我可以检查消息的正文。但是我无法从 A 向 B 发送消息。B 上的私有队列设置为允许“所有人”的“完全控制”权限。

如果我暂停 A 上的出站队列并发送消息,它们将位于出站队列中,并且正文与我预期的完全一样,但是当我再次恢复该出站队列时,它们永远不会在B 的另一端。

我无法弄清楚我的生活到底发生了什么。我尝试了“TCP”方法,但我需要通过机器名而不是 IP 来引用我的队列。

供参考,用于发送消息的代码是:

using (var queue = new MessageQueue($"FormatName:Direct=OS:MachineB\\private$\\Queue"))
            {
                var queueItem = new QueueItem();
                queueItem.Object = this.postedObject;

                var message = new System.Messaging.Message(queueItem);
                queue.Send(message);
            }

【问题讨论】:

  • A 和 B 是否在同一个域中?另外,B 上的队列是事务性队列还是非事务性队列?
  • @tomredfern 它们都在同一个域中(与 Dev 一起)并且它们是非事务性的 :)
  • 在两台服务器上为 MSMQ 开启 E2E 跟踪。 technet.microsoft.com/en-us/library/cc730882(v=ws.11).aspx。这应该可以准确地告诉您发生了什么。

标签: c# message-queue msmq


【解决方案1】:

供参考和遇到此问题的任何其他人:

将消息发送到队列的项目是一个 webapi。它在 IIS 中的 AppPoolIdentity 帐户下运行,尽管接收队列允许所有人访问,但它拒绝了这些消息,但很优雅。所以 webapi 会触发消息并且不会抛出任何异常,它会到达出站,但永远不会到达。

我们将帐户切换到 NetworkService,它工作得很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-31
    • 1970-01-01
    相关资源
    最近更新 更多