我通过网络在两台服务器之间建立了SQL Service Broker,它运行正常。我正在实现错误处理。我有两个队列的存储过程来处理消息。
如果发送邮件失败,例如尝试发送格式错误的XML时,邮件将保留在发件人队列中。传输状态为
Service Broker收到有关此对话的错误消息。服务 经纪人不会传递信息;它会一直持续到 应用程序结束了对话。
使用select * from sys.transmission_queue
查询队列(关闭存储过程以进行调试)时,is_conversation_error
和is_end_of_dialog
字段为0
且message_type_name
相同我在发送时使用的,而不是通常的错误类型。
有没有办法识别队列中的此类消息?我的自动发送方队列目前正在将它们作为普通消息处理。
答案 0 :(得分:1)
格式错误的XML错误会向您的对话框发送错误消息。这将在您的应用程序队列中排队,您的应用程序必须处理它,因为它必须处理其队列中的任何错误消息。
请注意,您将发件人队列与transmission_queue
混淆。发件人队列是使用CREATE QUEUE
创建的普通队列,是与您的发送服务关联的队列。我正在谈论的错误消息存储在您的发件人队列中,您可以使用RECEIVE
检索它。 transmission_queue
是系统拥有的内部表,其中包含待发送的邮件。您不能RECEIVE
中的transmission_queue
。
从您的帖子判断,我猜您的应用程序缺少发件人队列中的邮件处理。即使您的逻辑消息流始终从服务“A”到服务“B”,您也必须对“A”服务队列进行消息处理。如果不出意外,就有必要处理错误。