내가 MassTransit 및 RabbitMQ 주위에 내 머리를 얻으려고 노력하고 대기하고 작동하기 위해서는 (1 일)신참 - 출판 MassTransit
내가 가진 질문은 "소비자가 필요 여부를 소비자 대기열 필요한가 MT에서 대기열을 작동시키기 위해서입니다. 내가 묻는 이유는 처음에 Domain과 Producer를 만들었지 만 RabbitMQ 관리 창에 대기중인 항목이 표시되지 않았기 때문입니다. "
소비자 대기열이 생성되면 대기중인 메시지를 볼 수 있습니다.
내 이해를 바탕으로 제작자는 소비자를 전혀 알지 못하므로 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; }
}
}
토륨 e 소비자 서비스
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);
}
}
}
코드는 웹상의 예를 사용하여 작성되었습니다.
편집 또한 모든 네임 스페이스가 다른 프로젝트 도메인 생산자 소비자
감사합니다,
월
난 그냥 거기에 구글 그룹 내 질문에 대한 답이 묻는 질문 중 하나에 있음을 발견했다. https://groups.google.com/forum/?fromgroups=#!searchin/masstransit-discuss/publishing$20message$20without$20subscriber/masstransit-discuss/RU2_443iak8/OfILeKbfGNQJ – TheMar
이 질문을 오늘 휴무로 표시하여 Google 그룹에 위의 링크가 계속 표시됩니다. – TheMar