您可以将MSMQ与多播选项一起使用(在尝试之前检查您的Windows安装是否具有该选项,您将在Windows控制面板的"添加/删除Windows功能"部分中找到它).
使用MSMQ多播队列的发送方将提交可由许多MSMQ多播队列接收器处理的消息.
读者必须有一个私有队列,然后你需要设置你想要使用的多播地址(多播地址的选择是任意的,这就是为什么你经常会看到不同帖子中提到的相同地址,请参阅msdn docs有关更多信息),像这样:
var myQueue = MessageQueue.Create(".\private$\MulticastTest", false);
myQueue.MulticastAddress = "234.1.1.1:8001";
Run Code Online (Sandbox Code Playgroud)
或直接使用现有的多播队列(如果已使用多播地址创建)标准方式:
var myQueue = new MessageQueue(multicastQueueName());
Run Code Online (Sandbox Code Playgroud)
然后你将不得不使用您喜欢的方法来收听新消息,我更喜欢使用这个:
myQueue.Formatter = new XmlMessageFormatter(new Type[] { typeof(String) });
myQueue.PeekCompleted += new PeekCompletedEventHandler(QueuePeekCompleted);
myQueue.BeginPeek();
Run Code Online (Sandbox Code Playgroud)
委托QueuePeekCompleted看起来像这样:
private void QueuePeekCompleted(object sender, PeekCompletedEventArgs e)
{
try
{
var message = myQueue.EndPeek(e.AsyncResult);
//LogInfo("Received this : " + message.Body);
}
catch (Exception ex)
{
//LogError(ex);
}
myQueue.Receive();
myQueue.BeginPeek();
}
Run Code Online (Sandbox Code Playgroud)
多播消息的发送方必须连接到多播队列,如下所示:
MessageQueue myQueue = new MessageQueue("formatname:multicast=234.1.1.1:8001");
Run Code Online (Sandbox Code Playgroud)
然后像往常一样发送消息:
myQueue.Send("hey listen!");
Run Code Online (Sandbox Code Playgroud)