masstransit и rabbitmq
От: Kulibin  
Дата: 09.02.21 15:08
Оценка:
Всех приветствую. Давно не писал сообщений.

Столкнулся со странной проблемой и не могу нагуглить.
Если делать передачу RabbitMQ на прямую всё работает.
А вот через Masstransit при публикации получаю System.OperationCanceledException.

Этот же код на другом компьютере работает.

Может есть кто разбирающийся?
Re: masstransit и rabbitmq
От: Слава  
Дата: 09.02.21 16:20
Оценка: +1
Здравствуйте, Kulibin, Вы писали:

K>Может есть кто разбирающийся?


Похоже на ошибку в конфигурации. Не тот хост, не тот порт.
Re: masstransit и rabbitmq
От: Sharov Россия  
Дата: 09.02.21 17:19
Оценка:
Здравствуйте, Kulibin, Вы писали:

K>Этот же код на другом компьютере работает.

K>Может есть кто разбирающийся?

Тут бы какой-нибудь лог, стек исключения.
Кодом людям нужно помогать!
Re[2]: masstransit и rabbitmq
От: Kulibin  
Дата: 09.02.21 19:32
Оценка:
Здравствуйте, 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 тоже самое. не работает.
Отредактировано 11.02.2021 1:21 VladD2 . Предыдущая версия .
Re[3]: masstransit и rabbitmq
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.02.21 01:22
Оценка:
Здравствуйте, Kulibin, Вы писали:

K>
K>//Простой пример отправки сообщения через masstransit который не работает у меня.
K>

Пользуйся кодами форматирования, пожалуйста!
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.