友情提示

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

快速阅读

​ 安装好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. 1+X证书学习日志——css 3D效果+立方体效果的实现

    形成一个3D的空间 transform-style: preserve-3d; ### 3D在2D的基础上,多了这些内容 位移 transform:translateZ(); 旋转 transform ...

  2. svg实现圆环进度条

    开源实现:https://github.com/lugolabs/circles 自行实现:圆环与svg画布间剩的空间太多. <!DOCTYPE html> <html> &l ...

  3. c++ 使用torchscript 加载训练好的pytorch模型

    1.首先官网上下载libtorch,放到当前项目下 2.将pytorch训练好的模型使用torch.jit.trace导出为.pt格式 import torch from skimage import ...

  4. MySQL Backup--innobackupex操作日志

    备份脚本: innobackupex \ --defaults-file="/export/servers/mysql/etc/my.cnf" \ --host="loc ...

  5. 使用protobuf (proto3, C++和go语言)

    在这里,我先讲述C++使用protobuf,之后,会补充使用go语言使用protobuf. 使用protobuf需要有如下步骤: 在.proto文件中定义消息(message)格式. 使用protob ...

  6. Android笔记(六十二)网络框架volley

    什么是Volley 很多时候,我们的APP都需要用到网络技术,使用HTTP协议来发送接收数据,谷歌推出了一个网络框架——volley,该框架适合进行数据量不大,但通信频繁的网络操作. 它的优点: (1 ...

  7. Java 使用Builder解决构造函数参数过多的问题

    原文:https://blog.csdn.net/michael_f2008/article/details/77715075 //Builder Pattern public class Nutri ...

  8. 一个自己编写的简单AC自动机代码-----AC automata get √

    最近一直在优化项目中字符串匹配的问题,于是就想起了自动机,之前也看过一些文章,一直没有实现,现在项目中要用,然后又看了一些关于AC自动机的文章,这里实现了一个简单的AC自动机的小接口,我是实现自动机状 ...

  9. CentOS7怎样安装MySQL5.7.22

    wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm下载mysql源安装包 yum install mysq ...

  10. P,R,F1 等性能度量(二分类、多分类)

    总结自<机器学习>周志华 2.3 目录 最常用的是查准率P(precision),查全率R(recall),F1 一.对于二分类问题 二.对于多分类问题 1.macro 2.micro 最 ...