问题标签 [service-broker]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
224 浏览

visual-c++ - 可以在 C++ 中使用查询通知吗?如果是,那么如何,如果不是,可能有替代方案

可以在 C++ 中使用查询通知吗?如果是,那么如何,如果不是,可能有替代方案..

MSDN 提供了有关如何使用 sqlDependency 使用查询通知的 C# 示例,但我需要将此类功能用于 C++ 应用程序。所以你怎么看..?

0 投票
1 回答
413 浏览

sql-server-2008 - SQL Server Service Broker 列名和类型?

我有一个包含数千条消息的 Service Broker (MSSQL 2008) 队列。为了对消息进行取证,我将前 10,000 条消息选择到 ##temp 表中。我已经成功地将全局临时表 BCP 导出到一个文件中。现在我需要将它 BCP 到一个本地 MSSQL 实例中,到一个新表中。该表必须与队列具有相同的架构。

但是,我似乎无法弄清楚新表的结构应该是什么。

我这样做了:

然后尝试使用 Create Table 语句创建一个新表,但 BCP-in 似乎不起作用。

我认为队列的模式必须在某个地方的 MSDB 中,或者必须有一种方法可以清楚地获取 Service Broker 队列的列类型。

任何人都可以帮忙吗?

谢谢。

0 投票
2 回答
2343 浏览

sql-server - Service Broker,端点 - 我真的需要证书才能在两台服务器之间发送消息吗?

我真的需要创建证书才能在 sql 服务器之间发送排队消息吗?我可以对两台服务器上的端点使用 dbo 身份验证吗?

如果我必须使用证书,我可以使用用户数据库证书而不是主数据库证书吗?我该怎么做呢?

我目前不关心安全性。两台服务器都在封闭的局域网上,无法访问互联网。


抱歉,我没有分析器。我正在使用 sql express 2005。

<---仅适用于同一服务器上的实例。但是,一旦我添加带有端口号的目标服务器 IP(我在目标服务器上创建的端点),消息就会被发送到 void。他们永远不会到达另一台服务器。

0 投票
1 回答
331 浏览

sql-server - sql broker 将 tcp 测试路由到同一台服务器

出于测试目的,我将两个数据库放在同一台服务器上,我想通过 TCP(不是 GUID)在数据库之间发送排队的消息。我还需要一个端点,因为它都在一台服务器上吗?我还使用 tcp://127.0.0.1:PORT 还是 tcp://IP:port?

最后,路由中的ReceivingService是目标数据库上的服务还是初始数据库上的服务?提前致谢!

0 投票
2 回答
627 浏览

sql-server - SQL Server Service Broker——处理SQL Server实例间两阶段提交的建议

我们正在探索在两个不同 SQL Server 实例之间进行通信的不同方法。所需的工作流程之一是向“远程”端发送某种消息,请求删除记录。当该系统完成删除时,它保持其事务打开并向发起者发送响应,然后发起者删除其相应的记录,提交其事务,然后将消息发送回“远程”端,告诉它,最后,也提交删除。

这是一个穷人对两阶段提交的近似。关于 SQL Server Service Broker 是否能够合理干净地处理这种类型的场景,该部门正在进行一场宗教辩论。任何人都可以阐明它是否可以吗?有类似工作流程的经验吗?考虑到 SQL Server 实例位于单独的非域计算机上,是否有更好的机制来实现这一点?

编辑:澄清一下,我们不能使用分布式事务,因为网络安全性既严密又有些随意。我们不允许进行使这成为可能的配置。

0 投票
1 回答
1993 浏览

sql-server-2005 - 运行 SQL Service Broker 应用程序的最低用户权限

我想使用SQL Server 2005服务Broker来创建更新应用程序。我希望使用 Service Broker 的主要原因是我需要从数据库中的触发器(我发现这不是最佳实践甚至不推荐)调用 Web 服务来更新另一个数据库上的数据。

这个想法是使用一个 Service Broker 应用程序来异步处理对 Web 服务的调用。

我遇到的问题是试图确定我必须授予用户创建队列、消息、合同并实际运行 SSB 应用程序的权限。

是否有任何可用信息说明我应该授予用户什么样的权限才能运行应用程序并设置SSB

0 投票
1 回答
1846 浏览

sql - 服务代理队列消息到达,但通知不起作用

我正在使用 Microsoft 提供的 External Activator 来监控服务代理队列消息。主队列的名称是“ReportQueueTarget”。我还设置了一个这样的通知队列:

这适用于我设置的两个环境。但是,对于我现在设置的这个新环境,消息成功到达主队列,但通知队列中没有任何显示。因此,外部激活器永远不会收到通知。什么可能导致这个问题?

谢谢!

0 投票
1 回答
1211 浏览

sql-server - Service Broker 错误处理模拟

我现在在项目中工作,在该项目中,应该使用 Server Broker 功能将多个 POS 同步到主服务器。现在我为这个解决方案准备错误处理,并想向客户展示它是如何工作的。这意味着我将为每种错误准备测试脚本,客户端在测试 POS 上运行它以查看它是否正确处理错误。

