【发布时间】:2020-01-27 19:54:18
【问题描述】:
目前我正在处理从本地私有 MSMQ 接收消息的寡妇服务。队列是事务性的。
接收是这样完成的:
public void ReceiveAndSaveData(MessageQueue queue, MsmqDbContext context)
{
var message = new Message();
try
{
using (var tx = new MessageQueueTransaction())
{
tx.Begin();
message = queue.Receive(tx);
var bodyReader = new StreamReader(message.BodyStream);
var jsonBody = bodyReader.ReadToEnd();
var messageData = JsonConvert.DeserializeObject<QueueMessage>(jsonBody);
/*THERE IS SOME DATA PROCESSING*/
tx.Commit();
}
}
catch (JsonSerializationException e)
{
Logger.WriteError(new LogDetail("Error occured during deserializing incoming data.", e, message.Id));
}
catch (Exception e)
{
Logger.WriteError(new LogDetail("Error occured during saving data to database", e, message.Id));
}
}
如果发生 JsonSerializationException,我想从当前队列中删除这条消息。有人知道如何解决这个问题吗?
【问题讨论】:
-
MSDN try-catch-finally。在适当的捕获中,删除消息并在 finally 块中执行提交。
-
将 try catch 移入 using 语句并 try tx.Abort();在失败的情况下。
-
但是在这种情况下你能分享如何从队列中删除当前消息的代码吗?