【发布时间】:2016-05-14 09:48:07
【问题描述】:
我在使用错误消息时遇到问题,它没有得到处理。 处理程序代码是:
internal class FaultConsumer : IConsumer<Fault<MyMessage>>
{
public Task Consume(ConsumeContext<Fault<MyMessage>> context)
{
var ctx = context;
var sourceMessage = ctx.Message.Message;
// ... processign
}
}
但如果我创建非通用消费者它可以正常工作,例如:
internal class FaultConsumerNonGeneric : IConsumer<Fault>
{
public Task Consume(ConsumeContext<Fault> context)
{
var ctx = context;
// here I cannot get source message
}
}
这是消费者注册码:
var errorBus = Bus.Factory.CreateUsingRabbitMq(ebs =>
{
var host = ebs.Host(new Uri("rabbitmq://localhost/"), h =>
{
h.Username("guest");
h.Password("guest");
});
ebs.ReceiveEndpoint(host, "error_handler", endpoint =>
{
endpoint.Consumer(ConsumerFault);
});
});
errorBus.Start();
在 adim 面板中,我在 error_handler 队列中看到许多类型的错误消息未传递到我的 FaultConsumer,但 MT 创建的 error_handler_error 队列包含错误:
see the screenshot
所以问题是我做错了什么?如何正确使用类型错误?谢谢。
rabbitmq 中的消息示例:
Content-Type: application/vnd.masstransit+json
MT-Reason: fault
MT-Fault-Message: Тип "DynamicInternal08d37bdc15c6c87e10c37bca6d210000.MassTransit.Fault<Consumer.MyMessage>" из сборки "MassTransitDynamicInternal08d37bdc15c6c87e10c37bca6d210000, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" пытается реализовать недоступный интерфейс.
MT-Fault-Timestamp: 2016-05-14T09:42:39.4976501Z
MT-Fault-StackTrace: в System.Reflection.Emit.TypeBuilder.TermCreateClass(RuntimeModule module, Int32 tk, ObjectHandleOnStack type)
в System.Reflection.Emit.TypeBuilder.CreateTypeNoLock()
в System.Reflection.Emit.TypeBuilder.CreateType()
в MassTransit.Internals.Reflection.DynamicImplementationBuilder.CreateTypeFromInterface(ModuleBuilder builder, Type interfaceType)
MT-Host-MachineName: SHARPCODER-PC
MT-Host-ProcessName: Consumer.vshost
MT-Host-ProcessId: 13024
MT-Host-Assembly: Consumer
MT-Host-AssemblyVersion: 1.0.0.0
MT-Host-MassTransitVersion: 3.3.2.641
MT-Host-FrameworkVersion: 4.0.30319.42000
MT-Host-OperatingSystemVersion: Microsoft Windows NT 6.2.9200.0
【问题讨论】:
-
如果您查看其中一条消息(在 RabbitMQ 控制台中使用 Get 消息),标题部分中显示的错误是什么?
-
我的消费者没有收到通用故障消息的问题
-
您发布的屏幕截图显示错误处理程序队列中的错误,我要求您查看其中一条消息的标头以了解为什么未使用错误消息。
-
对不起,先不明白。看题主,我发了一个错误
-
你能添加你的消息类定义吗?好像有什么东西不能创建,可能是内部的或者私有的,不能创建?
标签: c# .net rabbitmq masstransit