由于每次打开用于发布的连接成本高昂,我正在尝试实现某种方法来保持连接处于活动状态,并在我的应用程序中共享它以发布消息。
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的实际消息后面,并且这些抽搐将变得非常大。
交互式爱情
相关分类