我需要创建一个基于C#的MSMQ环境,在该环境中,我需要能够基于外部进程提供的某些唯一值从队列中读取消息。即,理想情况是类似于ReceiveByLabel(“ 1234”)。我可以安排标签唯一的东西,但是似乎没有简单的方法。我可以使用他的GetAllMessage枚举器,但是由于队列中可能有30,000条消息,这可能会非常慢。
任何想法建议将不胜感激。
我建议使用相关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;
通过此相关ID接收。
string yourQueuePath= "...";
MessageQueue queue = new MessageQueue(yourQueuePath);
Message myMessage = queue.ReceiveByCorrelationId(messageUniqueID);
可以通过代码或其他任何方式(保存在DB等中)指定和生成ID”>