【问题标题】:EasyNetQ want a listener to receive ALL messagesEasyNetQ 希望监听器接收所有消息
【发布时间】:2016-05-30 10:10:10
【问题描述】:

我想将每条消息都保存到我的数据库中。 直接在 RabbitMQ 中,我只需创建一个消费者来在我的主要/唯一交换中侦听主题“*”(任何内容)。

在 EasyNetQ 中,似乎每次我创建一个新的 Message 类时都必须在我的日志项目中添加一行。我想避免这种情况,所以无论我发送哪条消息,它都会在一个地方被提取并保存到数据库中,以备将来使用,而无需记住添加任何行。

我实现了自己的记录器

class MyLogger : IEasyNetQLogger
var logger = new MyLogger(); // implements IEasyNetQLogger
            _bus = RabbitHutch.CreateBus(Constants.ConnString, x => x.Register<IEasyNetQLogger>(_ => logger));

但收到的参数似乎只有 RoutingKey、CorrelationId、ConsumerTag、DliveryTag 和 Redelivered。但我(也)想要字符串/文本消息本身。

【问题讨论】:

    标签: .net rabbitmq easynetq


    【解决方案1】:

    您可以使用基类。如果你这样定义你的类:

    public class BaseMessage 
    {
        public string Message {get; set;}
    }
    

    并从此类中派生您创建的所有其他消息。所以你可以这样做:

    bus = RabbitHutch.CreateBus(Constants.ConnString, x => x.Register<BaseMessage>(_ => logger));
    

    现在,只要您从 BaseMessage 派生新消息,您就可以随时访问记录器中的 Message 属性

    【讨论】:

    • 感谢您的反馈。在您的示例中,“记录器”现在应该是 SuperMessage,而不是 IEasyNetQLogger。不确定如何使用上述代码实现记录器。
    • 对不起,我有点误解了你的问题。但是每次创建新消息时都需要在哪里添加一行?我在您发布的代码中看不到消息类?
    猜你喜欢
    • 2019-03-05
    • 1970-01-01
    • 1970-01-01
    • 2015-05-19
    • 2012-12-23
    • 2023-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多