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