自己的win7第一次使用RabbitMQ
使用的过程中参照https://www.cnblogs.com/longlongogo/p/6489574.html所写的内容,结合自己使用过程中遇到的问题总结如下
一、环境搭建
1、由于RabbitMQ使用Erlang语言编写,所以先安装Erlang语言运行环境。我的是win764位,下载地址:http://www.erlang.org/downloads,本人下载了 OTP 19.2 Windows 64-bit Binary File,下载后直接安装就可以, 安装后手动编辑“path”加入安装路径D:\erl9.2\bin。打开 cmd ,输入 erl 后回车,如果看到如下的信息,表明安装成功
2、安装RabbitMQ服务端
下载地址:http://www.rabbitmq.com/,下载后安装,可以在cmd将cd到安装目录(..\rabbitmq_server-3.2.3\sbin)下使用命令rabbitmq-service install rabbitmq-service enable将其安装为服务
然后使用rabbitmq-service start启动服务。使用rabbitmqctl status查看启动状态
然后发现报错了Error: unable to perform an operation on node,查找资料,
- 将C:\Users\{用户名}\.erlang.cookie 复制到 C:\Windows\System32\config\systemprofile 目录。
- 重启rabbitMQ服务
然后解决了,然后使用命令
rabbitmqctl add_user JC JayChou //创建用户JC密码为JayChou rabbitmqctl set_permissions JC ".*" ".*" ".*" //赋予JC读写所有消息队列的权限 rabbitmqctl set_user_tags JC administrator //分配用户组
增加了自己的管理用户,并使用rabbitmq-plugins enable rabbitmq_management开启rabbitmq_management插件,在web界面查看和管理RabbitMQ服务
暂时就到这里了
三、创建第一个发送客户端
发送成功,运行了 两次,然后在web页看到队列有两条数据。
下面写个接收端:
四、RabbitMQ基本信息
1、RabbitMQ的基本结构
Channel:信道,仅仅创建了客户端到Broker之间的连接Connection后,客户端还是不能发送消息的。需要在Connection的基础上创建Channel,AMQP协议规定只有通过Channel才能执行AMQP的命令,一个Connection可以包含多个Channel。之所以需要Channel,是因为TCP连接的建立和释放都是十分昂贵的。
2、方法:
QueueDeclare、ExchangeDeclare、QueueBind、BasicPublish
3、RabbitMQ的四种Exchange:
fanout:把所有发送到该Exchange的消息投递到所有与它绑定的队列中。主要用于发布/订阅的一些场景,如用户注册了我们的网站后,我们通过短信和邮件两种方式通知用户。
direct:把消息投递到那些binding key与routing key完全匹配的队列中。
topic:将消息路由到binding key与routing key模式匹配的队列中。
header类型exchange不是通过routingKey进行路由的,而是通过Headers
4、消息确认
生产者端消息确认(tx机制和Confirm模式)、消费者端消息确认(自动确认和显示确认)
5、RabbitMQ的消费模式
EventingBasicConsumer、BasicGet、QueueBaicConsumer
6、Qos(服务质量)
RabbitMQ提供的Qos(服务质量)可以完美解决上边的问题,使用Qos时,Broker不会再把消息一股脑的发送给消费者,我们可以设置每次传输给消费者的消息条数n,消费者把这n条消息处理完成后,再获取n条数据进行处理,这样就不用担心消息丢失、服务端内存爆满的问题了,因为没有发送的消息状态都是Ready,所以当我们新增一个消费者时,消息也可以立即发送给新增的消费者。注意Qos只有在消费端使用显示确认时才有效,使用Qos的方式十分简单,在消费端调用 channel.BasicQos() 方法即可