登录
首页 >  Golang >  Go问答

学习如何使用最新事件的 Azure Event Hubs Go SDK (azeventhubs)

来源:stackoverflow

时间:2024-02-09 16:09:28 220浏览 收藏

怎么入门Golang编程?需要学习哪些知识点?这是新手们刚接触编程时常见的问题;下面golang学习网就来给大家整理分享一些知识点,希望能够给初学者一些帮助。本篇文章就来介绍《学习如何使用最新事件的 Azure Event Hubs Go SDK (azeventhubs)》,涉及到,有需要的可以收藏一下

问题内容

我正在从 azure-event-hubs-go/v3 迁移到较新的 azeventhubs Go SDK。在旧版 SDK 中,有一个 ReceiveOption 参数,允许我指定从哪里开始消费事件。

在新的 SDK 中,我使用以下代码来初始化处理器:

processor, err := azeventhubs.NewProcessor(
    e.ConsumerClient, 
    checkpointStore, 
    &azeventhubs.ProcessorOptions{
        UpdateInterval: time.Second, 
        Prefetch: 0, 
        StartPositions: azeventhubs.StartPositions{
            Default: azeventhubs.StartPosition{
                Latest: to.Ptr(true), 
                EnqueuedTime: to.Ptr(time.Now()), 
                Inclusive: true
            }
        }
    }
)

但是,我注意到事件是从最后一个检查点而不是最近发送的事件中消耗的。

我尝试过的: 我已经尝试过 ConsumingEventsUsingConsumerClientConsumingEventsWithCheckpoints 示例,但它们的行为方式相同,消耗来自最后一个检查点的事件而不是最近的事件。

我的期望: 我希望处理器开始使用从设备发送的最新事件,该设备每秒发送一条消息。如何使用 azeventhubs Go SDK 实现此行为?


正确答案


我最初很难掌握 AMQP 的底层机制。不过,我很高兴地报告,该问题已成功解决。

var wg sync.WaitGroup
wg.Add(1)

for _, partition := range p.PartitionIDs {
    go func(partition string) {
        defer wg.Done()

        partitionClient, err := consumerClient.NewPartitionClient(partition, nil)
        if err != nil {
            panic(err)
        }

        receiveCtx, cancel := context.WithTimeout(context.TODO(), time.Second*30)
        defer cancel()

        for {
            events, err := partitionClient.ReceiveEvents(receiveCtx, 1, nil)

            if err != nil && !errors.Is(err, context.DeadlineExceeded) {
                panic(err)
            }

            for _, evt := range events {
                fmt.Printf("partition: %s\n", partition)
                fmt.Printf("Body: %s\n", string(evt.Body))
            }
        }
    }(partition)
}

wg.Wait()

我对 Azure 客户支持服务团队提供的宝贵帮助表示感谢。

终于介绍完啦!小伙伴们,这篇关于《学习如何使用最新事件的 Azure Event Hubs Go SDK (azeventhubs)》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>