问题标签 [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 投票
2 回答
1581 浏览

.net - SQL Server 服务代理问题和教程

我一直在研究在 SQL Server Express 2005 中实现一个外部激活器,并将队列、服务、合同和事件通知添加到数据库中。我还添加了一个触发器来向目标队列发送消息。一切都解析,运行,触发器正在触发。但是,当我从目标队列中选择,或使用快速 T-SQL 脚本从队列中接收时,什么都没有。

我在想:

  1. 这怎么可能呢?消息是自动接收的吗?
  2. 有什么方法可以在发送消息时检查它是否正确到达?
  3. 触发触发器后,是否有更好的方法在服务器上异步运行进程?

顺便说一句,很难找到适用于 Service Broker 的好的教程材料。如果有人有任何资源,请告诉我。现在,我正在从我们公司的在线资源中阅读一本书,但即使这样也很难过滤。

谢谢,

威廉

0 投票
2 回答
506 浏览

sql-server - 在 Windows 中使用改进的 FIFO 语义构建工作项处理系统

我正在构建一个系统来生成排队等待后端处理的“工作项”。我最近完成了一个具有相同要求的系统,并提出了一个我认为不是最佳的架构,并希望为这个新系统提供一些建议。

工作项目集中排队,需要以基本上先进先出的顺序进行处理。如果这是唯一的要求,那么我可能更喜欢 MSMQ 或 SQL Server Service Broker 解决方案。但是,实际上,我需要以修改后的 FIFO 顺序选择工作项。一个工作项有几个属性,在存在某些属性值组合的情况下,它们需要按 FIFO 顺序分配。

例如,工作项可能具有以下属性:办公室、优先级、组号和序列号(组内)。当多个项目为同一个组号排队时,它们保证按序号顺序排队,并且具有相同的优先级。

在给定服务的某些配置参数的情况下,有几个后端进程(当前实现为 Windows 服务)以修改后的 FIFO 顺序拉取工作时间。运行 Washington, DC 的服务被配置为仅处理 DC 的工作项,而 NY 的服务可能被配置为同时处理 NY 和 DC 的项目(主要是为了提高整体吞吐量)。除了这种选择性之外,优先级较高的项目应该先处理,包含相同“组号”的项目必须按照序列号顺序处理。因此,如果 NY 服务正在处理具有序列 1 的组 100 中的 DC 项目,我不希望 DC 服务取消组 100 序列 2 中的 DC 项目,因为序列 1 尚未完成。其他组中的项目应该仍然有资格进行处理。

在上一个系统中,我使用 SQL 表实现了队列。我创建了存储过程来提交项目,更重要的是,将项目“分配”给负责处理它们的 Windows 服务。赋值存储过程包含我上面描述的选择逻辑。每个 Windows 服务都将调用分配存储过程,向其传递对该服务实例(例如,符合条件的办公室)唯一的参数。此分配存储过程将工作项标记为已分配(处理中),当工作完成时,调用最终存储过程以从“队列”(表)中删除该项目。

这个解决方案确实有一些优势,因为我可以通过一个简单的 SQL 选择语句快速检查这些“队列”的状态。我还能够轻松地操纵队列(例如,我可以使用简单的 SQL 更新语句来提高优先级)。然而,不利的一面是,我有时不得不处理这些队列表上的死锁,并且有编写这些存储过程的负担(一段时间后会变得乏味)。

不知何故,我认为 MSMQ(带或不带 WCS)或 Service Broker 应该能够提供更优雅的解决方案。滚动我自己的排队/工作项处理系统感觉不对。但据我所知,这些技术无法提供我在分配过程中所需的灵活性。我希望我错了。任何的建议都受欢迎。

0 投票
4 回答
17568 浏览

sql - 我应该使用 MSMQ 还是 SQL Service Broker 进行事务处理?

我的团队负责人要求我调查 MSMQ 作为我们新版本产品的一个选项。我们在当前版本中使用 SQL Service Broker。我已经完成了相当多的实验和谷歌搜索,以找到哪种产品更适合我的需求,但我想我会询问我所知道的最好的网站来获得编程答案。

一些细节:

  • 我们的客户端是 .NET 1.1 和 2.0 代码;这是发送消息的地方。
  • SQL Server 2005 实例中的目标。所有消息最终都是数据库更新或插入。
  • 我们将发送一些必须作为交易处理的更新。
  • 我们必须有完美的消息可恢复性;没有消息可以丢失。
  • 即使目标 SQL 服务器关闭,我们也必须是异步的并且能够接受消息。
  • 开发我们自己的排队解决方案不是一种选择。我们是一个小团队。

到目前为止我发现的事情:

  • MSMQ 和 SQL Service Broker 都可以完成这项工作。
  • 似乎服务代理处理事务消息的速度更快。
  • Service Broker 需要在某处运行的 SQL 服务器,而 MSMQ 需要在某处运行的任何已配置的 Windows 机器。
  • MSMQ 似乎更好/更快/更容易在集群中设置/运行。

我错过了什么吗?这里有明显的赢家吗?任何想法、经验或链接都会受到重视。谢谢!

编辑:我们最终坚持使用服务代理,因为我们在一些客户端代码中使用了自定义数据库框架(我们更好地处理事务)。该代码捕获了事务的 SQL,但没有捕获 . 客户端代码也是 .NET 的所有 1.1 版本,因此我们必须升级所有客户端代码。谢谢你的帮助!

0 投票
1 回答
3909 浏览

.net - SQL Service Broker 和 .NET Windows 服务 - 最佳实践?

我目前有一个从旧应用程序更新的数据库。我想利用 SQL Service Broker 队列,以便在更新记录时将消息放入队列中(使用触发器或其他东西)。

然后,我想要一个长时间运行的应用程序(用 .NET 编写的 Windows 服务),它不断地“监听”队列以获取消息并为另一个应用程序处理它们。

我在网上找到了一些示例代码,只是想获得一些关于代码是否可靠的输入。因此,这是 Windows 服务类的缩写版本:

你怎么看?代码完全按照我想要的方式工作。但是分离一个包含 SQL 命令的新线程的想法永远不会超时 - 在无限循环中 - 让我有点紧张。

0 投票
5 回答
6593 浏览

sql-server - 有人在 SQL Server 中使用 Service Broker 吗?

当我参加 Microsoft 的 SQL Server 2008 演示文稿时,他们快速浏览了一下我们正在使用的功能。原来,整个报告厅里,只有我公司在使用Service Broker。这让我很惊讶,因为我认为会有更多的人使用它。

我对 SB 的经验是,它的工作做得很好,但管理起来非常困难,而且很难获得概览。

那么,您是否考虑过使用 Service Broker?如果不是,为什么不呢?你改用 MSMQ 了吗?SQL Server 2008 中是否有任何内容可以让您考虑使用 Service Broker。

0 投票
1 回答
1783 浏览

sql - MSSQL 服务代理激活“作为 SELF 执行”

我有一个服务代理激活的存储过程,在管理工作室中执行时运行良好。但是,当它在队列上激活时,sql server 错误日志显示以下消息:

我认为 FileUploadAsyncWorker 中的“违规”语句是:插入 FileContent (filename, content) select @filename, content from openrowset (bulk...

如何判断存储过程在哪个用户帐户下运行?

0 投票
1 回答
150 浏览

.net - .Net 数据库消息代理

我正在寻找一种简单可靠的机制来从数据库级别执行应用程序消息代理。我基本上需要在两个不同的应用程序中进行更改以相互生成消息,以指示它们的公共对象之间发生了更改。困难在于两个系统都有自己独特的数据库模式来定义这些公共对象。

是否值得追求 BizTalk 解决方案来创建消息代理服务,或者是否有更简单的方法可以使用标准 .Net 方法或商业组件来实现相同的目标?

谢谢,

布赖恩。

0 投票
2 回答
1621 浏览

sql-server - 如何减少服务代理队列的泛滥?

我是使用 SQL Service 2005 Service Broker 的新手。我已经创建了队列并成功地进行了对话,等等。但是,我想对消息进行“节流”,但我不知道该怎么做。

消息由多用户应用程序调用的存储过程发送。假设有 20 个用户在 30 秒内每个用户调用一次此 proc,它只需要发送一次。所以我认为我需要从我的 proc 中获取某种方式来查看是否在过去 30 秒内发送了一条消息?有没有办法做到这一点?

我的一个想法是向“响应”队列发送一条消息,指示是否已调用请求队列激活过程。然后在我的存储过程(由用户应用程序调用)中查看最近是否调用了该特定消息。问题是我不希望这弄乱响应队列。可以查看队列(不接收)以查看其中是否存在消息吗?

或者有没有更简单的方法来完成我所追求的?

0 投票
7 回答
102385 浏览

messaging - 消息代理和 ESB 之间的区别

我已经阅读了有关消息代理和 ESB 的不同问题/文章(甚至在 stackoverflow 上)。仍然不知道消息代理和 ESB 之间的明确划分区别是什么?现在我在这里尝试比较产品,Websphere Broker 和 Mule ESB!

首先,(任何版本)Webshere Broker 是 ESB 吗?我们的 IBM 产品人员声称它是 ESB!(我对此并不感到惊讶)。

我有限的信息告诉我,Message Broker 在 HUB-SPOKE 模型上工作。然而,ESB 在总线架构上工作。这到底是什么意思?我已经读过,如果 HUB 失败(我猜不可用)那么经纪人就完全失败了。这不是 ESB 的情况(所以那些人说)。我在这里不明白的是“如果 BUS”发生故障怎么办?

现在关于 ESB 和 Brokers 的常见内容是,它们提供路由、转换、编排等。因此,如果它们都提供这些,那么我为什么要选择一个而不是另一个。

另一个冲突领域是关于转型。与 Message Brokers 相比,ESB 是否以不同的方式促进它?我真的很想对此有所了解。

现在谈论水平缩放。谁胜过谁?或者它们在复杂性(或任何其他因素)方面都具有同等的可扩展性。当然,在成本方面,Webshpere Broker 会为每个盒子(更不用说每个 cpu)向您收费。我相信,即使是商业 MULE ESB 也不会这样做。撇开其中的成本部分不谈,ESB 扩展和 Message Broker 扩展的含义是什么。我碰巧知道您可以在 ESB 中扩展到服务级别。这在消息代理中可能吗?

0 投票
1 回答
392 浏览

sql-server - sql服务代理功能问题

我是一名刚起步的 Web 开发人员,正在从事一个雄心勃勃的 Web 应用程序项目。

所以在做了一些研究之后,我发现了 SQL Service Broker。这似乎是我可以使用的东西,但我不确定。由于学习它需要有人投入大量时间,因此我想确保它符合我的需求。

我需要实现一个网站用户可以向网站提交文本的系统。该消息流必须是冗余的并以 FIFO 方式处理,在流的另一端,另一组用户处理消息。

现在,最后一组用户中的一个正在阅读的消息应该被锁定,这样其他人就不能同时阅读它。然后用户可以决定是否处理该消息。只有当他决定处理该消息时,才能将其从队列中删除。如果他决定不想处理该消息,则应将该消息放回队列中(在队列的末尾,或至少具有最高优先级),以便另一个用户可以阅读并决定.

这是我可以用 SQL Service Broker 实现的吗?我在错误的轨道上吗?

谢谢!