- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这种情况,我真的不知道从哪里开始。假设服务器上托管了一个类似Web服务的应用程序(可能是API tho)。该应用程序收到处理某些数据的请求(通过某种方法,我们将其称为processData(data theData))。
另一方面,有一个机器人(可能安装在同一服务器上)来处理数据。因此,Web服务将请求插入到公共数据库中(两个程序都可以访问它),并且应该等待该行更改并将结果发送回去。
机械手会定期检查数据库中是否有新行,处理数据并在该行中设置某种标志,以指示数据已处理。
因此,这里的主要问题是,proccessData(..)方法应如何检查数据行的更改?
我知道一种实现方法:我可以构建一个迭代块,每隔x秒检查一次行。但是我不想那样做。我想要做的是构建某种事件侦听器,该侦听器在行更改时触发。我知道这可能涉及一些异步编程
我可能在做梦,但是在网络环境中甚至有可能吗?
我一直在阅读有关SqlDependency类,Async和AWait类等的信息。
最佳答案
取决于您对该分布式系统的设计有多少控制权,如果您退后一步并尝试在解决方案的范围之外进行思考,则可以将问题缩小到目前为止。您已经确定“主要问题”是在寻找一种分布式服务通过公用数据库相互通信的方法。也许这是您应该挑战的想法。
这些组件有许多潜在的通信方式,如果您的设计目标是减少延迟并避免轮询,那么实际上可能是正确的方法,需要通知服务此工作项的完成情况。它马上。但是,如果将来必须提高该系统的吞吐量,则批量处理工作项并轮询信息可能会成为唯一可行的选择。这也是为什么我选择更通用地表达我的答案,并更抽象地讨论此分布式系统的设计的原因。
如果经过此考虑,您的答案仍然是相同的,并且您确实希望立即通知,请考虑让组件处理工作项以通知需要通知的组件。作为分布式系统的一般设计原则,最好使对给定数据集最具权威性的组件也成为回答有关该数据请求的组件。在这种情况下,您拥有的数据是工作项的完成状态,因此,要执行此操作的最佳组件将是完成工作项的组件。该组件最好将完成的情况告知呼叫客户和组件。在这里,重要的是要知道是否仅出于组件之间的通信目的而将此数据写入数据库,或者这些行是否具有超出给定工作项完成的任何值,例如用于报告目的或性能指标(KPI)。
但是,我认为可能有正当的理由,为什么您不想打这样的电话,例如减少组件之间的耦合或缺少直接与其他组件进行通信的权限。有许多允许这种通知的通信原语,例如Windows下的MSMQ或Windows Azure中的队列。也有反对的理由,例如,依赖于系统内部通信的第三个组件,这可能会降低系统的可用性并导致中断。您在这里可能要问自己的问题是:“当周围的所有组件掉下来时,我的组件可以做多少工作?”和“就可靠性和可用性而言,我对该系统的设计重点是什么?”
因此,我认为您可能真正想解决的主要问题有点抽象:该分布式系统的组件之间进行通信的接口应该是什么样的?
如果在所有这些之后仍将这些组件之间的通信接口设置为SQL数据库,则可以探索在SQL中使用INSERT和UPDATE触发器。您可以轻松地查找这些命令的语法,并指定随后执行的存储过程。在这些存储过程中,您可能希望检查任何新行的完成标志,并可能按日期限制检查的行数,或者具有最后处理的工作项的ID。然后,要通知其他组件,您可以使用内置存储过程XP_cmdshell
在Windows下执行命令行。您执行的命令可能是一个简单的工具,可以对您的服务执行ping操作以完成任务。
很抱歉最初忽略了您关于使用SQL查询通知的建议。这也是可行的方法,并且可以通过Service Broker组件进行工作。您将定义一个SqlCommand
,就像通常查询数据库一样,将其传递给SqlDependency
的实例,然后订阅名为OnChange
的事件。一旦执行了SqlCommand
,就应该调用添加到OnChange
的事件处理程序。
但是,我不确定如何从将传递给事件处理程序的SqlNotificationEventArgs
对象中获取对数据库的确切更改,因此您的查询可能需要足够具体,以使应用程序能够知道工作项查询更改时,操作已经完成,或者您可能每次需要通知您才能知道更改的确切时间时,都必须从应用程序对数据库进行另一次往返。
关于c# - 通过数据库更改监听Web服务或API中的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19413974/
我正在尝试将 WPF CodeBehid 事件(如 Event、Handler、EventSetter)转换为 MVVM 模式。我不允许使用 System.Windows.Controls,因为我使用
我可能误解了 Backbone 中的事件系统,但是当我尝试以下代码时什么也没有发生。当我向 Backbone.Events 扩展对象添加新属性时,它不应该触发某种更改、更新或重置事件吗?就像模型一样吗
我遇到了一个简单的问题,就是无法弄清楚为什么它不起作用。我有一个子组件“app-buttons”,其中我有一个输入字段,我想听,所以我可以根据输入值过滤列表。 如果我将输入放在我有列表的根组件中,一切
System.Timers.Timer 的 Elapsed 事件实际上与 System.Windows.Forms.Timer 的 Tick 事件相同吗? 在特定情况下使用其中一种比使用另一种有优势吗
嗨,这个 javascript 代码段是什么意思。(evt) 部分是如此令人困惑.. evt 不是 bool 值。这个怎么运作? function checkIt(evt) { evt
我正在使用jquery full calendar我试图在事件被删除时保存它。 $('calendar').fullCalendar ({
我有两个链接的鼠标事件: $('body > form').on("mousedown", function(e){ //Do stuff }).on("mouseup", function(
这是我的代码: $( '#Example' ).on( "keypress", function( keyEvent ) { if ( keyEvent.which != 44 ) {
我尝试了 dragOver 事件处理程序,但它没有正常工作。 我正在研究钢琴,我希望能够弹奏音符,即使那个键上没有发生鼠标按下。 是否有事件处理程序? 下面是我正在制作的钢琴的图片。 最佳答案 您应该
当悬停在相邻文本上时,我需要使隐藏按钮可见。这是通过 onMouseEnter 和 onMouseLeave 事件完成的。但是当点击另外的文本时,我需要使按钮完全可见并停止 onMouseLeave
我有ul标签内 div标签。我申请了mouseup事件 div标记和 click事件 ul标签。 问题 每当我点击 ul标签,然后都是 mouseup和 click事件被触发。 我想要的是当我点击 u
我是 Javascript 和 jQuery 的新手,所以我有一个非常愚蠢的疑问,请耐心等待 $(document).click(function () { alert("!"); v
我有一个邮政编码解析器,我正在使用 keyup 事件处理程序来跟踪输入长度何时达到 5,然后查询服务器以解析邮政编码。但是我想防止脚本被不必要地调用,所以我想知道是否有一种方法可以跟踪 keydown
使用事件 API,我有以下代码来发布带有事件照片的事件 $facebook = new Facebook(array( "appId" => "XXX", "se
首次加载 Microsoft Word 时,既不会触发 NewDocument 事件也不会触发 DocumentOpen 事件。当 Word 实例已打开并打开新文档或现有文档时,这些事件会正常触发。
我发现了很多相关问题(这里和其他地方),但还没有具体找到这个问题。 我正在尝试监听箭头键 (37-40) 的按键事件,但是当以特定顺序使用箭头键时,后续箭头不会生成“按键”事件。 例子: http:/
给定的 HTML: 和 JavaScript 的: var $test = $('#test'); $test.on('keydown', function(event) { if (eve
我是 Node.js 的新手,希望使用流运行程序。对于其他程序,我必须同时启动一个服务器(mongodb、redis 等),但我不知道我是否应该用这个运行一个服务器。请让我知道我哪里出了问题以及如何纠
我正在尝试使用 Swift 和 Cocoa 创建一个适用于 OS X 的应用程序。我希望应用程序能够响应关键事件,而不将焦点放在文本字段上/文本字段中。我在 Xcode 中创建了一个带有 Storyb
我有以下代码: (function(w,d,s,l,i){ w[l]=w[l]||[];w[l].push({
我是一名优秀的程序员,十分优秀!