2013-03-18 5 views
9

मैं MassTransit और RabbitMQ के आसपास मेरे सिर प्राप्त करने की कोशिश कर रहा हूँ और कतार में काम करने के लिए में (दिन 1)नौसिखिया - एक उपभोक्ता कतार आवश्यक आदेश प्रकाशन MassTransit

सवाल मेरे पास है कि क्या एक "उपभोक्ता के लिए आवश्यक है है एमटी में काम करने के लिए कतार में आने के लिए। कारण मैं पूछता हूं क्योंकि मैंने पहले डोमेन और निर्माता बनाया था लेकिन मुझे खरगोशएमक्यू प्रबंधन विंडो में कोई कतारबद्ध वस्तु नहीं दिखाई दे रही थी। "

जब उपभोक्ता कतार बनाई जाती है तो मैं संदेश पंक्तिबद्ध देख सकता हूं।

मेरी समझ के आधार पर, निर्माता उपभोक्ता के बारे में कभी भी अवगत नहीं है, तो संदेश प्रकाशन शुरू करने के लिए MassTransit को उपभोक्ता कतार की आवश्यकता क्यों है?

निर्माता

using MassTransit; 

namespace Producer 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Bus.Initialize(sbc => 
      { 
       sbc.UseRabbitMq();   //1 
       sbc.UseControlBus(); 
       sbc.EnableMessageTracing(); 
       sbc.EnableRemoteIntrospection(); 
       sbc.ReceiveFrom("rabbitmq://localhost/MT.Producer"); 
       sbc.UseControlBus(); 
      }); 

      Bus.Instance.Publish(new NewOrderMessage { OrderName = "Hello World" }); 
     } 
    } 
} 

आवेदन

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using MassTransit; 
using Topshelf; 

namespace Consumer 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Bus.Initialize(sbc => 
      { 
       sbc.UseRabbitMq(); 
       sbc.UseRabbitMqRouting(); 
       sbc.ReceiveFrom("rabbitmq://localhost/MT.ConsumerService"); 
      }); 

      var cfg = HostFactory.New(c => 
      { 
       c.SetServiceName("MT.ConsumerService"); 
       c.SetDisplayName("MT.ConsumerService"); 
       c.SetDescription("MT.ConsumerService"); 

       //c.BeforeStartingServices(s => {}); 

       c.Service<ConsumerService>(a => 
       { 
        a.ConstructUsing(service => new ConsumerService()); 
        a.WhenStarted(o => o.Start()); 
        a.WhenStopped(o => o.Stop()); 
       }); 

      }); 

      try 
      { 
       cfg.Run(); 
      } 
      catch (Exception e) 
      { 
       Console.WriteLine(e.Message); 
       throw; 
      } 
     } 
    } 
} 

संदेश

namespace Domain 
{ 
    public class NewOrderMessage 
    { 
     public NewOrderMessage() 
     { 
      OrderId = Guid.NewGuid(); 
     } 
     public Guid OrderId { get; set; } 
     public string OrderName { get; set; } 
    } 
} 

गु ई उपभोक्ता सेवा

namespace Consumer 
{ 
    class ConsumerService 
    { 
     readonly IServiceBus _bus; 

     public ConsumerService() 
     { 
      _bus = Bus.Instance; 
     } 

     public void Start() 
     { 
      _bus.SubscribeHandler<NewOrderMessage>(CreateOrder); 

      Console.WriteLine("Starting...."); 
     } 

     public void Stop() 
     {  
      Console.WriteLine("Stopping...."); 
     } 

     public void CreateOrder(NewOrderMessage command) 
     { 
      Console.WriteLine("Creating Order: {0} with Id: {1}", command.OrderName, command.OrderId); 
     } 
    } 
} 

कोड वेब पर उदाहरणों का उपयोग कर बनाया गया था।

संपादित भी जोड़ने के लिए है कि सभी नामस्थान विभिन्न परियोजनाओं डोमेन निर्माता उपभोक्ता

सादर,

मार्च

+0

मैं सिर्फ पाया एक गूगल समूह है कि वहाँ और अपने प्रश्न का उत्तर प्रश्न पूछा में से एक में है। https://groups.google.com/forum/?fromgroups=#!searchin/masstransit-discuss/publishing$20message$20without$20subscriber/masstransit-discuss/RU2_443iak8/OfILeKbfGNQJ – TheMar

+0

मैं इस प्रश्न को आज बंद कर दूंगा ताकि Google समूह से ऊपर लिंक अभी भी दिखाई दे रहा है – TheMar

उत्तर

7

masstransit-चक्र पर निम्नलिखित जवाब वास्तव में मुझे मदद मिली हैं चाहेंगे।

Google समूह से masstransit-पर चर्चा

... MassTransit साथ बात यह है कि आप वास्तव में एक कतार में प्रकाशित नहीं करते, तो आप एक मुद्रा है कि है तो पर उस संदेश पारित करने के लिए स्थापित करने के लिए प्रकाशित है उस एक्सचेंज पर संदेशों की सदस्यता लेने वाली अन्य कतारों के लिए। चूंकि आपके पास कोई उपभोक्ता नहीं है, इसलिए किसी ने आपके संदेश में कोई रूचि नहीं व्यक्त की है, इसलिए इसे आसानी से अनदेखा कर दिया जाएगा।

तो बस एक उपभोक्ता स्थापित करें और इसे "rabbitmq: // localhost/B" सुनें। पहली बार आप इसे चलाते हैं, यह उन दोनों के बीच आवश्यक आदान-प्रदान और लिंक का निर्माण करेगा, और आपके संदेश बी

ऐन्डर्स

एक बस नाम की एक कतार में पारित हो जाएगा सभी एक्सचेंजों का संग्रह है, कतार, और सभी एक साथ सेवाएं। जब आप बस पर प्रकाशित होते हैं, तो उस बस पर पंजीकृत सभी उपभोक्ता इसे प्राप्त करेंगे।

एक्सचेंज इस काम को करने के लिए खरगोश एमक्यू कार्यान्वयन हैं।

ट्रैविस

+0

इस विशेष Google समूह चर्चा से लिंक करें (जो बहुत उपयोगी है!): https://groups.google.com/forum/#!topic/masstransit-discuss/6cegDxuSZpw –

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