2013-03-18 22 views
9

tôi đang cố gắng để có được đầu của tôi xung quanh MassTransit và RabbitMQ và xếp hàng (ngày 1)Newbie - Là một Queue tiêu dùng cần thiết để cho xuất bản để làm việc trong MassTransit

Các câu hỏi tôi có được xem một "người tiêu dùng là cần thiết để xếp hàng để làm việc trong MT. Lý do tôi hỏi là vì lần đầu tiên tôi tạo Miền và Nhà sản xuất nhưng tôi không thấy bất kỳ mục hàng đợi nào trong cửa sổ quản lý RabbitMQ. "

Khi hàng đợi của người tiêu dùng được tạo sau đó tôi có thể thấy thông báo đang được xếp hàng đợi.

Dựa trên sự hiểu biết của tôi, Nhà sản xuất không bao giờ nhận thức được người tiêu dùng, vậy tại sao MassTransit yêu cầu hàng đợi của người tiêu dùng để bắt đầu xuất bản tin nhắn?

Các nhà sản xuất

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" }); 
     } 
    } 
} 

Đơn

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; 
      } 
     } 
    } 
} 

The Message

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

Th e Dịch vụ tiêu dùng

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); 
     } 
    } 
} 

mã được tạo bằng cách sử dụng các ví dụ trên web.

Sửa cũng muốn thêm rằng tất cả các không gian tên là các dự án khác nhau miền Nhà sản xuất Consumer

Kính trọng,

Mar

+0

Tôi chỉ phát hiện ra rằng có một nhóm Google và câu trả lời cho câu hỏi của tôi là trong một trong những câu hỏi đó. https://groups.google.com/forum/?fromgroups=#!searchin/masstransit-discuss/publishing$20message$20without$20subscriber/masstransit-discuss/RU2_443iak8/OfILeKbfGNQJ – TheMar

+0

Tôi sẽ đánh dấu câu hỏi này là đóng cửa ngay hôm nay để liên kết ở trên với nhóm google vẫn hiển thị được – TheMar

Trả lời

7

Những câu trả lời sau đây về masstransit-discus thực sự giúp tôi.

Từ Google Group masstransit-thảo luận

... Điều với MassTransit là bạn không thực sự xuất bản vào một hàng đợi, bạn xuất bản để một cuộc trao đổi mà sau đó được thiết lập để vượt qua thông điệp rằng trên đến các hàng đợi khác đã đăng ký tin nhắn trên trao đổi đó. Vì bạn không có bất kỳ người tiêu dùng nào, nên không ai tỏ ra quan tâm đến thông điệp của bạn vì vậy nó sẽ bị bỏ qua.

Vì vậy, chỉ cần thiết lập người tiêu dùng và yêu cầu họ nghe "rabbitmq: // localhost/B". Lần đầu tiên bạn chạy nó, nó sẽ tạo ra sự trao đổi và liên kết cần thiết giữa họ, và thông điệp của bạn sẽ được chuyển đến một hàng đợi tên B.

Anders

Một chiếc xe buýt là bộ sưu tập của tất cả các sàn giao dịch, hàng đợi và dịch vụ cùng nhau. Khi bạn xuất bản trên một xe buýt, tất cả người tiêu dùng đăng ký trên xe buýt đó sẽ nhận được nó.

Trao đổi là việc triển khai RabbitMQ thực hiện công việc này.

Travis

+0

Liên kết tới cuộc thảo luận cụ thể này của Nhóm Google (rất hữu ích!): https://groups.google.com/forum/#!topic/masstransit-discuss/6cegDxuSZpw –

Các vấn đề liên quan