如何保持我的连接处于活动状态,以便使用兔子MQ线程/amqp发布消息?

由于每次打开用于发布的连接成本高昂,我正在尝试实现某种方法来保持连接处于活动状态,并在我的应用程序中共享它以发布消息。


var (

    Connection *amqp.Connection

    Channel *amqp.Channel

    err error

)


func Connect() {


    Connection, err = amqp.Dial("amqp://guest:guest@localhost:5672")

    FailOnError(err, "Failed to connect to RabbitMQ")


    Channel, err = Connection.Channel()

    FailOnError(err, "Failed to open a channel")

}


func CloseConnection() {

    err = Channel.Close()

    FailOnError(err, "Failed to close channel ")

    err = Connection.Close()

    FailOnError(err, "Failed to close connection ")

}


func KeepAlive() {


    queue, err := Channel.QueueDeclare(

        "hello", // name

        false,   // durable

        false,   // delete when unused

        false,   // exclusive

        false,   // no-wait

        nil,     // arguments

    )

    FailOnError(err, "couldn't publish tics")


    tic := "tic"

    for {

        err := Channel.Publish(

            "",         // exchange

            queue.Name, // routing key

            false,      // mandatory

            false,      // immediate

            amqp.Publishing {

                ContentType: "text/plain",

                Body:        []byte(tic),

                Expiration: "5000",

            })

        FailOnError(err, "couldn't publish tics")

        time.Sleep(5 *time.Second)

    }

}


func FailOnError(err error, msg string) {

    if err != nil {

        log.Fatalf("%s: %s", msg, err)

    }

}

该函数是一个无限循环,每5秒发送一条虚拟消息,该消息的TTL也为5秒,因此它被销毁。KeepAlive


在这里,我正在创建连接并调用 goroutine,以便它可以在后台工作,使我的连接始终处于活动状态。KeepAlive


我的问题:


我觉得这种方式只是一种解决方法,尽管我试图寻找如何保持活力的例子,但似乎所有这些例子都对消费者感兴趣。有没有更简洁的方法来保持我的连接处于活动状态?


只要我的应用程序运行不良,我的连接就会保持活动状态吗?性能明智(网络,内存使用情况)?注意:我计划与普罗米修斯一起监视它以观看表演,但是任何关于我可能面临的问题的说明都会有所帮助


附注:发送的这些抽搐将被发送到虚拟队列,因为如果我将其发送到我使用其他服务的消息的队列,它将卡在没有TTL的实际消息后面,并且这些抽搐将变得非常大。


吃鸡游戏
浏览 63回答 1
1回答

交互式爱情

使用斯特雷德韦/阿姆克普,您不需要自己实现保持活力。该库已提供此机制。方法阿姆克普。Dial 构造默认检测信号为 10 秒的 。您可以在此处查看代码:Connection// connection.gofunc Dial(url string) (*Connection, error) {    return DialConfig(url, Config{        Heartbeat: defaultHeartbeat,        Locale:    defaultLocale,    })}这通过在打开的连接上发送检测信号帧来工作,这将比将假消息发送到仅出于该原因创建的队列更有效且更易于维护。从上面可以看出,您可以使用amqp更改连接检测信号。拨号配置:    conn, err := amqp.DialConfig(url, amqp.Config{         Heartbeat: 5 * time.Second,     })您可能希望自己实现的是错误时重新连接逻辑。为此,您可以在这里找到一些有用的信息:如何检查通道是否仍在阅读方式/ amqp RabbitMQ客户端中工作?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go