Я искал информацию об ошибке в репозитории Github и нашел код ErrorNotFound MessageErrorCondition = "amqp:not-found"
, но нет никаких объяснений этой ошибки.
Я сравнил ее с Exception types
в C # из официального документа Service Bus messaging exceptions
и моего тестирования, я думаю, это то же самое, что и ниже.
В моей среде go version go1.11.3 windows/amd64
, я запускаю аналогичный код без существующей очереди MyQueueName
, я получил похожую ошибку ниже.
FATAL: необработанная ошибка ссылка xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx: код состояния 404 и описание: объект обмена сообщениями 'sb: //.servicebus.windows.net/MyQueueName' не найден .TrackingId: f9fc309d-xxxx-xxxx-xxxx-8fccd694f266_G42, SystemTracker: .servicebus.windows.MyQueueName, Timestamp: 2019-01-25T09: 45: 28
Так что я думаю, что ошибка означает вашу очередь MyQueueName
в вашем коде нет в служебной шине Azure, вы должны сначала создать его, прежде чем использовать.
Между тем, как сказал @JerryLiu, в приведенном ниже коде есть некоторые ошибки.
err = q.ReceiveOne(ctx, servicebus.HandlerFunc(func(ctx context.Context, message *servicebus.Message) servicebus.DispositionAction {
fmt.Println(string(message.Data))
return message.Complete()
}))
Согласно годоку для azure-service-bus-go
,тип параметра метода servicebus.HanderFunc
должен быть HandlerFunc
, который является функцией возврата error
, а не servicebus.DispositionAction
в вашем коде.
И методу message.Complete
должен быть передан параметр ctx
(объект context
) и возвращено error
, которое не соответствует servicebus.DispositionAction
.Метод message.CompleteAction
возвращает servicebus.DispositionAction
, но не подходит для кода получения сообщения.
Пожалуйста, обратитесь к примеру godoc Example (QueueSendAndReceive)
, чтобы изменить ваш код.