natsClient.Subscribe("some_subject", some_callback): 'some_callback' 回调 运行 是否在 Golang 自己的子程序中?

natsClient.Subscribe("some_subject", some_callback): Does the 'some_callback' callback run in its own subroutine in Golang?

基本上就是主题所说的内容。我很想知道每次调用回调方法时,golang 的 nats-lib 是否确保回调将 运行 在它自己的 goroutine 上(我 99% 确定它确实如此,但我需要肯定是因为我在 nats 中找不到任何明确的文档来最终说明它 - 如果我错过了什么,请随时复制粘贴任何链接)。

如果回调确实 运行 在它自己的 goroutine 中,我也想知道是否:

一个。每次特定订阅都使用相同的 goroutine

或 b。为回调的每次触发创建一个临时的 goroutine:在这种情况下,goroutine 在回调完成其工作后被处理

当你调用conn.Subscribe("some_subject", someCallback)时,如果定义了回调,它会执行这段代码:

// If we have an async callback, start up a sub specific
    // Go routine to deliver the messages.
    if cb != nil {
        sub.typ = AsyncSubscription
        sub.pCond = sync.NewCond(&sub.mu)
        go nc.waitForMsgs(sub)
    }

它为创建的订阅启动一个 goroutine。当消息到达时,它会在 waitForMsgs goroutine 中执行定义的回调。

简而言之,答案是 a.,它每次针对特定订阅使用相同的 goroutine。