gpt4 book ai didi

c# - 如何在 MVC 应用程序中正确处理 Azure 事件中心接收器?

转载 作者:行者123 更新时间:2023-12-03 00:31:14 25 4
gpt4 key购买 nike

我正在 Microsoft Azure 事件中心上做一个小项目。我需要显示 MVC 应用程序的 Azure 订阅的事件日志。

我能够将事件日志流式传输到服务总线,但在从 EventHubReceiver 接收数据时遇到问题。如果没有数据,接收器似乎就会卡住。我知道这是因为 eventhubs 使用的 pub sub 架构,但我想控制流程,因为我使用的是 MVC 应用程序。

现在我已经使用 CancellationToken 并明确等待 6 秒让 EventReceiver 接收所有消息。有更好的方法吗?

public class HomeController : Controller
{
// GET: Home
public ActionResult Index()
{
var cts = new CancellationTokenSource();
var list = new List<Record>();
for (int i = 0; i < 4; i++)
{
Task.Factory.StartNew((state) =>
{
var factory = MessagingFactory.CreateFromConnectionString("Endpoint=sb://xcvxcv.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=xcvxcvxvxvxcvxcccccccccccccccccccccccccc;TransportType=Amqp");
var client = factory.CreateEventHubClient("insights-operational-logs");

var group = client.GetDefaultConsumerGroup();
var receiver = group.CreateReceiver(state.ToString(), DateTime.Now.AddDays(-1));


while (true)
{
if (cts.IsCancellationRequested)
{
receiver.Close();
break;
}
var messages = receiver.Receive(10);
foreach (var message in messages)
{
var logMessage = Newtonsoft.Json.JsonConvert.DeserializeObject<LogEventMessage>(Encoding.Default.GetString(message.GetBytes()));
list.AddRange(logMessage.records);
}
}
}, i);
}
Thread.Sleep(5000);
cts.Cancel();
return View(list.OrderBy(o => o.time));
}
}

最佳答案

我会考虑实现 EventProcessorHost 接口(interface)并控制 ProcessEventsAsync 中的流程。

https://azure.microsoft.com/en-us/documentation/articles/event-hubs-csharp-ephcs-getstarted/

关于c# - 如何在 MVC 应用程序中正确处理 Azure 事件中心接收器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40290956/

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