友情提示

我对我的文章负责,发现好多网上的文章 没有实践,都发出来的,让人走很多弯路,如果你在我的文章中遇到无法实现,或者无法走通的问题。可以直接在公众号《爱码农爱生活 》留言。必定会再次复查原因。让每一篇 文章都能顺利实现。道理讲明白 。原理讲清楚。代码必实现

快速阅读

​ 安装好Rabbitmq-server,Erlang后,在vs中添加 Rabbitmq.client.建立两个控制台应用,实现单生产者单消费者的模式。

友情提示

​ 我对我的文章负责,发现好多网上的文章 没有实践,都发出来的,让人走很多弯路,如果你在我的文章中遇到无法实现,或者无法走通的。可以直接公众号:爱码农爱生活 留言。必定会再次复查原因。让每一篇 文章的流程都能顺利实现。

1.安装rabittmq

提示没有安装elang,要先下载安装erlang

2.下载安装erlang

会自动打开Erlang的下载链接 地址。我的是win7 64位系统,所以我选择下面红框里的这个

3.Erlang和RabbitMq的下载地址备份

今天终于下载下来了。 为了避免以后因为网络问题下不下来,直接备份到百度云

  1. rabbitmq-server-3.7.15.exe 下载地址

链接:https://pan.baidu.com/s/1aTEtVwNvSV58gzbmLncQlA 提取码:3b1x

  1. 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代码块中。
  1. 流程还是建立连接-》创建信道-》定义队列=》
  2. 因为可能先启动消费者,所以队列也需要进行声明 一下。
  3. 在使用队列时,要保证队列必须存在。
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入门学习系列(二),单生产者消费者的更多相关文章

  1. RabbitMQ入门学习系列(四) 发布订阅模式

    发布订阅模式 什么时发布订阅模式 把消息发送给多个订阅者.也就是有多个消费端都完整的接收生产者的消息 换句话说 把消息广播给多个消费者 消息模型的核心 RabbitMQ不发送消息给队列,生产者也不知道 ...

  2. RabbitMQ入门学习系列(七) 远程调用RPC

    快速阅读 生产者和消费者启动以后,都有一个接收事件,消费者是接收事件是处理调用方法以后等待生产者的返回,生产者的接收事件是处理接收生产者发送的消息,进行处理.消费者发送的时候要在回调队列中加入一个标识 ...

  3. RabbitMQ入门学习系列(六) Exchange的Topic类型

    快速阅读 介绍exchange的topic类型,和Direct类型相似,但是增加了"."和"#"的匹配.比Direct类型灵活 Topic消息类型 特点是:to ...

  4. RabbitMQ入门学习系列(五) Exchange的Direct类型

    快速阅读 利用Exchange的Direct类型,实现对队列的过滤,消费者启动以后,输入相应的key值,攻取该key值对应的在队列中的消息 . 从一节知道Exchange有四种类型 Direct,To ...

  5. RabbitMQ学习系列二-C#代码发送消息

    RabbitMQ学习系列二:.net 环境下 C#代码使用 RabbitMQ 消息队列 http://www.80iter.com/blog/1437455520862503 上一篇已经讲了Rabbi ...

  6. Bootstrap3.0入门学习系列

    Bootstrap3.0入门学习系列规划[持续更新]   前言 首先在此多谢博友们在前几篇博文当中给与的支持和鼓励,以及在回复中提出的问题.意见和看法. 在此先声明一下,之前在下小菜所有的随笔文章中, ...

  7. RabbitMQ入门教程(十二):消息确认Ack

    原文:RabbitMQ入门教程(十二):消息确认Ack 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csd ...

  8. Maven学习系列二(1-5)

    Maven学习系列二(1-5) 本文转自 QuantSeven 博客,讲解精炼易懂,适合入门,链接及截图如下 http://www.cnblogs.com/quanyongan/category/47 ...

  9. Lucene.net入门学习系列(1)

    Lucene.net入门学习系列(1)   Lucene.net入门学习系列(1)-分词 Lucene.net入门学习系列(2)-创建索引 Lucene.net入门学习系列(3)-全文检索 这几天在公 ...

随机推荐

  1. 查询本地ip以及ip地址库查询

    四种方法查询本地ip from urllib2 import urlopen from json import load my_ip = urlopen('http://ip.42.pl/raw'). ...

  2. ORM 对表操作 详解

    目录 ORM对表操作详解 表结构 ORM对表的 增 删 改 查 基于对象的跨表查询 -- 类似于子查询 基于双下划的跨表查询 -- 连表 join ORM对表的操作示例 正向查 与 反向查 relat ...

  3. requests模块 简单使用

    目录 requests模块 简单使用 Anaconda简单了解 简单了解 requests模块 使用requests模块 爬取搜狗首页源码数据 实现一个简易的网页采集器 解决乱码问题 解决UA检测问题 ...

  4. Django Redis配置

    Django Redis配置 # Django默认不支持redis,需要第三方插件来支持 pipenv install django-redis pipenv install hiredis # 不是 ...

  5. zabbix-proxy及ELK

    1.添加tomcat监控模版 yum install java-1.8.0-openjdk tomcat-webapps tomcat-admin-webapps tomcat-docs-webapp ...

  6. SpringCloud_Eureka与Zookeeper对比

    关系型数据库与非关系型数据库及其特性: RDBMS(Relational Database Management System 关系型数据库) :mysql/oracle/sqlServer等   = ...

  7. SpringCloud2.0 Config 分布式配置中心 基础教程(十一)

    Spring Cloud Config 简介 Spring Cloud Config为分布式系统中的外部化配置提供服务器和客户端支持.使用Config Server,您可以在所有环境中管理应用程序的外 ...

  8. 如何设置CentOS 7获取动态IP和静态IP

    自动获取动态IP地址 1.输入“ip addr”并按回车键确定,发现无法获取IP(CentOS 7默认没有ifconfig命令),记录下网卡名称(本例中为ens33). 2.输入“cd /etc/sy ...

  9. js实现点击按钮时显示弹框,点击按钮及弹框以外的区域时隐藏弹框

    转自https://blog.csdn.net/yimawujiang/article/details/86496936 问题:js实现点击按钮时显示弹框,点击按钮及弹框以外的区域时隐藏弹框? 方案一 ...

  10. Sharding-JDBC(二)2.0.3版本实践

    目录 一.Sharding-JDBC依赖 二.分片策略 1. 标准分片策略 2. 复合分片策略 3. Inline表达式分片策略 4. 通过Hint而非SQL解析的方式分片的策略 5. 不分片的策略 ...