我们将使用 SQL Server 2008R2 并设置有害消息 = OFF。

消息类型=XML(但里面可以是不同类型的数据,一些节点会包含 BLOB)。

POSes 将在圆顶之外,因此传输将受到保护(但没有对话加密)。

我将错误分为几个子组:

  1. 逻辑错误(例如字符串而不是数字)。它将由服务器端的TRY-CATCH块处理。易于模拟

  2. Service Broker 配置错误(消息或将不返回或无法到达目的地)。我认为它可以通过使用 SQl Server Service Broker 事件来处理,并且模拟将是某种“错误配置”(SB GUID、服务名称等)

  3. 运输错误。这是我们收到错误消息的时候。事实上,测试这种错误是客户的意见。我不知道我们是否有安全的传输级别(证书),我们可以免受此类错误的影响。另一个问题我如何模拟这个。

问题:

  • 还有其他错误类型吗?
  • #2 错误处理逻辑是否描述得足够好?
  • 如何处理和模拟#3?
0 投票
1 回答
3973 浏览

sql - Sql Server 服务代理

目前我们正在使用服务代理来回发送消息,这工作正常。但我们想使用 RELATED_CONVERSATION_GROUP 对这些消息进行分组。我们想使用我们自己的数据库持久化 uuid 作为数据库中的 RELATED_CONVERSATION_GROUP = @uuid,但即使每次收到队列时,每次转换组 ID 都不同时,我们使用相同的 uuid。

你们知道我创建代理或接收呼叫的方式有什么问题吗,我在下面提供了代理创建代码和接收呼叫代码。谢谢

下面是代码“服务代理创建代码”

下面是代码“接收代码”

细化

我们的情况是,我们需要循环接收来自该 Service Broker 队列的项目,阻塞 WAITFOR,然后通过不可靠的网络将它们交给另一个系统。从队列中接收到的项目的目的地是与该远程系统的许多连接之一。如果该项目未成功交付到其他系统,则应回滚该单个项目的事务并将该项目返回到队列中。我们在成功交付后提交事务,解锁由后续循环迭代获取的消息序列。

相关项目序列的延迟不应影响不相关序列的交付。单个项目一旦可用就会立即发送到队列中并立即转发。项目应该以单个文件的形式转发,尽管即使在一个序列中的交付顺序也不是很重要。

从一次接收一条消息的循环中,从我们的打开连接列表中选择一个新的或现有的 TcpClient,然后将消息和打开的连接通过异步 IO 回调链传递,直到传输完成。然后我们完成从 Service Broker Queue 接收到 Item 的 DB Transaction。

如何使用 Service Broker 和对话组来协助这种情况?

0 投票
3 回答
1297 浏览

sql - Sql Service Broker、CLR 集成、触发后端问题

我正在寻找构建用于存储/处理数据的后端的最有效方法。基本上,数据被发送到服务器,解析然后保存到数据库。然后根据数据库中的其他数据对其进行一些处理,然后通过电子邮件或短信发出警报。

平台是 .NET,数据库是 SQL Server 2005 或 2008。

IE

  1. 温度传感器向服务器发送 4 个字节的数据。
  2. 服务器将数据转换为实际值,例如 20。
  3. 然后将该值保存到 SQL 服务器数据库。
  4. 然后根据表中为该传感器设置边界的行检查该值,即 0-50
  5. 如果超出范围,则会发出警报。(通过短信或电子邮件发送。)

这一切看起来都非常简单,但我正在寻找最好的方法,因为理想的情况是这一切都“实时”发生,并且每秒可能有 100 或 1000 个请求。我想利用 SQL 2005/08 的一些“新”功能,例如我几乎没有经验的 Service Broker、CLR 集成、触发器等。

步骤 1 和 2 已经完成。

考虑到排队事务的数量,使用服务代理或 MSMQ 是否明智?鉴于我需要查找边界数据,我应该在什么时候处理警报数据?我有一些想法,我希望如何处理数据,但不确定要使用的最佳技术/方法。

我的想法是(从第 3 步开始)是将数据提交给服务代理,后者又调用 CLR 过程来处理数据上的“业务逻辑”。或者我是否使用触发器将数据添加到服务代理以处理数据?服务代理可以直接调用 CLR 过程吗?考虑到我想以更多的事件驱动而不是轮询来处理数据,使用服务代理是否是正确的想法?

从我在 Service Broker 上看到的示例来看,您似乎需要有代码来接收数据,而我真正想做的就是将数据添加到队列中并自动清空队列(将警报数据处理为它这样做)。

我可以通过标准存储过程来完成所有这些工作,但我想尽可能少地使用存储过程,而是使用 CLR 集成,因为业务逻辑将比示例中复杂得多。

鉴于服务代理处理排队和线程,我认为它可能是调用 CLR 过程来处理警报数据并发送短信或电子邮件的好选择?

请给我看光!谢谢!