RabbitMQ学习(1)(介绍)
我翻译官网的文档,仅供自己学习用...................
RabbitMQ 是什么,它就是一个消息队列,用在哪里,用在不需要及时处理的地方,比如发送验证码,发送邮件等等,多用户订阅,最大化发挥系统性能,
RabbitMQ是一个消息代理:它接受和转发消息。你可以把它想象成一个邮局:当你把邮件放在邮箱里时,你可以确定邮差先生最终会把邮件发送给你的收件人。在这个比喻中,RabbitMQ是邮政信箱,邮局和邮递员。
RabbitMQ与邮局的主要区别是它不处理纸张,而是接受,存储和转发数据消息的二进制数据块。
-
-
队列是RabbitMQ内部的邮箱名称。尽管消息流经RabbitMQ和您的应用程序,但它们只能存储在队列中。甲队列仅由主机的存储器&磁盘限制约束,它本质上是一个大的消息缓冲器。许多生产者可以发送消息到一个队列,许多消费者可以尝试从一个队列接收数据。这就是我们代表队列的方式:
-
消费与接受有类似的意义。一个消费者是一个程序,主要是等待接收信息:
请注意,生产者,消费者和经纪人不必驻留在同一主机上; 事实上在大多数应用程序中,他们没有
“P”是我们的生产者,“C”是我们的消费者。中间的盒子是一个队列 - 一个RabbitMQ代表消费者的消息缓冲区。
简单的 生产者 -> 消费者 模式 使用
1.消费者
//初始化一个连接 生产者 -> (发布者) var factory = new ConnectionFactory() { HostName = "localhost" }; using (var connection = factory.CreateConnection()) using (var channel = connection.CreateModel()) { //定义一个队列 channel.QueueDeclare(queue: "order", durable: true, exclusive: false, autoDelete: false, arguments: null); var body = Encoding.UTF8.GetBytes(message); IBasicProperties properties = channel.CreateBasicProperties(); //生产一条信息 channel.BasicPublish(exchange: "", routingKey: "order", basicProperties: properties, body: body); Console.WriteLine("开始发送:--{0}", message); }
2.简单的 消费者 模式
//初始化一个连接 生产者 -> (消费者) var factory = new ConnectionFactory() { HostName = "localhost" }; using (var connection = factory.CreateConnection()) using (var channel = connection.CreateModel()) { //对应的队列 channel.QueueDeclare(queue: "order", durable: true, 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("接受到信息: {0} mode:{1}", message, model); }; channel.BasicConsume("order", true, consumer); Console.ReadLine(); }