簡體   English   中英

SQL Server Broker:如何修改合同?

[英]SQL Server Broker: How to modify contract?

如何在現有合同中添加新的消息類型?

存在CREATE CONTRACTDROP CONTRACT命令,但沒有ALTER命令。

由於遺漏, ALTER CONTRACT無效,設計上遺漏了該內容 這就像要求更改COM接口:不支持,因為該接口是一個contract 如果一方更改了接口,則會破壞合同,並在調用錯誤的v-table條目時導致另一方崩潰。 在Service Broker設計中使用了完全相同的推理:一方無法更改( ALTER )合同並開始發送另一方不希望的新消息,這將導致它崩潰(消息處理過程中的錯誤)。 合同是一成不變的

如果您說“但我也可以ALTER另一方”,那么您就不在考慮真實的用例,因為另一方是遠程的,通常處於不同的管理控制之下,不願意更改其合同。 即使有可能進行更改,部署需要許多方面才能推出新功能的分布式更改也只是要求停機(不必要!)。

通信模式的更改必須作為合同部署。 服務可以實現多個合同,並增加了新的合同服務(通過ALTER SERVICE支持。 通過在仍然支持舊合同的同時部署新合同來推出分布式應用程序中的更改,然后淘汰舊合同(即重疊 )。

這里

不良的解決方法是將所有更改版本化為新合同,但這將需要額外的服務和隊列,並且現有對話將無法從新消息類型中受益。

我強烈建議您支持alter contract命令,但同時也增加了對SSDT的支持,以發出alter命令而不是drop / create。

我高度重視此要求。 或至少是:在刪除之前,只要存在使用該服務和/合同的任何對話,就添加一條從SSDT發出的檢查和錯誤消息,類似於在刪除所述表之前,SSDT在表中檢查現有數據。 這至少將有助於提高對這種副作用的認識,並避免部署方面的麻煩。

暫無
暫無

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

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