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

时间:2016-07-18 12:25:17

标签: sql-server service-broker

我通过网络在两台服务器之间建立了SQL Service Broker,它运行正常。我正在实现错误处理。我有两个队列的存储过程来处理消息。

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

  

Service Broker收到有关此对话的错误消息。服务   经纪人不会传递信息;它会一直持续到   应用程序结束了对话。

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

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

1 个答案:

答案 0 :(得分:1)

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

请注意,您将发件人队列与transmission_queue混淆。发件人队列是使用CREATE QUEUE创建的普通队列,是与您的发送服务关联的队列。我正在谈论的错误消息存储在您的发件人队列中,您可以使用RECEIVE检索它。 transmission_queue 是系统拥有的内部表,其中包含待发送的邮件。您不能RECEIVE中的transmission_queue

从您的帖子判断,我猜您的应用程序缺少发件人队列中的邮件处理。即使您的逻辑消息流始终从服务“A”到服务“B”,您也必须对“A”服务队列进行消息处理。如果不出意外,就有必要处理错误。