识别 MSSQL Service Broker 发送方错误消息

Recognizing MSSQL Service Broker sender side error messages

我通过网络在两台服务器之间设置了 SQL Service Broker,它工作正常。我目前正在实施错误处理。我已将存储过程附加到两个队列以处理消息。

在发送邮件失败的情况下,例如尝试发送格式错误的 XML,邮件将保留在发件人队列中。传输状态为

Service Broker received an error message on this conversation. Service Broker will not transmit the message; it will be held until the application ends the conversation.

使用select * from sys.transmission_queue查询队列(存储过程关闭调试)时,is_conversation_erroris_end_of_dialog字段为0message_type_name为与我发送时使用的相同,而不是通常的错误类型。

有没有办法识别队列中的此类消息?我的自动发件人队列目前正在将它们作为普通邮件处理。

格式错误的 XML 错误将向您的对话框发回一条错误消息。这将在您的应用程序队列中排队并且您的应用程序必须处理它,因为它必须处理其队列中的任何错误消息。

请注意,您将 sender 队列与 transmission_queue 混淆了。发件人队列是使用 CREATE QUEUE 创建的普通队列,并且是与您的发送服务关联的队列。我所说的错误消息存放在您的发件人队列中,您可以使用 RECEIVE 检索它。 transmission_queue 是系统拥有的内部 table,其中包含待发送的消息。您不能 RECEIVE 来自 transmission_queue.

从您的 post 来看,我猜您的应用程序缺少对发件人队列中消息的处理。即使您的逻辑消息流总是从服务 'A' 到服务 'B',您 也必须 对 'A' 服务队列进行消息处理。不出意外的话,处理错误还是很有必要的。