using MassTransit;
using System;
using System.Threading.Tasks;
class Program
{
static void Main(string[] args)
{
var bus = Bus.Factory.CreateUsingRabbitMq(sbc =>
{
var host = sbc.Host(new Uri("rabbitmq://localhost"), h =>
{
h.Username("guest");
h.Password("guest");
});
sbc.ReceiveEndpoint(host, "TestQueue", endpoint =>
{
endpoint.Consumer<SampleConsumer>();
});
});
bus.Start();
for (int i = 0; i < 100; i++)
{
var bus1 = Bus.Factory.CreateUsingRabbitMq(sbc =>
{
var host = sbc.Host(new Uri("rabbitmq://localhost"), h =>
{
h.Username("guest");
h.Password("guest");
});
});
bus1.Start();
IRequestClient<MyMessage, Response> client =
new MessageRequestClient<MyMessage, Response>(bus1, new Uri("rabbitmq://localhost/TestQueue"), new TimeSpan(0, 0, 30));
var myMessage = new MyMessage { Guid = Guid.NewGuid(), Value = "Hello, World : " + i.ToString() };
using (Task<Response> task = client.Request(myMessage))
{
var result = task.Result;
Console.WriteLine($"Output for {myMessage.Value} is {result.Value};");
}
bus1.Stop();
}
Console.ReadLine();
}
}
public class MyMessage
{
public Guid Guid { get; set; }
public string Value { get; set; }
}
public class Response
{
public Guid Guid { get { return Guid.NewGuid(); } }
public DateTime Value { get { return DateTime.Now; } }
}
public class SampleConsumer : IConsumer<MyMessage>
{
public async Task Consume(ConsumeContext<MyMessage> context)
{
await Console.Out.WriteLineAsync($"Consumer : {context.Message.Value}");
var response = new Response();
context.Respond(response);
}
}