我在MSDN中阅读了MessageQueueTransaction,但我找不到任何有关超时的信息。如果提交或中止从未被调用会发生什么?在交易开放和发布之间的交易是否存在某种超时?
答案 0 :(得分:1)
这是一个内部事务,因此不涉及MSDTC(确实有超时)。 我相信该事务将存在,直到您的应用程序调用commit或abort。 如果应用程序失败或退出而没有调用,那么我希望MSMQ为您中止事务。
您是否有特定问题或只是好奇?
干杯
John Breakwell
答案 1 :(得分:0)
谢谢约翰!我刚刚创建了一个WCF服务,它接收来自MSMQ的消息并将它们发送回远程客户端。客户端可以请求x个消息。
客户端首先调用服务以启动事务。 该服务将其堆叠在具有GUID的集合中。该guid被发送回客户端,客户端将使用它来进行所有其他服务调用。因此,服务可以找到相应的事务并将其与Receive()一起使用。
在客户端完成所有工作后,它会调用一个带有GUID的Terminate(bool commit)方法,该GUID在事务上调用Commit或Abort。但是,如果由于客户端崩溃或网络崩溃而无法调用提交或中止,会附加什么?这是我的担忧......
我基本上这样做是因为MSMQ 3不支持远程事务(仅限MSMQ 4)。
答案 2 :(得分:0)
答案在于MSMQ本身的内部ACK消息传递。因此,要回答您的问题,毫无疑问,如果您在检索后不提交或中止使用事务的消息,它实际上将回滚。这就是如何处理掉电事件等。
在事务中发送消息时,除非依赖于超时参数,否则接收方无法确认收到消息可能最终导致该字母进入死信队列。您可以随时重新处理这些 - 但您是否愿意取决于您正在构建的系统类型。
----每个MSDN https://msdn.microsoft.com/en-us/library/ms699870(v=vs.85).aspx
当应用程序请求肯定和否定确认消息时,可以获得有关消息发送操作的最终结果的附加信息。有关请求确认消息的更多信息,请参阅确认消息。
https://msdn.microsoft.com/en-us/library/ms707129(v=vs.85).aspx
希望有所帮助。