2016-06-14 7 views
0

MSMQ 멀티 캐스트 기능을 사용하여 게시자 및 구독자 모델을 만들고 싶습니다. 나는 성공적으로 링크없이 답을 따랐다. MSMQ - Cannot receive from Multicast queues 메시지는 로컬 컴퓨터에서주고 받는다.MSMQ 메시지 멀티 캐스트 : 다른 컴퓨터에서 메시지를받을 수 없습니다.

보낸 사람 :

using (var helloQueue = new MessageQueue("FormatName:MULTICAST=234.1.1.1:8001")) 
{ 
    while (true) 
    { 
     var stopWatch = new Stopwatch(); 
     stopWatch.Start(); 

     for (var i = 0; i < 1000; i++) 
     { 
      SendMessage(helloQueue, 
       string.Format("{0}: msg:{1} hello world ", DateTime.UtcNow.Ticks, i)); 
     } 

     stopWatch.Stop(); 
     Console.ReadLine(); 

     Console.WriteLine("===================================================="); 
     Console.WriteLine("[MSMQ] done sending 1000 messages in " + stopWatch.ElapsedMilliseconds); 
     Console.WriteLine("[MSMQ] Sending reset counter to consumers."); 

     SendMessage(helloQueue, "reset"); 
     Console.ReadLine(); 
    } 
} 

수신기 :

int messagesReceived = 0; 
var messages = new Queue<string>(5000); 
var filePath = typeof(Subscriber).FullName + ".txt"; 
var path = @".\private$\hello-queue"; 

using (var helloQueue = new MessageQueue(path)) 
{ 
    helloQueue.MulticastAddress = "234.1.1.1:8001"; 
    while (true) 
    { 
     var message = helloQueue.Receive(); 
     if (message == null) 
      return; 

     var reader = new StreamReader(message.BodyStream); 
     var body = reader.ReadToEnd(); 

     messagesReceived += 1; 

     messages.Enqueue(body); 
     Console.WriteLine(" [MSMQ] {0} Received {1}", messagesReceived, body); 

     if (string.CompareOrdinal("reset", body) == 0) 
     { 
      messagesReceived = 0; 
      File.WriteAllText(filePath, body); 
      messages.Clear(); 
     } 
    } 
} 

내가 이벤트 로그에 IP의 표시와 multicastbind에 대한 레지스트리 키 (이 확실하지 않음)를 추가했다. 대기열에서 지정하는 MulticastAddress가 특정 항목인지 또는 지정된 범위의 항목을 사용할 수 있습니까?

답변

0

이것은 포트 번호 만 변경하면 해결됩니다. 나머지는 괜찮 았어.