【问题标题】:Simply add a message to a SQL Server Service Broker queue using T-SQL?只需使用 T-SQL 将消息添加到 SQL Server Service Broker 队列?
【发布时间】:2013-01-31 17:18:43
【问题描述】:

我因此创建了一个队列:

CREATE QUEUE log_line_queue
WITH RETENTION = ON, --can decrease performance
    STATUS = ON,
    ACTIVATION (
        MAX_QUEUE_READERS = 1, --number of concurrent instances of sp_insert_log_line
        PROCEDURE_NAME = sp_insert_log_line,
        EXECUTE AS OWNER
        );

如何在 SSMS 中使用 T-SQL 快速将项目添加到我的队列中?

【问题讨论】:

  • SEND 将消息发送到队列(更准确地说,使用对话),但正如文档中的示例所示,您还需要首先提供服务、消息类型、合同和对话。我怀疑您是否真的要求提供使用 Service Broker 队列的完整示例?如果是这样,网上有很多如this one
  • 这个例子,就像我见过的很多其他例子一样,有一个发送队列和一个接收队列。我只有一个队列。
  • 对话总是在两个服务之间,但multiple services can use the same queue。因此,您的发送和接收服务都可以使用相同的队列,尽管请注意文档不鼓励这样做,并建议每个队列只使用一项服务;我不知道你为什么不直接创建第二个队列?

标签: sql-server tsql service-broker


【解决方案1】:

在 SSMS 中,在对象资源管理器中选择所需的数据库。然后找到该数据库的Service Broker,右键单击它并选择“New Service Broker Application...”命令。这将为您创建模板以快速开始使用 Service Broker。此外,您还会看到实现和运行您自己的应用程序所需的最少推荐配置。

至于使用一个队列 - 如果这是您第一次使用 Service Broker,为什么不从一开始就遵循惯例呢?在运行多个示例和/或您自己的原型后,您可以决定使用多少队列并且您知道如何去做。

【讨论】:

  • 为什么要使用两个队列?我正在使用排队来创建缓冲区。有几件事会写入它,存储过程将从它读取并插入数据库。看不到我如何需要两个队列,除非它们不是传统意义上的真正队列。我错过了什么?
  • Service Broker 的任务是将消息从 Initiator 传递到 Target。 Initiator 将其消息放入其队列,Service Broker 将消息传输并放入 Target 的队列。从我的角度来看,如果您有多个发起者,则需要为每个发起者组织单独的队列。因此得到的系统更加灵活和可靠。您可以将所有这些队列计为一个缓冲区 - 没有规则“1 个缓冲区 = 1 个队列”。另一方面,当然,您可以使用一个队列来交换所有这些消息,为什么不 - 配置它,SB 肯定会工作。但最初它对 SB 不利。
  • stackoverflow.com/a/14661442/127434 终于为我揭开了神秘面纱
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多