通过标签从MSMQ读取消息

问题描述 投票:0回答:1

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

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

c# msmq
1个回答
0
投票

我建议使用相关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()}";
    }
  1. 指定具有生成的相关ID的消息。

    Message message = new Message();
    string messageUniqueID =  GenerateId();
    message.CorrelationId = messageUniqueID;
    
  2. 通过此相关ID接收。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.