获取azure deadletter信息并保存到cosmos db中

问题描述 投票:0回答:1

在一个项目中,我的要求是计算天蓝色的死信。如果计数大于0,那么我必须得到每个死信信息的详细信息,如描述或死信的原因并保存到cosmos db中。为了得到死信计数我正在使用代码:

NamespaceManager namespaceManager=Microsoft.ServiceBus.NamespaceManager.CreateFromConnectionString(sbConnectionString);    
var abc = namespaceManager.GetQueue("").MessageCountDetails;        
var deadLetterCount = messageDetails.DeadLetterMessageCount;    

并保存到cosmos db中,代码为:

 DocumentDBModel objItem = new DocumentDBModel();    
                objItem.DeadLetterReason = "TestReason";    
                objItem.DeadLetterDescription = "TestDescription";   
                objItem.DeadLetterDate = DateTime.Now;    
                objItem.Body = "TestBody";    
                DbSettings objSettings = new DbSettings();    
                objSettings.Uri = "";    
                objSettings.Key = "";    
                objSettings.DatabaseId = "TestDB";    
                objSettings.Collection = "TestCollection";        
                DocumentDBRepository<DocumentDBModel> abc = new  
       DocumentDBRepository<DocumentDBModel>(objSettings);    
                abc.CreateAsync(objItem).Wait();    

但是当我运行上面的代码时,我会遇到异常:

var abc = namespaceManager.GetQueue("").MessageCountDetails;    


<b> Method not found: 'Void System.Runtime.Serialization.DataContractSerializer..ctor(System.Type, System.Collections.Generic.IEnumerable`1<System.Type>, Int32, Boolean, Boolean, System.Runtime.Serialization.IDataContractSurrogate)'.
   at Microsoft.ServiceBus.Messaging.MessagingDescriptionSerializer`1.CreateSerializer[T]()
   at Microsoft.ServiceBus.Messaging.MessagingDescriptionSerializer`1..ctor()
   at Microsoft.ServiceBus.Messaging.ServiceBusResourceOperations.GetAsyncResult`1..ctor(TrackingContext trackingContext, IResourceDescription[] collectionDescriptions, String[] collectionResourceNames, IEnumerable`1 managementAddresses, NamespaceManagerSettings settings, TimeSpan timeout, AsyncCallback callback, Object state)
   at Microsoft.ServiceBus.NamespaceManager.OnBeginGetQueue(String path, AsyncCallback callback, Object state)
   at Microsoft.ServiceBus.NamespaceManager.GetQueue(String path)
   at WebApplication2.Controllers.ValuesController.Get() </b>

请说明这个问题可能是什么原因。 - 项目清单

c# asp.net .net azure asp.net-core
1个回答
1
投票

正如WindowsAzure.ServiceBus指出如下:

请注意,此软件包需要.Net Framework 4.5.2完整配置文件。

此外,我可能会遇到与使用WIndowsAzure.ServiceBus 2.1.0时提到的相同的问题。此外,我已经检查了其他版本,但最终失败了。

enter image description here

对于NetCore 2.0,您可以利用.NET Standard client library for Azure Service Bus并引用包Microsoft.Azure.ServiceBus。要检索死信队列,您可以按照此tutorial

我的要求是得到azure deadletter的数量。如果计数大于0,那么我必须得到每个死信信息的详细信息,如描述或死信的原因并保存到cosmos db中。

我注意到您在WebAPI端点中处理此处理。我建议您注册MessageReceiver.RegisterMessageHandler下提到的DeadletterQueue/Program.cs回调,然后将其作为.NET Core 2.x中的后台任务实现。您可以关注here的详细信息。

此外,您可以从Web应用程序中分发此处理。您可以利用WebJob来触发您的servicebus deadletter队列(例如,特定队列的deadletter队列名称如下所示:$"{your-queue-name}/$DeadLetterQueue")并使用DocumentDB绑定将deadletter队列信息保存到您的cosmos db中。细节,你可以参考How to use Azure Service Bus with the WebJobs SDKAzure WebJobs SDK Extensions

© www.soinside.com 2019 - 2024. All rights reserved.