Всех приветствую. Давно не писал сообщений.
Столкнулся со странной проблемой и не могу нагуглить.
Если делать передачу RabbitMQ на прямую всё работает.
А вот через Masstransit при публикации получаю System.OperationCanceledException.
Этот же код на другом компьютере работает.
Может есть кто разбирающийся?
Здравствуйте, Sharov, Вы писали:
S>Тут бы какой-нибудь лог, стек исключения.
//Простой пример отправки сообщения через masstransit который не работает у меня.
public class test12
{
public Int64 id { get; set; }
public string name { get; set; }
}
public static async Task Main()
{
var busControl = Bus.Factory.CreateUsingRabbitMq(cfg =>
{
cfg.Host(new Uri("rabbitmq://localhost"), h =>
{
h.Username("guest");
h.Password("guest");
});
});
var source = new CancellationTokenSource(TimeSpan.FromSeconds(100));
var h = await busControl.StartAsync(source.Token);
try
{
Console.WriteLine("Enter message (or quit to exit)");
while (true)
{
var value = await Task.Run(() => { Console.Write("> "); return Console.ReadLine(); });
if ("quit".Equals(value, StringComparison.OrdinalIgnoreCase)) break;
await busControl.Publish<test12>(new { name = value });
}
} catch (Exception ee)
{
Console.WriteLine(ee.ToString());
} finally
{
await busControl.StopAsync();
}
}
//Простой получатель это отдельное консольное приложение
public static async Task Main()
{
var busControl = Bus.Factory.CreateUsingRabbitMq(cfg =>
{
cfg.Host(new Uri("rabbitmq://localhost"), h =>
{
h.Username("guest");
h.Password("guest");
});
cfg.ReceiveEndpoint("my-test", e => { e.Consumer<EventConsumer>(); });
});
var source = new CancellationTokenSource(TimeSpan.FromSeconds(10));
await busControl.StartAsync(source.Token);
try
{
Console.WriteLine("Press enter to exit");
await Task.Run(() => Console.ReadLine());
} finally
{
await busControl.StopAsync();
}
}
class EventConsumer : IConsumer<test12>
{
public async Task Consume(ConsumeContext<test12> context)
{
Console.WriteLine($"{context.Message.id} Value: {context.Message.name}");
}
}
// окне вывод приложения отправки пишет Вызвано исключение: "System.OperationCanceledException" в System.Private.CoreLib.dll
// естественно до получателя ничего не доходит.
// простейшее обращение к ребиту на прямую работает и данные доходят.
var factory = new ConnectionFactory() { HostName = "localhost" };
using (var connection = factory.CreateConnection())
using (var channel = connection.CreateModel())
{
channel.QueueDeclare(queue: "hello", durable: false, exclusive: false, autoDelete: false, arguments: null);
Console.WriteLine("Enter message (or quit to exit)");
while (true)
{
var value = await Task.Run(() =>
{
Console.Write("> ");
return Console.ReadLine();
});
if ("quit".Equals(value, StringComparison.OrdinalIgnoreCase)) break;
//var ep = await busControl.GetSendEndpoint(new Uri("rabbitmq://localhost/my_queue"));
//await ep.Send<test>(new { id = 1, name = value });
try
{
var body = Encoding.UTF8.GetBytes(value);
channel.BasicPublish(exchange: "", routingKey: "hello", basicProperties: null, body: body);
} catch { }
}
}
Console.ReadLine();
// пробовал через EasyNetQ тоже самое. не работает.
Здравствуйте, Kulibin, Вы писали:
K>K>//Простой пример отправки сообщения через masstransit который не работает у меня.
K>
Пользуйся кодами форматирования, пожалуйста!