# 把刚才下载好的插件 上传到 linux系统中
# 我是放在 放在 /home/x 目录下的
# 通过docker ps 查看 rabbitmq的容器ID或容器名称
docker cp 宿主文件 rabbitmq容器ID或容器名称:/目录
# 进去rabbitmq的容器中 rabbitmq-Container-A是容器名称
docker exec -it rabbitmq-Container-A /bin/bashcd plugins
ls -l | grep delayed
# 同样是在容器内plugins目录下,执行rabbitmq-plugins enable rabbitmq_delayed_message_exchange,启用插件
rabbitmq-plugins enable rabbitmq_delayed_message_exchange
# 退出容器
# 重启这个容器
docker restart rabbitmq-Container-A
案例
using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using System.Text;namespace RabbitMQ_Demo
{internal class Program{static void Main(string[] args){Producer();Console.ReadLine();}static async void Producer(){var factory = new ConnectionFactory{HostName = "172.30.164.66",Port = 5571,UserName = "admin",Password = "admin",VirtualHost="Zen_vhost"};using var connection = await factory.CreateConnectionAsync();using var channel = await connection.CreateChannelAsync(); //声明交换机 Zen-Delayed-DirectDictionary<string,object> args = new Dictionary<string, object>();args.Add("x-delayed-type", "direct");const string exchangeName = "Zen-Delayed-Direct";await channel.ExchangeDeclareAsync(exchangeName, "x-delayed-message", arguments:args );//声明一个队列await channel.QueueDeclareAsync("Qu1",durable:false,exclusive:false,autoDelete:false,arguments:null);await channel.QueueBindAsync("Qu1",exchangeName,routingKey:"delayed_routing_key");for (int i = 0; i < 5; i++){var message = $"[消息{i}] Hello World"; //模拟数据发送SendMess(channel, exchangeName: exchangeName, routingKey: "delayed_routing_key", body: message);Console.WriteLine($"消息:{message} 已发送 ——supplierID-{i}");}}static async void SendMess(IChannel channel, string exchangeName, string routingKey, string body){var message = Encoding.UTF8.GetBytes(body);//发送延迟消息 var prop = new BasicProperties();prop.Headers = new Dictionary<string, object>() {{ "x-delay", 20000 }};await channel.BasicPublishAsync(exchange: exchangeName,routingKey: routingKey,basicProperties: prop,mandatory:false,body: message);}}
}