RabbitMQ 延迟队列 Golang

使用场景

  • 订单在十分钟之内未支付则自动取消
  • 新建店铺,如果在十天内都没有上传商品,则自动发送消息提醒
  • 用户注册成功后,如果三天内没有登录则进行短信提醒

插件

RabbitMQ实现延迟队列需要使用插件

# 查看插件
rabbitmq-plugins list

# 复制插件到容器
docker cp 插件名 容器id:/plugins

# 启用插件
rabbitmq-plugins enable rabbitmq_delayed_message_exchange

消息在ttl之后才会进入队列,进入队列前没有顺序之分

const (
	ExchangeName = "delay"
	QueueName    = "queue"
)

func init() {
	channel, _ := utils.GetRabbitMQChannel()

	table := amqp.Table{}
	table["x-delayed-type"] = "direct"

	_ = channel.ExchangeDeclare(ExchangeName, "x-delayed-message", false, false, false, false, table)

	queue, _ := channel.QueueDeclare(QueueName, false, false, false, false, nil)

	_ = channel.QueueBind(queue.Name, "delayMsg", ExchangeName, false, nil)
}

func main() {
	channel, _ := utils.GetRabbitMQChannel()

	headers := make(amqp.Table)
	headers["x-delay"] = 10000
	_ = channel.Publish(ExchangeName, "delayMsg", false, false,
		amqp.Publishing{
			Headers:     headers,
			ContentType: "text/plain",
			Body:        []byte("hello rabbit"),
		})
}

你可能感兴趣的:(#,消息队列,后端)