【问题标题】:Service Broker - How to response the message to different queueService Broker - 如何将消息响应到不同的队列
【发布时间】:2017-09-29 10:06:21
【问题描述】:

我是 Service Broker 的新手

消息类型

CREATE MESSAGE TYPE [http://ssb.csharp.at/SSB_Book/c03/RequestMessage]
VALIDATION = WELL_FORMED_XML
GO

CREATE MESSAGE TYPE [http://ssb.csharp.at/SSB_Book/c03/ResponseMessage]
    VALIDATION = WELL_FORMED_XML
GO

合同

CREATE CONTRACT [http://ssb.csharp.at/SSB_Book/c03/HelloWorldContract]
(
    [http://ssb.csharp.at/SSB_Book/c03/RequestMessage] SENT BY INITIATOR,
    [http://ssb.csharp.at/SSB_Book/c03/ResponseMessage] SENT BY TARGET
)
GO

队列

CREATE QUEUE InitiatorQueue
    WITH ACTIVATION
    (
        STATUS = ON,
        PROCEDURE_NAME = [ProcessResponseMessage],
        MAX_QUEUE_READERS = 1,
        EXECUTE AS SELF
    )

CREATE QUEUE TargetQueue
    WITH ACTIVATION
    (
        STATUS = ON,
        PROCEDURE_NAME = [ProcessRequestMessage],
        MAX_QUEUE_READERS = 1,
        EXECUTE AS SELF
    )

服务

CREATE SERVICE InitiatorService
ON QUEUE InitiatorQueue
(
    [http://ssb.csharp.at/SSB_Book/c03/HelloWorldContract]
)
GO

CREATE SERVICE TargetService
ON QUEUE TargetQueue
(
    [http://ssb.csharp.at/SSB_Book/c03/HelloWorldContract]
)
GO

上面的代码是示例。

问题是我想将消息响应到另一个队列(例如 ErrorQueue)而不是 InitiatorQueue。我在 Google 上进行了研究,但找不到与我的问题相关的任何资源。

我有一些想法,但不知道它是否有效:

  1. 在合约中添加另一个消息类型:
    [http://ssb.csharp.at/SSB_Book/c03/ErrorMessage] SENT BY INITIATOR
    但我不知道是否将其设置为 INITIATOR、TARGET 或 ANY
  2. 为其创建另一个合同,如果这是解决方案,请提供示例。

谢谢

【问题讨论】:

  • 我要的是解决方案,而不是代码。

标签: sql-server service-broker


【解决方案1】:

队列中处理消息的事物可以选择要做什么。如果要发送到不同的队列,则需要在不同的对话中发送,因为在与原始消息进入的对话相同的对话中发送会将其发送回发送消息的地方。您将需要另一种消息类型、合同、队列和服务来发送该错误消息。如果这还不足以让您继续前进,请告诉我,我可以进一步详细说明。

【讨论】:

  • 好的...我正在尝试
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-20
相关资源
最近更新 更多