发送方是A_Service 接收方是B_Service 
现在A_Service发送了消息到队列Queue 成功发送 事务提交 
B_Service在接收A_Service消息之后,后续操作异常,那么Queue中A_Service发的消息会被移除吗? 

解决方案 »

  1.   

    因为所有 Service Broker 操作都在数据库事务环境中发生,所以保证了消息传送操作的 事务完整性。典型的 Service Broker 消息处理事务包括以下步骤: 1.
     开始事务。 
     
    2.
     从会话组中接收一条或多条消息。 
     
    3.
     从状态表中检索会话的状态。 
     
    4.
     处理消息并根据消息内容对应用程序数据进行一项或多项更新。 
     
    5.
     发送一些 Service Broker 消息:即,将响应发送到传入的消息或将消息发送到处理传入消息所需的其他服务。 
     
    6.
     如果此会话组包含其他消息,则读取和处理此会话组中的其他消息。 
     
    7.
     使用新的会话状态更新会话状态表。 
     
    8.
     提交事务 
     Service Broker 事务性消息传送的一项重要功能是在任何时间如果崩溃或应用程序发生错误,事务将回滚并且一切都返回到事务开始时的状态,即状态不变、应用程序数据不变、消息未发送并且接收的消息返回到队列中。这使此类应用程序中的错误处理非常简单。