为什么RabbitMQ的PublishWithContext不能在Go语言中使用?

1tu0hz3e  于 2022-11-08  发布在  RabbitMQ
关注(0)|答案(1)|浏览(347)

我正在通过在GoLang中构建一个小应用程序来学习RabbitMQ-下面是这个示例:https://www.rabbitmq.com/tutorials/tutorial-one-go.html。我的项目具有以下结构:

project
└───cmd
│   └───api
│   │   main.go
│   └───internal
│   │   rabbitmq.go

cmd/internal/rabbitmq.go中,我有下面的代码- (错误用) 删除:

import (
    ...
    amqp "github.com/rabbitmq/amqp091-go"
)

func NewRabbitMQ() (*RabbitMQ, error) {
    // Initialise connection to RabbitMQ
    conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/")

    // Initialise Channel
    ch, err := conn.Channel() 

    // Initialise Queue
    q, err := ch.QueueDeclare(
        "hello", // name
        false,   // durable
        false,   // delete when unused
        false,   // exclusive
        false,   // no-wait
        nil,     // arguments
    )

    // Set Context
    ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
    defer cancel()

    body := "Hello World!"
    err = ch.PublishWithContext( // errors here
       ctx,    // context
       "",     // exchange
       q.Name, // routing key
       false,  // mandatory
       false,  // immediate
       amqp.Publishing{
          ContentType: "text/plain",
          Body:        []byte(body),
       })

    return &RabbitMQ{}, nil
}

就我所知,从文档中,这是它应该如何实现的,所以我不知道为什么它是错误的。
我试着在谷歌上寻找这个问题的帮助,但是没有用。我用的是Go 1.19,可能是这个问题吧?

k5ifujac

k5ifujac1#

感谢@oakad,这是一个简单的修复!问题是我使用的RabbitMQ版本是一个旧的版本,所以我只需要将我的go.mod从:

require github.com/rabbitmq/amqp091-go v1.1.0

收件人:

require github.com/rabbitmq/amqp091-go v1.4.0

相关问题