gpt4 book ai didi

ssis - SQL Server 2012(或 SSIS)如何在任务完成后通知 NServiceBus?

转载 作者:行者123 更新时间:2023-12-04 23:23:18 25 4
gpt4 key购买 nike

我们有一些运行时间很长的 ETL 包(有些运行几个小时)需要由 NServiceBus 端点启动。我们不需要在整个过程中保持单个事务处于事件状态,并且可以将其分解为较小的事务。由于 NServiceBus 处理程序会将自己包装在整个事务中,我们不想在单个事务中处理它,因为它会超时——更不用说在 DBMS 中产生锁定问题了。

我目前的想法是我们可以异步生成另一个进程,立即从处理程序返回,并在完成(成功或失败)后发布一个事件。我还没有找到很多关于如何将新的 NServiceBus 4.0 SQL Server Broker 支持与传统的 MSMQ 传输集成的文档。这甚至可能吗?

在 SQL Server 2012(或 SSIS 包)中长时间运行的进程以异步方式完成时通知 NServiceBus 订阅者的首选方法是什么?

最佳答案

看起来可以从 SSIS 执行 http 请求,请参阅 How to make an HTTP request from SSIS?

考虑到这一点,您可以使用通过网关(网关只是一个 HttpListener)向您的发布者发送消息到 NServiceBus,以告诉它发布一条消息,通知所有订阅者长时间运行的 ETL 包已完成。

要将消息发送到网关,您需要执行以下操作:

var webRequest = (HttpWebRequest)WebRequest.Create("http://localhost:25898/Headquarters/");
webRequest.Method = "POST";
webRequest.ContentType = "text/xml; charset=utf-8";
webRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)";

webRequest.Headers.Add("Content-Encoding", "utf-8");
webRequest.Headers.Add("NServiceBus.CallType", "Submit");
webRequest.Headers.Add("NServiceBus.AutoAck", "true");
webRequest.Headers.Add("NServiceBus.Id", Guid.NewGuid().ToString("N"));

const string message = "<?xml version=\"1.0\" ?><Messages xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns=\"http://tempuri.net/NServiceBus.AcceptanceTests.Gateway\"><MyRequest></MyRequest></Messages>";

using (var messagePayload = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(message)))
{
webRequest.Headers.Add(HttpRequestHeader.ContentMd5, HttpUtility.UrlEncode(Hasher.Hash(messagePayload))); //Need to specify MD5 hash of the payload
webRequest.ContentLength = messagePayload.Length;

using (var requestStream = webRequest.GetRequestStream())
{
messagePayload.CopyTo(requestStream);
}
}

using (var myWebResponse = (HttpWebResponse) webRequest.GetResponse())
{
if (myWebResponse.StatusCode == HttpStatusCode.OK)
{
//success
}
}

希望这可以帮助!

关于ssis - SQL Server 2012(或 SSIS)如何在任务完成后通知 NServiceBus?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18382075/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com