C# 通过标签从MSMQ读取消息

C# 通过标签从MSMQ读取消息,c#,msmq,C#,Msmq,我需要创建一个基于C#的MSMQ环境,在此环境中,我需要能够根据外部进程提供的某个唯一值从队列中读取消息。i、 理想情况下,类似于ReceiveByLabel(“1234”)的东西。我可以安排的事情,使标签是唯一的,但似乎没有简单的方法来做到这一点。我可以使用GetAllMessage枚举器,但由于队列中可能有30000条消息,这可能会非常慢 任何想法和建议都将不胜感激。我建议使用关联id。 1.需要构建相关id(38-42个字符长度)。可以以任何方式构建,例如通过GUID构建 ///

我需要创建一个基于C#的MSMQ环境,在此环境中,我需要能够根据外部进程提供的某个唯一值从队列中读取消息。i、 理想情况下,类似于ReceiveByLabel(“1234”)的东西。我可以安排的事情,使标签是唯一的,但似乎没有简单的方法来做到这一点。我可以使用GetAllMessage枚举器,但由于队列中可能有30000条消息,这可能会非常慢


任何想法和建议都将不胜感激。

我建议使用关联id。 1.需要构建相关id(38-42个字符长度)。可以以任何方式构建,例如通过GUID构建

    /// <summary>
    /// Generate random correlation ID(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\xxxxx)
    /// </summary>
    /// <returns>string</returns>
    /// <param name="id">if want specific id in end of generated id, else it will be random forom 1- 10000</param>
    public string GenerateId(int id = 0)
    {
        if (id == 0)
        {
            Random r = new Random();
            id = r.Next(1, 10000);
            id = r.Next(1, 10000);
        }
        return $"{Guid.NewGuid().ToString()}\\{id.ToString()}";
    }
  • 通过此关联id接收它

    Message message = new Message();
    string messageUniqueID =  GenerateId();
    message.CorrelationId = messageUniqueID;
    
    string yourQueuePath= "...";
    MessageQueue queue = new MessageQueue(yourQueuePath);
    Message myMessage = queue.ReceiveByCorrelationId(messageUniqueID);
    

  • Id可以通过代码或任何其他方式指定和生成(保存在DB等中)

    是否控制外部进程msmq发送?它可能是一个相关id来接收信息谢谢-一个轻微的变化,你的建议正是我想要的。关键是理解Id的格式。这里也一样。在c#中没有在web上搜索文档。仅在VB.net中有关关联id的大小和格式,但提供的格式不正确。花了一段时间才弄清楚格式。此外,若在接收消息后需要相关ID,则在请求之前需要指定该ID。queue.MessageReadPropertyFilter.CorrelationId=true;