Neu in MassTransit und immer noch mit einigen der Tutorial-Projekte herumspielen. Ich werde einen Service haben, der für vielleicht 20 Minuten läuft und ich muss etwas tun, wenn es fertig ist. Weil es so lange dauern kann, möchte ich dem Anfrage/Antwort-Muster nicht folgen und auf die Antwort warten, indem ich den Thread hochhebe. Ich denke, meine andere Option ist das Erstellen einer anderen Warteschlange nur für den Verbraucher zu veröffentlichen, wenn der Job erledigt ist. Ich habe diesen Beitrag angesehen: MassTransit3 how to make request from consumer, aber ich bin mir nicht sicher, wie dies zu implementieren ist. Meine Projekte, wieder aus this Tutorial, sieht wie folgt aus:MassTransit: Erstellen einer Rückrufwarteschlange in Consumer
Verlag:
static void Main(string[] args)
{
var bus = Bus.Factory.CreateUsingRabbitMq(x =>
x.Host(new Uri("rabbitmq://localhost/"), h => {}));
var busHandle = bus.Start();
var text = ""'
Console.WriteLine("Publisher");
while(text != "quit")
{
Console.Write("Enter a message: ");
text = Console.ReadLine();
var message = new SomethingHappenedMessage()
{
What = text,
When = DateTime.Now
}
bus.Publish(message);
}
busHandle.Stop();
}
Abonnenten:
static void Main(string[] args)
{
var bus = Bus.Factory.CreateUsingRabbitMq(x =>
{
var host = x.Host(new Uri("rabbitmq://localhost"), h => {});
x.ReceiveEndpoint(host, "MtPubSubExample_TestSubscriber", e =>
e.Consumer<SomethingHappenedConsumer>());
});
Console.WriteLine("Subscriber");
var busHandle = bus.Start();
Console.ReadKey();
busHandle.Stop();
}
Verbraucher:
class SomethingHappenedConsumer : IConsumer<ISomethingHappened>
{
public Task Consume(ConsumeContext<ISomethingHappened> context)
{
Console.Write("TXT: " + context.Message.What);
Console.Write(" SENT: " + context.Message.When);
Console.Write(" PROCESSED: " + DateTime.Now);
Console.WriteLine(" (" + System.Threading.Thread.CurrentThread.ManagedThreadId + ")");
return Task.FromResult(0);
}
}
Wie würde ich mich über eine Schaffung Rückruf-Warteschlange im Verbraucher?