C# 如何使用MSMQ发送/接收多播消息?

C# 如何使用MSMQ发送/接收多播消息?,c#,.net,vb.net,msmq,C#,.net,Vb.net,Msmq,有人能帮我找到一些示例代码,使用MSMQ和您选择的任何.NET语言发送和接收多播消息。我四处搜索,发现发送的信息是: MessaegQueue topic = new MessageQueue("formatname:multicast=234.1.1.1:8081") topic.Send("Hello out there") 我试着用Receive做同样的想法: MessageQueue topic = new MessageQueue("formatname:multicast=234.

有人能帮我找到一些示例代码,使用MSMQ和您选择的任何.NET语言发送和接收多播消息。我四处搜索,发现发送的信息是:

MessaegQueue topic = new MessageQueue("formatname:multicast=234.1.1.1:8081")
topic.Send("Hello out there")
我试着用Receive做同样的想法:

MessageQueue topic = new MessageQueue("formatname:multicast=234.1.1.1:8081")
topic.Receive();
但我什么也得不到。有人可以展示一些关于如何接收多播消息的示例代码吗?还是我发错了?

所以我明白了

要发送多播消息,请执行以下操作:

要接收多播消息,请执行以下操作:

这有点棘手,因为您无法订阅多播地址。您需要做的是创建一个队列,最好创建一个专用队列,该队列将附加到您要监视的多播地址,然后侦听您创建的专用队列而不是多播地址。大概是这样的:

  Dim privMulticastQueue As String = GetPrivateQueueForMulticastAddress("formatname:multicast=234.1.1.1:8081")
  Dim msgq as MessageQueue = GetMessageQueue(privMulticastQueue)
  msgq.MulticastAddress = GetMulticastAddress(destination)
  msgq.Label = "Private Queue for receiving messages from: " & destination
  msgq.Receive()
一些支持方法可能有更好的方法来编写它们,所以请随意更正,但这是我第一次尝试:

 Private Function GetPrivateQueueForMulticastAddress(ByVal dest As String) As String
    Dim privateQ As String = GetMulticastAddress(dest).Replace(".", "_").Replace(":", "_")
    Return ".\Private$\" & privateQ
 End Function

Private Function GetMulticastAddress(ByVal dest As String) As String
    Return dest.Split("=")(1)
End Function

Private Function GetMessageQueue(ByVal dest As String) As MessageQueue   
      Try
           If Not MessageQueue.Exists(dest) Then
             MessageQueue.Create(dest)
            End If

            Dim msgq As MessageQueue = New MessageQueue(dest)
            Return msgq
      Catch ex As Exception
            Throw New EMGException("Failed while trying to use destination: " & dest, ex)
      End Try

End Function

这可能会有所帮助:我今天多次无意中发现了那个网站。他在那里给出的解释很令人困惑,但现在完全有道理了。我曾经使用ActiveMQ和WebSpehere MQ,它们在主题和队列方面比MSMQ更简单。MSMQ可以做同样的事情,但需要一点工程来实现同样的事情。在我目前的公司,我们想尝试MSMQ。
 Private Function GetPrivateQueueForMulticastAddress(ByVal dest As String) As String
    Dim privateQ As String = GetMulticastAddress(dest).Replace(".", "_").Replace(":", "_")
    Return ".\Private$\" & privateQ
 End Function

Private Function GetMulticastAddress(ByVal dest As String) As String
    Return dest.Split("=")(1)
End Function

Private Function GetMessageQueue(ByVal dest As String) As MessageQueue   
      Try
           If Not MessageQueue.Exists(dest) Then
             MessageQueue.Create(dest)
            End If

            Dim msgq As MessageQueue = New MessageQueue(dest)
            Return msgq
      Catch ex As Exception
            Throw New EMGException("Failed while trying to use destination: " & dest, ex)
      End Try

End Function