当前位置: 首页 > 编程语言 > C#

Azure ServiceBus在Client.Receive()上返回null分享

时间:2023-04-10 12:32:05 C#

C#学习教程:AzureServiceBus在Client.Receive()上返回null我之前使用相同的代码成功地完成了此操作,但现在当我尝试获取消息时,我只是得到了null。当我在azure管理控制台中查看队列时,我清楚地看到该队列包含5条消息。这是代码:ServiceBusSB=newServiceBus();Microsoft.ServiceBus.Messaging.BrokeredMessage消息;while(true){message=SB.ReceiveMessage("orders");如果(消息==null){中断;}Procurement.Orderorder=message.GetBody();order.id=Guid.NewGuid().ToString();order.remindercount=0;使用(DbManagerdb=newDbManager()){if(db.SetSpCommand("CreateOrderHead",db.Parameter("@companyId",order.companyId),db.Parameter("@orderId",order.orderId),db.Parameter("@suppliercode",order.suppliercode),db.Parameter("@supplierorderId",order.supplierorderId),db.Parameter("@orderdate",order.orderdate),db.Parameter("@desireddate",order.desireddate),db.Parameter("@ordertext",order.ordertext),db.Parameter("@name",order.name),db.Parameter("@street",order.street),db.参数("@zip",order.zip),db.Parameter("@city",order.city),db.Parameter("@country",order.country),db.Parameter("@countrycode",order.国家代码),db.Parameter("@delivery术语",order.deliveryterms),db.Parameter("@reference",order.reference),db.Parameter("@deliveryinstruction",order.deliveryinstruction),db.Parameter("@id",order.id),db.Parameter("@partycode",order.partyCode)).ExecuteNonQuery()==1){message.Complete();message=null;}db.SetSpCommand("DeleteOrderRows",db.Parameter("@orderid",order.orderId),db.Parameter("@companyId",order.companyId)).ExecuteNonQuery();foreach(Procurement.Orderrowrinorder.Orderrows){db.SetSpCommand("CreateOrderRow",db.Parameter("@companyId",r.companyId),db.Parameter("@orderId",r.orderId),db.Parameter("@orderrowId",r.orderrowId),db.Parameter("@itemId",r.itemId),db.Parameter("@itemdesc",r.itemdesc),db.Parameter("@orderqty",r.orderqty),db.Parameter("@desireddate",r.desireddate),db.Parameter("@rowtext",r.rowtext),db.Parameter("@supplieritemId",r.supplieritemId),db.Parameter("@unit",r.unit),db.Parameter("@id",order.id),db.Parameter("@unitprice",r.unitprice),db.Parameter("@rowprice",r.rowprice)).ExecuteNonQuery();}}}Thread.Sleep(newTimeSpan(0,1,0));这是ServiceBus类:公共类ServiceBus{TokenProviderTokenProvider;MessagingFactoryFactory;publicServiceBus(){TokenProvider=TokenProvider.CreateSharedSecretTokenProvider(GetIssuerName(),GetSecret());Factory=MessagingFactory.Create(GetURINameSpace(),TokenProvider);}publicvoidSendMessage(stringqueue),BrokeredMessage消息){varclient=Factory.CreateQueueClient(queue);client.Send(message);}publicBrokeredMessageReceiveMessage(stringqueue){varclient=Factory.CreateQueueClient(queue,ReceiveMode.ReceiveAndDelete);BrokeredMessagemessage=client.Receive();returnmessage;}privatestaticUriGetURINameSpace(){returnServiceBusEnvironment.CreateServiceUri("sb",GetNamespace(),string.Empty);}privatestaticstringGetNamespace(){return"命名空间我已经验证它的权利一个”;}私人atestaticstringGetIssuerName(){return"Issuerihaveverifieditstherightone";}}}privatestaticstringGetSecret(){return“密钥我已经验证它是正确的”;我认为这应该非常简单,但我不知道我做错了什么可能是一些小事,我很抱歉......无论如何提前致谢!您在SubcriptionDescription.MessageCount中看到的那些BrokeredMessages不仅仅是常规消息,而是$DeadLetterQueue-sub队列中的消息计数!使用此代码段从该子队列中检索所有消息并打印出它们的详细信息。将[topic]和[subscription]重命名为您的实际内容:MessagingFactorymsgFactory=MessagingFactory.Create(_uri,_tokenProvider);MessageReceivermsgReceiver=msgFactory.CreateMessageReceiver([主题]/订阅/[订阅]/$DeadLetterQueue",ReceiveMode.PeekLock);while(true){BrokeredMessagemsg=msgReceiver.Receive();if(msg!=null){Console.WriteLine("死信消息。");Console.WriteLine("MessageId:{0}",msg.MessageId);Console.WriteLine("DeliveryCount:{0}",msg.DeliveryCount);Console.WriteLine("EnqueuedTimeUtc:{0}",msg.EnqueuedTimeUtc);Console.WriteLine("大小:{0}字节",msg.Size);Console.WriteLine("DeadLetterReason:{0}",msg.Properties["DeadLetterReason"]);Console.WriteLine("DeadLetterErrorDescription:{0}",msg.Properties["DeadLetterErrorDescription"]);控制台.WriteLine();味精.完成();这个问题的解决方案是azure管理门户中的一个错误,该错误显示队列中的消息数量错误,或者消息以某种方式标记为不会被读取。换句话说,它一直在工作,我只需要向队列中添加一些新消息。以上是C#学习教程:AzureServiceBus在Client.Receive()上返回null分享所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文来自网络收集,不代表作品如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处: