猿问

为什么 RabbitMQ 的 PublishWithContext 不适用于 Go?

我正在通过在 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,也许这是一个问题?


红糖糍粑
浏览 135回答 1
1回答

慕妹3146593

这是一个简单的修复!问题是我使用的 RabbitMQ 版本较旧,所以我只需要更改我的go.mod版本:require github.com/rabbitmq/amqp091-go v1.1.0到:require github.com/rabbitmq/amqp091-go v1.4.0
随时随地看视频慕课网APP

相关分类

Go
我要回答