簡體   English   中英

使用netMSMQbinding的有序交付

[英]Ordered Delivery with netMSMQbinding

使用WCF netMSMQbinding時是否可以保證有序交付?

我們在同一隊列中放置了插入命令,后面跟着許多更新命令,並且偶爾有一個更新勝過插入。

添加了廣泛的日志記錄后,很明顯它們以正確的順序添加到隊列中並以不同的順序進行處理。

我已經在Google上寫了幾篇文章,指出這種行為是可以預期的,但是似乎必須可以將其配置為以某種方式進行排序。

我們的隊列是事務性的,所以我認為在目的地添加序列號和重新排序不會起作用,因為那樣會失去事務性

如果添加屬性[DeliveryRequirements(RequireOrderedDelivery=true, QueuedDeliveryRequirements=QueuedDeliveryRequirementsMode.Require)]出現以下錯誤:

合同“ IService”上的DeliveryRequirementsAttribute指定QueuedDeliveryRequirements值為NotAllowed。 但是,為此合同配置的綁定指定它確實支持排隊傳送。 隊列綁定不能與該合同一起使用。

我不知道為什么會出現此錯誤,因為一切“似乎”都已正確設置。 我尚未設法確認此設置允許用於MSMQ,因為它似乎是WS-RM設置,並且AFAIK netMSMQBinding不支持WS-RM。

MSMQ不支持有序交付,因此您不能。

看一下System.ServiceModel.Channels.MsmqBindingElementBase + BindingDeliveryCapabilitiesHelper,它是指定MSMQ的綁定功能的類,以及如何實現該屬性:

bool IBindingDeliveryCapabilities.AssuresOrderedDelivery
{
    get
    {
        return false;
    }
}

Simon Gittins的這則帖子似乎表明可以訂購送貨:

事實證明,有一個未記錄的功能可以處理這種情況:

  • 將批處理大小為ONE的TransactedBatchingBehavior應用於服務端點。
  • 必須在服務實現上將ReleaseServiceInstanceOnTransactionComplete設置為true。

完成這兩項操作后,我的測試程序將不再產生亂序消息。

看起來您可以對消息進行分組,因此可以在合同中指定訂單。 查閱有關分組消息的MSDN文章

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM