c# - Rebus RabbitMQ 无法订阅

标签 c# rabbitmq rebus

我正在尝试使用 RabbitMQ 重新调用以检索我已成功发布到消息队列的消息。我没有做的事情需要做。下面是示例代码?

static async Task MainSubscribeAsync()
        {

            var connection = "amqp://jhgj67546:yjyj5565@localhost";

            using (var activator = new BuiltinHandlerActivator())
            {
                activator.Register(() => new WagonHandler());

                var bus = Configure.With(activator)
                    .Logging(l => l.ColoredConsole())
                    .Transport(t => t.UseRabbitMq(connection, "wagon_v1")
                        .ExchangeNames(directExchangeName: "WamosExchange"))
                    .Start();

                await activator.Bus.Subscribe<Wagon>();

                Console.WriteLine("Done");
            }
        }

处理程序类如下所示

class WagonHandler : IHandleMessages
    {
        public async Task Handle(Wagon message)
        {
            Console.WriteLine($"Token {message.Token}");
            Console.WriteLine($"WagonId {message.WagonId}");
        }
    }

最佳答案

这段代码

static async Task MainSubscribeAsync()
{

    var connection = "amqp://jhgj67546:yjyj5565@localhost";

    using (var activator = new BuiltinHandlerActivator())
    {
        activator.Register(() => new WagonHandler());

        var bus = Configure.With(activator)
            .Logging(l => l.ColoredConsole())
            .Transport(t => t.UseRabbitMq(connection, "wagon_v1")
                .ExchangeNames(directExchangeName: "WamosExchange"))
            .Start();

        await activator.Bus.Subscribe<Wagon>();

        Console.WriteLine("Done");
    }
}

启动总线,建立订阅,然后立即关闭,因为 BuiltinHandlerActivator 已释放。

这意味着您可能很幸运,可能会收到一些消息,但在大多数情况下您可能不会:)

您应该改为在应用程序启动时配置总线,然后在应用程序的整个生命周期内将其作为单例实例(如 the wiki page about Rebus' instance policies 中所述),仅在应用程序关闭时处理它。

关于c# - Rebus RabbitMQ 无法订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45856737/

相关文章:

c# - 非常奇怪且严重的多线程不一致问题c#

node.js - 在node.js中使用RabbitMQ的nservicebus : a non-empty message_id property is required

RabbitMQ:忽略 prefetch() 会导致数据并发吗?

c# - 在C#中的rabbit Mq中获取xDeath中队列消息的最大重试次数

c# - Rebus 中未处理的随机消息

C# - String.Split() 删除最后一项

c# - 如何设置电源设置关闭 : never (turn off the display= never, 让计算机进入休眠状态 = 从不),通过 c# 代码

c# - Windows 手机 8 : how to include image in sample photos?

c# - 通知消息的所有消费者

servicebus - 拓扑澄清