最近公司要搞手机APP主动告警推送,本来想通过后台做个自动程序干这件事,定时推送,但是这样做一些告警推送消息不能够及时推送给用户。
仔细想了一下,如果每一条告警记录我都能及时发现并及时推送,岂不是更及时更准确,因为告警记录是通过采集程序解析后及时插入数据库的。所以,如果我在告警记录表里建一个Inset 模式的触发器,然后在触发器中通过数据库远程调用API接口,做消息推送岂不是很好。(关于触发器的介绍,看我以前写的就行了 https://www.cnblogs.com/zpy1993-09/p/12152971.html)
触发器建立后,就附带数据库远程调用API接口的数据库代码就行了。
这里为了验证推送,传入死数据就行了。话不多说,上代码:
declare @ServiceUrl as varchar(1000) declare @UrlAddress varchar(500) set @UrlAddress = 'http://远程接口IP/wapi/JZ/' declare @FunName varchar(50) --WebService中调用的方法名:例如'getMobileCodeInfo' set @FunName = 'Work_ReceiveTask' --以下参数对应WebService中4个参数的[参数名] declare @WorkID varchar(100),@ExplainContent varchar(100),@Uid varchar(100),@IsAssignTask varchar(100) set @WorkID = 'WorkID' set @ExplainContent = 'ExplainContent' set @Uid = 'Uid' set @IsAssignTask = 'IsAssignTask' declare @P1_Value varchar(100),@P2_Value varchar(100),@P3_Value varchar(100),@P4_Value varchar(100) set @P1_Value = 56261 set @P2_Value = '123213' set @P3_Value = 309 set @P4_Value = 1 set @ServiceUrl = @UrlAddress + @FunName + '?' + @WorkID + '=' + @P1_Value +'&' + @ExplainContent + '=' + @P2_Value +'&' + @Uid + '=' + @P3_Value +'&' + @IsAssignTask + '=' + @P4_Value Declare @Object as Int Declare @ResponseText as Varchar(8000) Exec sp_OACreate 'MSXML2.XMLHTTP', @Object OUT; Exec sp_OAMethod @Object, 'open', NULL, 'get',@ServiceUrl,'false' Exec sp_OAMethod @Object, 'send' Exec sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT Select @ResponseText Exec sp_OADestroy @Object GO
执行后结果: