使用场景
- 订单在十分钟之内未支付则自动取消
- 新建店铺,如果在十天内都没有上传商品,则自动发送消息提醒
- 用户注册成功后,如果三天内没有登录则进行短信提醒
插件
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"),
})
}