自己的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,查找资料,

  1. 将C:\Users\{用户名}\.erlang.cookie 复制到 C:\Windows\System32\config\systemprofile 目录。
  2. 重启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() 方法即可

posted @ 2020-05-30 10:35  夜雨星空99  阅读(329)  评论(0编辑  收藏  举报