RabbitMQ入门学习系列(二),单生产者消费者
友情提示
我对我的文章负责,发现好多网上的文章 没有实践,都发出来的,让人走很多弯路,如果你在我的文章中遇到无法实现,或者无法走通的问题。可以直接在公众号《爱码农爱生活 》留言。必定会再次复查原因。让每一篇 文章都能顺利实现。道理讲明白 。原理讲清楚。代码必实现
快速阅读
安装好Rabbitmq-server,Erlang后,在vs中添加 Rabbitmq.client.建立两个控制台应用,实现单生产者单消费者的模式。
友情提示
我对我的文章负责,发现好多网上的文章 没有实践,都发出来的,让人走很多弯路,如果你在我的文章中遇到无法实现,或者无法走通的。可以直接公众号:爱码农爱生活 留言。必定会再次复查原因。让每一篇 文章的流程都能顺利实现。
1.安装rabittmq
提示没有安装elang,要先下载安装erlang
2.下载安装erlang
会自动打开Erlang的下载链接 地址。我的是win7 64位系统,所以我选择下面红框里的这个
3.Erlang和RabbitMq的下载地址备份
今天终于下载下来了。 为了避免以后因为网络问题下不下来,直接备份到百度云
- rabbitmq-server-3.7.15.exe 下载地址
链接:https://pan.baidu.com/s/1aTEtVwNvSV58gzbmLncQlA 提取码:3b1x
- otp_win64_22.0 -erlang 下载地址
链接:https://pan.baidu.com/s/1DF_KDKxTAHRGHZj6LYKdaA
提取码:9oy8
4.OTP是啥
Open Telecom Platform的缩写,简单理解就是一个框架 ,主要是把通用部分代码和业务代码进行分离。具体想多了解的可以参考:https://www.cnblogs.com/john-d/archive/2010/04/16/1711276.html
5.OTP22的安装
安装OTP22 ,直接打开,安装到自己的程序目录就行。 一直next到结束 。
6.安装RabbitMq-server
直接打开,安装到自己的程序目录就行。 一直next到结束
7.官方的入门教程代码下载
https://github.com/rabbitmq/rabbitmq-tutorials
8.RabbitMQ 入门代码 Hello world
Rabbitmq是一个消息中间件,生产者生产消息放入队列中,消费者从队列中拿消息进行消费。
分别给两个项目安装RabbitMQ.client依赖包。 如果用这种方式安装的话,产生的项目是netcore的
好了,vs打开启动项目
不过遇到vs不能调试的错误了。,记得以前也遇到过这个问题,网上好多人说是把msvsmon.exe从别的地方复制一份就可以了,但是我的不行,最后是通过添加删除程序解决的。
感觉这个错误,好像会出现在多个vs版本的时候会容易出现混乱。
但是发现新建的程序台程序是可以使用的。
这个先不用管了直接转为传统的方式,vs打开项目,Nuget添加RabbitMq.client进行测试
重新在console控制台里操作吧。
9.vs中创建生产者
先安装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();
}
10.消费者
消费者从消息队列中监听消息 ,要保持持续连接
代码:
注意:
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
RabbitMQ入门学习系列(二),单生产者消费者的更多相关文章
- RabbitMQ入门学习系列(四) 发布订阅模式
发布订阅模式 什么时发布订阅模式 把消息发送给多个订阅者.也就是有多个消费端都完整的接收生产者的消息 换句话说 把消息广播给多个消费者 消息模型的核心 RabbitMQ不发送消息给队列,生产者也不知道 ...
- RabbitMQ入门学习系列(七) 远程调用RPC
快速阅读 生产者和消费者启动以后,都有一个接收事件,消费者是接收事件是处理调用方法以后等待生产者的返回,生产者的接收事件是处理接收生产者发送的消息,进行处理.消费者发送的时候要在回调队列中加入一个标识 ...
- RabbitMQ入门学习系列(六) Exchange的Topic类型
快速阅读 介绍exchange的topic类型,和Direct类型相似,但是增加了"."和"#"的匹配.比Direct类型灵活 Topic消息类型 特点是:to ...
- RabbitMQ入门学习系列(五) Exchange的Direct类型
快速阅读 利用Exchange的Direct类型,实现对队列的过滤,消费者启动以后,输入相应的key值,攻取该key值对应的在队列中的消息 . 从一节知道Exchange有四种类型 Direct,To ...
- RabbitMQ学习系列二-C#代码发送消息
RabbitMQ学习系列二:.net 环境下 C#代码使用 RabbitMQ 消息队列 http://www.80iter.com/blog/1437455520862503 上一篇已经讲了Rabbi ...
- Bootstrap3.0入门学习系列
Bootstrap3.0入门学习系列规划[持续更新] 前言 首先在此多谢博友们在前几篇博文当中给与的支持和鼓励,以及在回复中提出的问题.意见和看法. 在此先声明一下,之前在下小菜所有的随笔文章中, ...
- RabbitMQ入门教程(十二):消息确认Ack
原文:RabbitMQ入门教程(十二):消息确认Ack 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csd ...
- Maven学习系列二(1-5)
Maven学习系列二(1-5) 本文转自 QuantSeven 博客,讲解精炼易懂,适合入门,链接及截图如下 http://www.cnblogs.com/quanyongan/category/47 ...
- Lucene.net入门学习系列(1)
Lucene.net入门学习系列(1) Lucene.net入门学习系列(1)-分词 Lucene.net入门学习系列(2)-创建索引 Lucene.net入门学习系列(3)-全文检索 这几天在公 ...
随机推荐
- 版本管理工具Git三种工作流
Git是分布式版本管理控制的工具.学习Git一般都是先去学习Git的命令. 但是学习完Git的基本命令之后还是不知道怎样使用Git.首先,我们要清楚的 一点是Git的使用方法其实有很多种,也就是说Gi ...
- python 3.7.4 安装 opencv
明确一下,我们需要使用python来调用opencv中的库函数,所以需要安装opencv-python. 主要需要安装: 1. opencv-python 2. numpy 第一步先来安装opencv ...
- 微博MySQL优化之路
数据库是所有架构中不可缺少的一环,一旦数据库出现性能问题,那对整个系统都回来带灾难性的后果.并且数据库一旦出现问题,由于数据库天生有状态(分主从)带数据(一般还不小),所以出问题之后的恢复时间一般不太 ...
- python中的exec和eval
exec 描述 exec 执行储存在字符串或文件中的 Python 语句,相比于 eval,exec可以执行更复杂的 Python 代码. 返回值 exec 返回值永远为 None. 需要说明的是在 ...
- 使用vue打包,vendor文件过大,或者是app.js文件很大
我的解决办法: 1.把不常改变的库放到index.html中,通过cdn引入,比如下面这样: 然后找到build/webpack.base.conf.js文件,在 module.exports = { ...
- 如何解决redis的并发竞争问题?
这个也是线上非常常见的一个问题,就是多客户端同时并发写一个key,可能本来应该先到的数据后到了,导致数据版本错了.或者是多客户端同时获取一个key,修改值之后再写回去,只要顺序错了,数据就错了. 而且 ...
- 用python查看网站被百度所有收录网址与标题进行SEO分析
SEO要是和python数据分析联合在一起,可谓是很好的方法,没事的时候尝试写的分析网站被百度收录的网址和标题. 首先得引入两个py模块,分别是:Beautiful Souprequests ...
- Oracle数据库的分页
Oracle的分页 ORACLE支持一个关键字ROWNUM,ROWNUM是一个伪列,该列不存在于任何一张表中,但是每张表都可以查询该列. 而该列在结果集的中值是结果集中每条记录的"行号&qu ...
- 什么是IAP?如何实现IAP?
发布时间:2008-09-01 来源:computer00 分享到: IAP是In Application Programming的首字母缩写,IAP是用户自己的程序在运行过程中对User F ...
- Backpack V
Description Given n items with size nums[i] which an integer array and all positive numbers. An inte ...