我正在收听各种活动的事件中心。
对于每个事件,我需要对系统进行3-4个API调用,这些调用并不是非常可靠的。由于其中一些是交叉的Geo调用,这可能需要一些时间。
我计划从事件中心接收事件,并将它们放到服务总线上。我的理由如下。
可以将blocked.
我一直在寻找这样的模式,但我还没有看到从基于日志的消息系统中获取数据并将它们推送到基于队列的模式的模式。
是否有更好的方法来处理这种情况?
发布于 2020-06-01 07:39:16
我认为您可以使用事件集线器触发器和服务总线输出绑定来实现您想要的结果。
例如,我希望监视事件中心'test‘,并且我使用的是C#库:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Azure.EventHubs;
using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;
namespace FunctionApp68
{
public static class Function1
{
[FunctionName("Function1")]
[return: ServiceBus("test1", Connection = "ServiceBusConnection")]
public static string Run([EventHubTrigger("test", Connection = "str")] EventData[] events, ILogger log)
{
var exceptions = new List<Exception>();
string messageBodyt = "";
foreach (EventData eventData in events)
{
try
{
string messageBody = Encoding.UTF8.GetString(eventData.Body.Array, eventData.Body.Offset, eventData.Body.Count);
messageBodyt = messageBodyt + messageBody;
// Replace these two lines with your processing logic.
log.LogInformation($"C# Event Hub trigger function processed a message: {messageBody}");
//await Task.Yield();
}
catch (Exception e)
{
// We need to keep processing the rest of the batch - capture this exception and continue.
// Also, consider capturing details of the message that failed processing so it can be processed again later.
exceptions.Add(e);
}
}
// Once processing of the batch is complete, if any messages in the batch failed processing throw an exception so that there is a record of the failure.
if (exceptions.Count > 1)
throw new AggregateException(exceptions);
if (exceptions.Count == 1)
throw exceptions.Single();
return messageBodyt;
}
}
}上述代码将从事件集线器'test‘收集,并保存到服务总线队列’test 1‘。
看看这些医生:
发布于 2020-06-09 05:40:02
实际上,您需要的是每个设备Id都有一个私有队列。一旦事件到达事件集线器,从它中提取事件并将其放入设备Id的私有队列中,然后依次处理它。
如何构建每个设备的队列-Id:
构建队列的简单方法是使用SQL数据库(如果每秒的请求不是很高的话,它主要是工作的),因为sql 100 req/s是normal.)
https://stackoverflow.com/questions/62106891
复制相似问题