2010-08-25 16 views
6

पर काम करने की मैं स्वयं की मेजबानी के लिए दोनों एक ग्राहक और NServiceBus और VS2010 के साथ प्रकाशक का प्रयास कर रहा हूँ संस्करण 2.0.0.1219स्वयं मेजबान NServiceBus

का उपयोग नहीं कर सकते हैं। कार्यक्रम चलाते हैं और प्रारंभ होते हैं लेकिन मुझे संदेशों को पार करने के लिए नहीं मिल सकता है। प्रकाशक काम करता है जैसे पोस्टिंग, कोई त्रुटि नहीं, लेकिन ग्राहक को कुछ भी नहीं मिलता है।

यहाँ ग्राहक config

<?xml version="1.0"?> 
<configuration> 
    <configSections> 
    <section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core"/> 
    <section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core"/> 
    </configSections> 

    <!-- in order to configure remote endpoints use the format: "[email protected]" 
     input queue must be on the same machine as the process feeding off of it. 
     error queue can (and often should) be on a different machine. 
    --> 

    <MsmqTransportConfig InputQueue="loads" ErrorQueue="error" NumberOfWorkerThreads="1" MaxRetries="5"/> 

    <UnicastBusConfig> 
    <MessageEndpointMappings> 
     <add Messages="NServiceMessage" Endpoint="loads"/> 
    </MessageEndpointMappings> 
    </UnicastBusConfig> 
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration> 

और प्रकाशक config

<?xml version="1.0"?> 
<configuration> 

    <configSections> 
    <section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core"/> 
    <section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core"/> 
    </configSections> 

    <MsmqTransportConfig InputQueue="loads" ErrorQueue="error" NumberOfWorkerThreads="1" MaxRetries="5"/> 

    <UnicastBusConfig DistributorControlAddress="" DistributorDataAddress="" ForwardReceivedMessagesTo=""> 
    <MessageEndpointMappings> 
     <!-- publishers don't need to set this for their own message types --> 
     <!--<add Messages="Messages" Endpoint="messagebus" />--> 
    </MessageEndpointMappings> 
    </UnicastBusConfig> 

    <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> 
    </startup> 

</configuration> 

यहाँ प्रकाशक कोड है:

class Program 
{ 
    private static IBus _serviceBus; 

    static void Main(string[] args) 
    { 
     _serviceBus = Configure.With() 
      .Log4Net() 
      .DefaultBuilder() 
      .XmlSerializer() 
      .MsmqSubscriptionStorage() 
      .MsmqTransport() 
      .UnicastBus() 
      .LoadMessageHandlers() 
      .CreateBus() 
      .Start(); 

     while (true) 
     { 
      Console.WriteLine("Press a key to send data."); 
      Console.ReadKey(); 
      SendMessaage(); 
     } 
    } 


    private static void SendMessaage() 
    { 
     LoadMessage message = GetNextMessage(); 
     _serviceBus.Publish(message); 
    } 

    private static LoadMessage GetNextMessage() 
    { 
     LoadMessage result = new LoadMessage(); 

     result.DeliveryDate = DateTime.Today.AddDays(3).ToShortDateString(); 
     result.DestinationCity = "Boise"; 
     result.DestinationCountry = "USA"; 
     result.DestinationState = "ID"; 
     result.EventId = Guid.NewGuid(); 
     result.Time = DateTime.Now.ToUniversalTime(); 
     result.OriginState = "OR"; 
     result.OriginCity = "Portland"; 
     result.OriginCountry = "USA"; 
     result.EquipmentID = 3; 

     return result; 
    } 
} 

और ग्राहक कोड

class Program 
{ 
    private static IBus _serviceBus; 
    private static LoadMessageHandler _messageHandler; 

    static void Main(string[] args) 
    { 
     _messageHandler = new LoadMessageHandler(); 

     _serviceBus = Configure 
      .With() 
      .Log4Net() 
      .DefaultBuilder() 
      .BinarySerializer() 
      .MsmqSubscriptionStorage() 
      .MsmqTransport() 
      .UnicastBus() 
      .LoadMessageHandlers() 
      .CreateBus() 
      .Start(); 

     Console.ReadKey(); 
    } 
} 

और संदेश कोड

public class LoadMessageHandler : IHandleMessages<LoadMessage> 
{ 
    public void Handle(LoadMessage message) 
    { 
     Console.WriteLine(String.Format("GUID: {0}", message.EventId)); 
    } 
} 
+0

इस समस्या का कारण निर्धारित करने के लिए नामस्थान और लक्ष्य डीएल सहित अधिक संपूर्ण कोड आवश्यक है। में NService संदेश, उस डीएल को संदर्भित करता है जहां LoadMessage प्रकार परिभाषित किया गया है। – Cirdec

उत्तर

5

अधिक समस्याओं:

1: msmq परिवहन प्रकाशक सदस्यता संदेशों को स्वीकार करने के लिए लेन-देन संबंधी के रूप में विन्यस्त किया जाना चाहिए। इन्हें कॉन्फ़िगर करने के उदाहरण के लिए http://blogs.planbsoftware.co.nz/?p=234 देखें।

2: प्रकाशक XmLSerializer का उपयोग कर रहा है और ग्राहक BinarySerializer का उपयोग कर रहा है, जो उन्हें असंगत बनाता है।

+0

धन्यवाद, यह किया, यह गलत है कि मैं क्या गलत हो गया है। – Steve

5

आप, दोनों अंतिमबिंदुओं के लिए एक ही इनपुट कतार का उपयोग आप अपने आप कतार में ग्राहक और देखते हैं कि अगर काम करता है स्थानांतरित करने के लिए लग रहे हैं।

आपके लिए सब्सक्रिप्शन स्टोरेज को कॉन्फ़िगर करना भी आवश्यक नहीं है क्योंकि यह प्रकाशक है जो सदस्यता जानकारी संग्रहीत करने के लिए ज़िम्मेदार है।

आशा है कि इससे मदद मिलती है!

+0

धन्यवाद, यह गलत है जो मुझे गलत मिला है। – Steve

संबंधित मुद्दे