Azure 从服务总线队列检索消息时出错
我试图使用Go从azure服务总线队列中提取消息,但在运行代码时出错。这是我的密码Azure 从服务总线队列检索消息时出错,azure,go,azure-servicebus-queues,Azure,Go,Azure Servicebus Queues,我试图使用Go从azure服务总线队列中提取消息,但在运行代码时出错。这是我的密码 func Example_queue_receive() { ctx, cancel :=context.WithTimeout(context.Background(),10*time.Second) defer cancel() connectionString :="Endpoint=sb://{my_service_name}.servicebus.windows.net/;Share
func Example_queue_receive() {
ctx, cancel :=context.WithTimeout(context.Background(),10*time.Second)
defer cancel()
connectionString :="Endpoint=sb://{my_service_name}.servicebus.windows.net/;SharedAccessKeyName = RootManageSharedAccessKey;SharedAccessKey={my_shared_access_key_value}"
// Create a client to communicate with a Service Bus Namespace.
ns, err := servicebus.NewNamespace(servicebus.NamespaceWithConnectionString(connectionString))
if err != nil {
fmt.Println(err)
}
// Create a client to communicate with the queue.
q, err := ns.NewQueue("MyQueueName")
if err != nil {
fmt.Println("FATAL: ", err)
}
err = q.ReceiveOne(ctx, servicebus.HandlerFunc(func(ctx context.Context, message *servicebus.Message) servicebus.DispositionAction {
fmt.Println(string(message.Data))
return message.Complete()
}))
if err != nil {
fmt.Println("FATAL: ", err)
}
}
这就是错误:
链接已分离,原因:*错误{条件:amqp:未找到}
我在Github repo中搜索了错误信息,找到了代码,但没有对错误的任何解释 我将其与官方文档
Service Bus messaging exceptions
和我的测试中的C#中进行了比较,我认为与下面相同
在我的环境中go版本go1.11.3 windows/amd64
,我在没有现有队列的情况下运行了类似的代码MyQueueName
,我得到了下面类似的错误
致命:未处理的错误链接xxxxxxxx-xxxx-xxxx-xxxx-XXXXXXXXXXXX:状态代码404和说明:找不到消息实体“sb://.servicebus.windows.net/MyQueueName”。TrackingId:f9fc309d-xxxx-xxxx-xxxx-8fccd694f266_G42,SystemTracker:.servicebus.windows.MyQueueName,时间戳:2019-01-25T09:45:28
因此,我认为该错误意味着代码中的队列MyQueueName
在Azure服务总线中不存在,您应该先创建它,然后再使用
同时,正如@JerryLiu所说,您下面的代码有一些错误
根据的godoc,servicebus.HanderFunc方法的参数类型必须是HandlerFunc
,这是代码中的函数返回错误,而不是servicebus.DispositionAction
方法message.Complete
应该传递一个参数ctx
(一个context
对象),并返回与servicebus.DispositionAction
不匹配的error
。message.CompleteAction
方法返回servicebus.DispositionAction
,但不适用于接收消息代码。
请参考godoc的示例来修改您的代码。与错误无关,但您的代码中似乎有错误,HandlerFunc应该返回错误
,而不是servicebus.DispositionAction
@Jerry Liu,@Peter Pan…我尝试了您提供的示例。但我又遇到了另一个错误。>无法将func文本(类型func(context.context,*servicebus.Message)错误)转换为类型servicebus.HandlerFunc
err = q.ReceiveOne(ctx, servicebus.HandlerFunc(func(ctx context.Context, message *servicebus.Message) servicebus.DispositionAction {
fmt.Println(string(message.Data))
return message.Complete()
}))