如何向现有合约添加新邮件类型?
存在 CREATE CONTRACT
和DROP CONTRACT
命令,但没有ALTER
命令。
答案 0 :(得分:5)
ALTER CONTRACT
由于遗漏而不是错误,缺少设计。这就像要求更改COM接口一样:不受支持,因为接口是合同。如果一方更改了界面,它会破坏合同,并在调用错误的v-table条目时导致另一方崩溃。在Service Broker设计中应用了完全相同的推理:一方无法更改(ALTER
)合同并开始发送另一方不期望的新消息,这将导致其崩溃(消息处理过程中的错误) )。 合同是不可改变的。
如果您说'但我可以ALTER
另一方也是'那么您没有考虑真实用例,而另一方是远程的并且通常处于不同的行政控制之下并且不愿意更改其合同( S)。即使可以进行更改,部署需要多方推出新位的分布式更改也只是要求(不必要的!)停机时间。
通信模式的更改必须部署为 new 合同。服务可以实现多个合同,并且支持向服务添加新合同(通过ALTER SERVICE
) 。分布式应用程序的更改通过部署新合同(同时仍支持旧合同,然后退出旧合同(即重叠))推出。
答案 1 :(得分:0)
来自here: -
对此的一个糟糕的解决方法是将所有更改版本化为新的 合同,但这将需要一个额外的服务和队列和 现有的对话将无法从新的对话中受益 消息类型。
我强烈建议支持alter contract命令,但也要添加 支持SSDT发出alter命令而不是drop / create。
我高度重新考虑这个要求。或者至少:添加支票 无论何时进行任何对话,都会从SSDT中引发错误消息 在放入之前使用该服务和/合同的存在 类似于SSDT之前检查表中现有数据的方式 放下桌子。这至少有助于提高对此的认识 副作用,可以防止部署问题。