ServiceBroker - 什么是消息类型的意义?

时间:2017-01-17 17:28:06

标签: sql-server

任何人都可以告诉我一件事吗? 这是关于ServiceBroker https://gallery.technet.microsoft.com/scriptcenter/Using-Service-Broker-for-360c961a
按照这个简短的教程,我们可以遇到两个问题:

CREATE MESSAGE TYPE [//SBM/RequestMessage] VALIDATION=WELL_FORMED_XML;  
CREATE MESSAGE TYPE [//SBM/ReplyMessage] VALIDATION=WELL_FORMED_XML;  

这个东西的目的是什么?将消息分为两种类型有什么好处?第二件事:是否有可能检查队列是否被毒药禁用?我知道然后队列被阻止了,但我希望能够检查它。

1 个答案:

答案 0 :(得分:0)

我使用消息类型的一件事是知道如何处理消息而不必实际查看消息本身。假设我们正在创建一个系统来处理来自为HR和财务团队提供服务的不同应用程序的对话。您可以争辩说那些属于不同的队列,但我们假设所有这些消息都进入一个队列。在我用来从队列中出列消息的过程中,我会有这样的(简化): 声明@message_type_name sysname,@ message_body xml);

RECEIVE TOP (1)
    @message_type_name = [message_type_name],
    @message_body = CAST([message_body] AS XML)
FROM [repl].[CoreQueue]

IF (@message_type_name = 'TimeOffRequest')
    EXEC dbo.ProcessTimeOffRequest @message_body;
ELSE IF (@message_type_name = 'ReimbursementRequest')
    EXEC dbo.ProcessReimbursementRequest @message_body;

注意我在这里使用了一些反模式(RECEIVE一次只发送一条消息,没有错误处理等),为了清楚地了解你的实际问题。

因为我基于消息类型了解消息内容,所以我可以快速将消息路由到可以处理消息的内容。除此之外,还可以将消息类型捆绑到合同中,这些合同可以优先考虑代理优先级,并且您拥有相当灵活的系统。