友情提示
我对个人文章负责,发现好多网上的文章 没有实践,都发出来的,让人走不少弯路,若是你在个人文章中遇到没法实现,或者没法走通的问题。能够直接在公众号《爱码农爱生活 》留言。一定会再次复查缘由。让每一篇 文章都能顺利实现。道理讲明白 。原理讲清楚。代码必实现html
安装好Rabbitmq-server,Erlang后,在vs中添加 Rabbitmq.client.创建两个控制台应用,实现单生产者单消费者的模式。git
我对个人文章负责,发现好多网上的文章 没有实践,都发出来的,让人走不少弯路,若是你在个人文章中遇到没法实现,或者没法走通的。能够直接公众号:爱码农爱生活 留言。一定会再次复查缘由。让每一篇 文章的流程都能顺利实现。github
提示没有安装elang,要先下载安装erlangc#
会自动打开Erlang的下载连接 地址。个人是win7 64位系统,因此我选择下面红框里的这个
api
今天终于下载下来了。 为了不之后由于网络问题下不下来,直接备份到百度云数组
连接:https://pan.baidu.com/s/1aTEtVwNvSV58gzbmLncQlA 提取码:3b1x服务器
Open Telecom Platform的缩写,简单理解就是一个框架 ,主要是把通用部分代码和业务代码进行分离。具体想多了解的能够参考:https://www.cnblogs.com/john-d/archive/2010/04/16/1711276.html网络
安装OTP22 ,直接打开,安装到本身的程序目录就行。 一直next到结束 。框架
直接打开,安装到本身的程序目录就行。 一直next到结束测试
https://github.com/rabbitmq/rabbitmq-tutorials
Rabbitmq是一个消息中间件,生产者生产消息放入队列中,消费者从队列中拿消息进行消费。
分别给两个项目安装RabbitMQ.client依赖包。 若是用这种方式安装的话,产生的项目是netcore的
好了,vs打开启动项目
不过遇到vs不能调试的错误了。,记得之前也遇到过这个问题,网上好多人说是把msvsmon.exe从别的地方复制一份就能够了,可是个人不行,最后是经过添加删除程序解决的。
感受这个错误,好像会出如今多个vs版本的时候会容易出现混乱。
可是发现新建的程序台程序是可使用的。
这个先不用管了直接转为传统的方式,vs打开项目,Nuget添加RabbitMq.client进行测试
从新在console控制台里操做吧。
先安装RabbitMQ.Client
生产者代码:
注意:建立的连接若是是远程服务器,要换成远程服务器的IP地址,咱们是用localhost在本地测试
建立完连接之后,再建立信道。大多数的api调用都是在信道中完成的。
最后声明一个队列,把咱们要发送的消息发送出去。
消息的内容在队列中存的是了一个字节数组 ,咱们通常用Encoding.UTF8.GetBytes
static void Main(string[] args) { var factory = new ConnectionFactory() { HostName = "localhost" }; using (var connection = factory.CreateConnection()) { using (var channel = connection.CreateModel()) { channel.QueueDeclare(queue: "hello", durable: false, exclusive: false, autoDelete: false, arguments: null); string message = "hello world"; var body = Encoding.UTF8.GetBytes(message); channel.BasicPublish(exchange: "", routingKey: "hello", basicProperties: null, body: body); Console.WriteLine("[x] sent {0}", message); } } Console.WriteLine(""); Console.ReadLine(); }
消费者从消息队列中监听消息 ,要保持持续链接
代码:
注意:
1. Console.ReadLine();的位置,要放在channel代码块中。
static void Main(string[] args) { var factory = new ConnectionFactory() { HostName = "localhost" }; using (var connection = factory.CreateConnection()) { using (var channel = connection.CreateModel()) { channel.QueueDeclare(queue: "hello", durable: false, exclusive: false, autoDelete: false, arguments: null); //如下是区别生产者的 var consumer = new EventingBasicConsumer(channel); consumer.Received += (sender, e) => { var body = e.Body; var message = Encoding.UTF8.GetString(body); Console.WriteLine("Received {0}", message); }; channel.BasicConsume(queue: "hello", autoAck: true, consumer: consumer); Console.WriteLine(""); Console.ReadLine(); } } }
代码下载:
连接:https://pan.baidu.com/s/1ETUFWm2ilTY4eONkSqaz-A 提取码:bims