Информация об изменениях

Сообщение Re[2]: masstransit и rabbitmq от 09.02.2021 19:32

Изменено 11.02.2021 1:21 VladD2

Re[2]: masstransit и rabbitmq
Здравствуйте, 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 тоже самое. не работает.
Re[2]: masstransit и rabbitmq
Здравствуйте, 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 тоже самое. не работает.