- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一些使用 Service Bus Event Data 的代码,并且我怀疑我需要使用 offset 属性,因为目前我的程序正在(或似乎)一遍又一遍地重新运行相同的事件中心数据。
我的代码如下:
public class EventHubListener : IEventProcessor
{
private static EventHubClient _eventHubClient;
private const string EhConnectionStringNoPath = "Endpoint=...";
private const string EhConnectionString = EhConnectionStringNoPath + ";...";
private const string EhEntityPath = "...";
public void Start()
{
_eventHubClient = EventHubClient.CreateFromConnectionString(EhConnectionString);
EventHubConsumerGroup defaultConsumerGroup = _eventHubClient.GetDefaultConsumerGroup();
EventHubDescription eventHub = NamespaceManager.CreateFromConnectionString(EhConnectionStringNoPath).GetEventHub(EhEntityPath);
foreach (string partitionId in eventHub.PartitionIds)
{
defaultConsumerGroup.RegisterProcessor<EventHubListener>(new Lease
{
PartitionId = partitionId
}, new EventProcessorCheckpointManager());
Console.WriteLine("Processing : " + partitionId);
}
}
public Task ProcessEventsAsync(PartitionContext context, IEnumerable<EventData> messages)
{
foreach (EventData eventData in messages)
{
string bytes = Encoding.UTF8.GetString(eventData.GetBytes());
MyData data = JsonConvert.DeserializeObject<MyData>(bytes);
当我一遍又一遍地收到相同的消息时,我怀疑我需要做这样的事情:
string bytes = Encoding.UTF8.GetString(eventData.GetBytes(), eventData.Offset, eventData.SerializedSizeInBytes - eventData.Offset);
但是,Offset
是一个字符串,即使它看起来是一个数值(例如“12345”)。 context.CheckPointAsync()
的文档看起来这可能就是答案;然而,在循环结束时发出它似乎没有什么区别。
所以,我有一个由两部分组成的问题:
编辑:
经过一段时间的摸索,我想出了一些办法可以避免这个问题;但是,我当然不会声称这是一个解决方案:
var filteredMessages =
messages.Where(a => a.EnqueuedTimeUtc >= _startDate)
.OrderBy(a => a.EnqueuedTimeUtc);
使用EventProcessorHost
似乎实际上使问题变得更糟;也就是说,历史事件不仅在重播,而且似乎是按随机顺序重播的。
编辑:
我遇到了this @Mikhail 的优秀文章,它似乎确实解决了我的确切问题。然而;大概是我的问题的根源(或者其中之一,假设这是正确的,那么我不确定为什么使用 EventProcessorHost
不能像 @Mikhail 自己在评论)。但是,ServiceBus 版本的 ICheckpointManager
只有一个接口(interface)方法:
namespace Microsoft.ServiceBus.Messaging
{
public interface ICheckpointManager
{
Task CheckpointAsync(Lease lease, string offset, long sequenceNumber);
}
}
最佳答案
您的标题应该是事件中心,而不是服务总线。对于您的问题:
关于c# - 如何使用 ServiceBus EventData 偏移值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50694613/
将 Azure.Messaging.EventHubs 从 5.5.0 升级到 5.9.0。 我需要将旧的 Microsoft.Azure.EventHubs.EventData 更改为 Azure.
在设置事件处理程序(提交、单击、按键等)时,将数据获取到处理程序并在处理程序中使用它的最快、最有效的方法是什么?我应该做这样的事情: $obj.data({name: value, ...}); $o
在 Azure 文档中 EventHubClient有two methods对于发送一批数据,它们每个都有下面的注释,并且会抛出 MessageSizeExceededException如果被忽略。
代码如下: -- Create a log table CREATE TABLE TriggerLog (LogInfo xml) -- Create a dummy
documentation没有任何关于如何使用 .submit( [eventData], handler(eventObject) ) 的示例 我有以下函数,我需要将 url 传递给 row_sav
如果使用 Azure EventHub 客户端 SDK 中的 EventHub.SendAsync(EventData),是否有办法找出哪个分区是写入的消息? 我们故意不提供分区键,以便 EventH
我试图通过查看安全事件日志来确定机器的最频繁用户。我正在考虑使用 4624 事件 ID,但我似乎无法弄清楚如何从查询中的 EventData 添加任何内容。我可以从 4624 事件中获取标准数据,但我
我有一些使用 Service Bus Event Data 的代码,并且我怀疑我需要使用 offset 属性,因为目前我的程序正在(或似乎)一遍又一遍地重新运行相同的事件中心数据。 我的代码如下: p
当前触发器如下: CREATE TRIGGER TestTrigger ON DATABASE FOR ALTER_TABLE AS BEGIN SET NOCOUNT ON; DECLARE
我正在使用 1x 函数,我的问题是,如果使用这个版本,我可以接收 EventData 类型的对象。 我已阅读有关它的文档,但我还不清楚。 执行函数时,抛出以下异常: mscorlib: Excepti
我正在创建一个由 EventHub 触发的 C# 隔离工作进程 Azure Function,该函数会将带有 header 的 EventData 列表输出到另一个 EventHub。 该函数在使用
从官方文档来看,他们只支持批量发送。只是想知道是否存在某些东西(当然除了作为列表发送一个之外) 最佳答案 EventHubProduerClient不提供发送单个事件的方法。在新 SDK 的设计过程中
从官方文档来看,他们只支持批量发送。只是想知道是否存在某些东西(当然除了作为列表发送一个之外) 最佳答案 EventHubProduerClient不提供发送单个事件的方法。在新 SDK 的设计过程中
我目前有一个像这样的 javascript 错误处理程序: window.onerror = function(msg, url, line){ //stuff }}; 但我希望能够像这样使用 jqu
给定一个 元素,我想在 blur 上调用一个现有的函数,并向它传递一个匿名回调。 案例一,简单的函数调用: function bar(){ alert("I am"); } $("#foo")
我通常按如下方式将数据发送到事件中心.. var encoded = Encoding.UTF8.GetBytes(serializedString); using (var edata = new
我有以下函数定义。 消息类型: type MailboxItem = { CustomerID: int AssetID: int } 代码: let Run(item: Mailbo
按照以下文章中的说明进行操作后 https://learn.microsoft.com/en-us/azure/azure-functions/functions-create-first-azure
按照以下文章中的说明进行操作后 https://learn.microsoft.com/en-us/azure/azure-functions/functions-create-first-azure
假设您使用 bind() 或 on() 将处理程序绑定(bind)到某个对象,并指定诸如 { color : "red"} 之类的数据>。后来,情况发生变化,您希望使用 { color : "blue
我是一名优秀的程序员,十分优秀!