我正在为 Azure EventHub 编写一个工作程序,我希望在EventProcessorHost之上构建;但是,我在一般 文档或 API 文档中找不到一些可能相关的详细信息。
EventProcessorHost何时调用 IEventProcessor ProcessEventsAsync ?
当事件中心流中有新消息时调用此方法。确保仅在处理完每批中的所有事件后才进行检查点。
虽然我们知道可枚举的消息中会有一些结果,但文档没有说明我们是否可以预期对 ProcessEventsAsync 的并发调用或在第一个调用正在进行时进行第二个调用。给出有关何时检查点的说明,这两种方法都没有多大意义,因为第二个调用可以完成,并且在流中比第一个未完成时处理的情况更进一步进行检查点,但文档中的确认会很好。
我假设 EventProcessorHost 将每次调用CreateEventProcessor(或 IEventProcessor,如果它们是唯一的)的输出用于一个分区,并且PartitionContext
同样,对CheckpointAsync 的调用是否会对调用ProcessEventsAsync产生任何影响。虽然它不应该允许稍后检查点,但我认为这是一个理性的选择。我还有一些关于检查点机制的其他问题,我将在另一个问题中解决这些问题(链接将在此处)。
在进行CloseAsync调用后是否还会进行 ProcessEventsAsync 调用(我假设不会,但没有找到)?是否会使用从 ProcessEventsAsync 返回的未完成的任务来完成?
简而言之,对我来说有意义的答案是,对于给定的处理器,在先前调用的任务完成之前不会调用 ProcessEventsAsync,但我无法从文档中确认这一点。
我正在编写代码,使用EventHubClient将消息从多个线程发布到C#中的Azure事件中心.EventHubClient的文档包含相当标准的样板.
"此类型的任何公共静态(在Visual Basic中为Shared)成员都是线程安全的.任何实例成员都不保证是线程安全的."
在我最期望的线程安全的 四种 发送 方法中,没有关于线程安全的其他文档.我是否相信发送方法不是线程安全的,那么每次我希望发送消息时,我最终都会创建一个新的EventHubClient实例.由于除非采取了步骤,否则显然会重用底层tcp连接,这可能不会产生太多开销.分区发件人也会出现类似的问题,但是如果有一个异步方法来创建一个,他们可能会有自己的AMQP连接.
尽管有文档,EventHubClient线程的一些(如果不是全部)实例方法是否安全?
对于任何Azure人员,是否可以在文档中澄清这一点?这种文档问题(假设它看起来很可能)似乎也会影响 Azure Table,并且通常在MSDN文档中很常见.关于EventHub,这与Kafka和AWS Kinesis的明确的线程安全声明相反,至少没有明确地将所有内容标记为不安全.我没有在SDK的开源部分找到EventHubs,所以无法检查自己.
总之,我很感激你的帮助,因为我目前被困!
我们有一个新项目,我们将使用Azure EventHub.我已经创建了演示应用程序,我们可以在事件中心添加事件,也可以使用IEventProcessor(Receiver项目)来消耗它们.问题是每次我执行接收器项目时,我都会看到相同的事件.我们不应该期望在我们消费之后删除这些事件吗?
Receiver项目中的示例:
foreach (EventData eventData in messages)
{
string data = Encoding.UTF8.GetString(eventData.GetBytes());
Console.WriteLine(string.Format("Message received. Partition: '{0}', Data: '{1}'",
context.Lease.PartitionId, data));
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在Console.WriteLine之后删除/删除事件,或者将消息保留一天?使用Queues,您可以发出完成信号,但是EventHub看不到任何命令,我可以使用它来删除/删除它.
任何回复将不胜感激.我们已经被指示使用EventHub而不是原因,这不是一个选择问题.