队列的 思想 大概 就是 先进先出,当然 不是 从进的地方出去,呵呵 在使用 rabbitmq 的 时候感觉 也是 这样。发送(进),接收(出)
rabbitmq 在安装好了之后 会有一个 默认的 guest 账号,现在 先建立一个新的账号 test
使用提供的 工具 设置
rabbitmqctl add_user Test root // 添加Test 用户,密码为 root
rabbitmqctl set_user_tags Test administrator // Test 的 角色 为 administrator
rabbitmqctl set_permissions -p / Test ".*" ".*" ".*" // 设置 Test 的权限
rabbitmqctl list_users // 查看用户
rabbitmq: rabbitmqctl stop_app // 关闭
rabbitmqctl reset // 还原
rabbitmqctl start_app // 启动
///发送消息
var factory = new ConnectionFactory(); //创建连接工厂并初始化 factory.HostName = "localhost"; factory.UserName = "Test"; factory.Password = "123456"; using (var connection = factory.CreateConnection()) // 创建一个连接 { using (var channel = connection.CreateModel()) // 创建一个通道 { channel.QueueDeclare("VideoTest", false, false, false, null); // 创建 一个队列 for (int i = 0; i < 10; i++) { string message = "发送消息到服务器进行保存" + i; var body = Encoding.UTF8.GetBytes(message); channel.BasicPublish("", "VideoTest", null, body); //发送数据 Console.WriteLine(" set {0}", message); } } } Console.ReadLine();
这样 就可以得到 10 条数据了
/// 接收数据
1 Console.WriteLine("开始接受数据"); 2 3 4 var factory = new ConnectionFactory(); 5 factory.HostName = "localhost"; 6 factory.UserName = "Test"; 7 factory.Password = "123456"; 8 9 using (var connection = factory.CreateConnection()) 10 { 11 using (var channel = connection.CreateModel()) 12 { 13 channel.QueueDeclare("VideoTest", false, false, false, null); 14 15 var consumer = new QueueingBasicConsumer(channel); 16 channel.BasicConsume("VideoTest", true, consumer); 17 18 Console.WriteLine(" waiting for message."); 19 while (true) 20 { 21 var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue(); 22 23 var body = ea.Body; 24 var message = Encoding.UTF8.GetString(body); 25 Console.WriteLine("Received {0}", message); 26 27 } 28 } 29 } 30 31 Console.ReadLine(); 32 33
当接收到了, 会发现 队列中的数据 被删掉了