gpt4 book ai didi

rabbitmq - 是否有一种简单的方法可以订阅 EasyNetQ 中的默认错误队列?

转载 作者:行者123 更新时间:2023-12-03 22:27:47 24 4
gpt4 key购买 nike

在我的测试应用程序中,我可以看到处理异常的消息被自动插入到默认的 EasyNetQ_Default_Error_Queue 中,这很棒。然后我可以使用 Hosepipe 成功地转储或重新排队这些消息。 ,这也可以正常工作,但需要下降到命令行并同时调用 Hosepipe 和 RabbitMQ API 以清除重试消息的队列。

所以我认为我的应用程序最简单的方法是简单地订阅错误队列,这样我就可以使用相同的基础设施重新处理它们。但是在 EastNetQ 中,错误队列似乎很特别。我们需要使用正确的类型和路由 ID 进行订阅,所以我不确定错误队列的这些值应该是什么:
bus.Subscribe<WhatShouldThisBe>("and-this", ReprocessErrorMessage);
我可以使用简单的 API 来订阅错误队列,还是需要深入研究 advanced API ?

如果我的原始消息类型是 TestMessage ,那么我希望能够做这样的事情:
bus.Subscribe<ErrorMessage<TestMessage>>("???", ReprocessErrorMessage);
哪里ErrorMessage是 EasyNetQ 提供的用于包装所有错误的类。这可能吗?

最佳答案

您不能使用简单的 API 来订阅错误队列,因为它不遵循 EasyNetQ 队列类型命名约定 - 也许这是应该修复的;)

但是高级 API 工作正常。你不会得到原始消息,但很容易得到 JSON 表示,你可以很容易地反序列化自己(使用 Newtonsoft.JSON)。以下是您的订阅代码的示例:

[Test]
[Explicit("Requires a RabbitMQ server on localhost")]
public void Should_be_able_to_subscribe_to_error_messages()
{
var errorQueueName = new Conventions().ErrorQueueNamingConvention();
var queue = Queue.DeclareDurable(errorQueueName);
var autoResetEvent = new AutoResetEvent(false);

bus.Advanced.Subscribe<SystemMessages.Error>(queue, (message, info) =>
{
var error = message.Body;

Console.Out.WriteLine("error.DateTime = {0}", error.DateTime);
Console.Out.WriteLine("error.Exception = {0}", error.Exception);
Console.Out.WriteLine("error.Message = {0}", error.Message);
Console.Out.WriteLine("error.RoutingKey = {0}", error.RoutingKey);

autoResetEvent.Set();
return Task.Factory.StartNew(() => { });
});

autoResetEvent.WaitOne(1000);
}

在此之前,我必须在 EasyNetQ 中修复错误消息编写代码中的一个小错误,因此请在尝试之前获取版本 >= 0.9.2.73。你可以看到代码示例 here

关于rabbitmq - 是否有一种简单的方法可以订阅 EasyNetQ 中的默认错误队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15059083/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com