【发布时间】:2016-07-21 09:58:24
【问题描述】:
我一直在使用 MassTransit 和 RabbitMQ.Client NuGet 包将消息发布到我的 RabbitMQ 队列。这几个月来一直很好。突然之间(没有代码更改),我无法再创建 ServiceBus。这是我使用了几个月的代码:
public class RabbitBus
{
private IServiceBus bus;
public void Start(Action<ServiceBusConfigurator> moreInitialization)
{
const string host = "rabbitmq://localhost/testqueue";
bus = ServiceBusFactory.New(x =>
{
x.UseRabbitMq(r =>
{
r.ConfigureHost(new Uri("rabbitmq://localhost/testqueue"), h =>
{
h.SetUsername("user");
h.SetPassword("password");
});
});
x.ReceiveFrom(host);
moreInitialization(x);
});
}
public void Stop()
{
bus.Dispose();
}
public void Publish<T>(T message)
{
bus.Publish(message, x => { x.SetDeliveryMode(DeliveryMode.Persistent); });
}
}
然后我会发布这样的消息:
var bus = new RabbitBus();
bus.Start((x) => {});
bus.Publish("Test");
bus.Stop();
就像我说的,这段代码已经好几个月了。就在昨天,我在通过 ServiceBusFactory.New 调用创建 ServiceBus 时开始收到 System.TypeInitializationException。
MassTransit.dll 中出现“System.TypeInitializationException”类型的未处理异常
附加信息:“MassTransit.Monitoring.ServiceBusPerformanceCounters”的类型初始化程序引发了异常。
试图读取或写入受保护的内存。这通常表明其他内存已损坏。
这里是 StackTrace:
- 在 Microsoft.Win32.Win32Native.RegQueryValueEx(SafeRegistryHandle hKey, String lpValueName, Int32[] lpReserved, Int32& lpType, Byte[] lpData, Int32& lpcbData)
- 在 Microsoft.Win32.RegistryKey.InternalGetValue(String name, Object defaultValue, Boolean doNotExpand, Boolean checkSecurity)
- 在 Microsoft.Win32.RegistryKey.GetValue(String name)
- 在 System.Diagnostics.PerformanceMonitor.GetData(String item)
- 在 System.Diagnostics.PerformanceCounterLib.GetPerformanceData(String item)
- 在 System.Diagnostics.PerformanceCounterLib.get_CategoryTable()
- 在 System.Diagnostics.PerformanceCounterLib.CounterExists(String category, String counter, Boolean& categoryExists)
- 在 System.Diagnostics.PerformanceCounterLib.CounterExists(String machine, String category, String counter)
- 在 System.Diagnostics.PerformanceCounterCategory.CounterExists(String counterName, String categoryName, String machineName)
- 在 System.Diagnostics.PerformanceCounterCategory.CounterExists(String counterName, String categoryName)
- 位于 d:\BuildAgent\work\aa063b4295dfc097\src\MassTransit\Monitoring\ServiceBusPerformanceCounters.cs:151 行中的 MassTransit.Monitoring.ServiceBusPerformanceCounters.b__1(RuntimePerformanceCounter 计数器)
- 在 System.Linq.Enumerable.WhereArrayIterator`1.MoveNext()
- 在 System.Linq.Enumerable.Count[TSource](IEnumerable`1 源)
- 在 MassTransit.Monitoring.ServiceBusPerformanceCounters.InitiatizeCategory() 中的 d:\BuildAgent\work\aa063b4295dfc097\src\MassTransit\Monitoring\ServiceBusPerformanceCounters.cs:150 行
- 在 MassTransit.Monitoring.ServiceBusPerformanceCounters..ctor() 中的 d:\BuildAgent\work\aa063b4295dfc097\src\MassTransit\Monitoring\ServiceBusPerformanceCounters.cs:91 行
- 在 MassTransit.Monitoring.ServiceBusPerformanceCounters..cctor() 中的 d:\BuildAgent\work\aa063b4295dfc097\src\MassTransit\Monitoring\ServiceBusPerformanceCounters.cs:第 30 行
我已经在 StackOverflow 和其他网站上挖掘了几个小时,但没有取得任何进展。如果有人有任何见解,我很乐意提供帮助。谢谢!
【问题讨论】:
-
您是刚开始使用 MassTransit 吗?如果是这种情况,我强烈建议从 v3 开始。
标签: c# exception rabbitmq masstransit