【发布时间】:2018-12-20 10:13:49
【问题描述】:
我实际上正在关注 RabbitMQ 的教程。我希望我的应用程序的微服务能够通过 RabbitMQ 进行通信。
我创建了一个发布者库,每次我想从 microservice_a 向 microservice_b 发送消息时都会使用它。类似的东西:
sender.go:
// SendEmail ...
func (s *MessageQueue) SendEmail(body string) {
conn, err := amqp.Dial(fmt.Sprintf("amqp://%s:%s@%s:%d", s.Username, s.Password, s.Host, s.Port))
failOnError(err, "Failed to connect to RabbitMQ")
defer conn.Close()
ch, err := conn.Channel()
failOnError(err, "Failed to open a channel")
defer ch.Close()
q, err := ch.QueueDeclare(
s.QueueName, // name
true, // durable
false, // delete when unused
false, // exclusive
false, // no-wait
nil, // arguments
)
failOnError(err, "Failed to declare a queue")
err = ch.Publish(
"", // exchange
q.Name, // routing key
false, // mandatory
false, // immediate
amqp.Publishing{
ContentType: "text/plain",
Body: []byte(body),
})
log.Info(" [x] Sender sent: %s", body)
failOnError(err, "Failed to publish a message")
}
我只是想知道对于发布者来说,每次发送消息时最好拨打rabbitMQ并关闭RabbitMQ/通道,或者我是否应该创建专用函数。
【问题讨论】:
-
你在问什么是“最好的”——但这取决于你的应用程序。如果你每秒发送数百条消息,你会发现这种方法根本行不通。如果您每分钟发送 1 条消息,那么这很好。这完全取决于系统的预期运行方式。