以前用过memcacheq、msmq、redis的list做队列,在用memcacheq的时候,还是在linux下,当然这个不是我安装的,我只是用c#操作而已,从那以后对队列处理并发能力有了新的认识,一点一点的使用过msmq,最近用的就是redis的list做队列,个人感觉redis适合中小企业,毕竟不是纯粹做队列的,好了,不说太多,继续rabbitmq。
1.环境:
windows7
vs2015
2.驱动rabbitmq.client
我直接使用nuget了,我用的版本4.1.3
![](https://images2017.cnblogs.com/blog/709254/201709/709254-20170920225654353-2092968378.png)
3.代码
这次我就先不写帮助类了,以后rabbitmq文章里在用帮助类。
Program.cs
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using RabbitMQ.Client; using RabbitMQ.Client.Events; namespace RabbitMQTest { class Program { static void Main(string[] args) { Write(); Console.WriteLine("=================================================="); Read(); Console.ReadLine(); } /// <summary> /// 写入队列 /// </summary> public static void Write() { var factory = new ConnectionFactory() { HostName = "127.0.0.1", UserName = "rbqtest", Password = "123456", Port= 5672 }; using (var connection = factory.CreateConnection()) using (var channel = connection.CreateModel()) { channel.QueueDeclare(queue: "writeLog", durable: false, exclusive: false, autoDelete: false, arguments: null); for (int i = 0; i < 80; i++) { string message = "皮皮虾皮皮虾皮皮虾皮皮虾皮皮虾皮皮虾" + i.ToString(); var body = Encoding.UTF8.GetBytes(message); channel.BasicPublish(exchange: "", routingKey: "writeLog", basicProperties: null, body: body); Console.WriteLine("Write {0}", message); } } } /// <summary> /// 读取队列 /// </summary> public static void Read() { var factory = new ConnectionFactory() { HostName = "127.0.0.1", UserName = "rbqtest", Password = "123456", VirtualHost = "/" }; using (var connection = factory.CreateConnection()) using (var channel = connection.CreateModel()) { channel.QueueDeclare(queue: "writeLog", durable: false, exclusive: false, autoDelete: false, arguments: null); var consumer = new EventingBasicConsumer(channel); consumer.Received += (model, ea) => { var body = ea.Body; var message = Encoding.UTF8.GetString(body); Console.WriteLine(" Read {0}", message); }; channel.BasicConsume(queue: "writeLog", noAck: true, consumer: consumer); Console.WriteLine(" Press [enter] to exit."); Console.ReadLine(); } } } }
结果: