rabbitMQ使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rabbitMQ使用相关的知识,希望对你有一定的参考价值。

参考技术A 实现生产者发送消息,消费者接收消息

生产者

消费者

结果

Work Queues:与入门程序的简单模式相比,多了一个或一些消费端,多个消费端共同消费同一个队列中的消息。

应用场景:对于任务过重或任务较多情况使用工作队列可以提高任务处理的速度.

消费者1与消费者2 所得到的消息数量是一致的

消费者一

消费者二

生产者

结果

根据接收者的速度的快慢,接收速度快的会接收的多,速度慢的接收的少

发送者

接收者1

接收者2

生产者

boolean autoAck = true;//自动确认模式,一旦rabbitmq将消息分发给消费者,该消息就会从内存中删除。

这种情况下,如果杀死正在执行的消费者,就会丢失正在处理的消息

boolean autoAck = false;//手动模式,如果一个消费者挂掉,消息就会交付给其他消费者,rabbitmq支持消息应答,消费者发送一个消息应答,告诉rabbitmq,这个消息我已经处理完成,你可以删除了,然后rabbitmq就从内存中将这条消息删除。

消息应答默认是打开的,也就是false。

一个生产者,多个消费者

每个消费者都有自己的队列

生产者没有直接把消息发送到队列,而是发送到了交换机里面

每个队列都要绑定到交换机上

生产者发送的消息,经过交换机到达队列,实现一个消息被多个消费者消费

在订阅模型中,多了一个 Exchange 角色,而且过程略有变化:

P:生产者,也就是要发送消息的程序,但是不再发送到队列中,而是发给X(交换机)

C:消费者,消息的接收者,会一直等待消息到来

Queue:消息队列,接收消息、缓存消息

Exchange:交换机(X)。一方面,接收生产者发送的消息。另一方面,知道如何处理消息,例如递交给某个特别队列、递交给所有队列、或是将消息丢弃。到底如何操作,取决于Exchange的类型。Exchange有常见以下3种类型:

Fanout:广播,将消息交给所有绑定到交换机的队列

Direct:定向,把消息交给符合指定routing key 的队列

Topic:通配符,把消息交给符合routing pattern(路由模式) 的队列

Exchange(交换机)只负责转发消息,不具备存储消息的能力,因此如果没有任何队列与 Exchange 绑定,或者没有符合路由规则的队列,那么消息会丢失!

Fanout

消费者1

消费者2(与消费者1相比只有QUEUE_NAME不同)

生产者

消费者一、消费者二都能收到消息

路由用途:向队列推送消息

fanout:不处理路由键

direct  处理路由键

发送消息的时候,需要带一个routing key

接受者只能接收到对应路由键的发送者发送的消息

发送者

接收者1     

主题模式:通过匹配,可以接收到制定类型的消息。

# 一个或多个

*一个

发送者:

接收者1:

接收者2:

接收者3:

消费者1只能接收到goods.add的消息

消费者1能接收到goods.*的消息,以goods开头, . 后面跟一个段落的消息

消费者1能接收到goods.add的消息,以goods开头, . 后面跟多个段落的消息

当发送者设置routing_key为:String routing_key="goods.delete.option";只能接收者3能接收到。

rabbitMq使用笔记一:Window下安装使用RabbitMQ

RabbitMQ官网 http://www.rabbitmq.com
下载地址 http://www.rabbitmq.com/download.html

一 Windows下安装RabbitMq

1.1 下载安装包

1.1.1 下载RabbitMq

安装参考 http://www.rabbitmq.com/install-windows.html

官网上说明,在windows上安装rabbitmq-server时,需要先安装Erlang Windows Binary File,如果Windows环境中曾经装过32位的,现在要升级为64位的,必须先卸载。官网原话

If you have an existing installation and are planning to upgrade the Erlang VM from a 32bit to a 64bit version then you must uninstall the broker before upgrading the VM. 

1.1.1 下载Erlang

Erlang 下载安装地址 http://www.erlang.org/downloads

关于Erlang的介绍请参考文章
http://blog.csdn.net/zzhongcy/article/details/38823197

1.2 安装Erlang

1.2.1 运行安装

下载otp_win64_19.2.exe
运行安装otp_win64_19.2.exe

1.2.2 修改环境变量

1) 添加系统环境变量ERLANG_HOME,值为安装目录.
2) 修改系统环境变量Path,在PATH变量中添加“%ERL_HOME%\\bin”
3) 重启电脑后,在控制台输入 erl,如果出现类似“Eshell V6.1 (abort with ^G)”字样,说明安装成功。

**官方说明上没有这块,试了下,不设置环境变量也是可以运行RabbitMQ的**

1.3 安装RabbitMq

1.3.1 运行安装

下载rabbitmq-server-3.6.6.exeWindows版本
运行安装rabbitmq-server-3.6.6.exe

1.3.2 运行服务

rabbitMq默认自启动
可以修改rabbitmq的配置文件,也可以用默认配置运行。在开始菜单栏里可以看到运行指令reinstall/remove/start/stop

或者直接打开RabbitMQ Command Prompt命令框。

1.3.3 端口号访问

当防火墙或者其他安全工具阻止RabbitMQ端口号绑定时,服务启动会失败。确保下列端口可以打开:

4369 (epmd)
5672, 5671 (AMQP 0-9-1 and 1.0 without and with TLS)
25672. This port used by Erlang distribution for inter-node and CLI tools communication and is allocated from a dynamic range (limited to a single port by default, computed as AMQP port + 20000). See networking guide for details.
15672 (if management plugin is enabled)
61613, 61614 (if STOMP is enabled)
1883, 8883 (if MQTT is enabled)

1.3.4 默认用户访问

该代理创建了一个默认的账号“guest”密码“guest”的访问账号。未配置的客户端默认使用该账号凭据,但仅限于访问本地。如果是网络访问则需要另外配置。其他用户访问参考访问控制文档

1.3.5 管理服务

使用rabbitmqctl 管理服务,参见官方文档
http://www.rabbitmq.com/man/rabbitmqctl.1.man.html

 -n node 默认node名称是"rabbit@server",如果你的主机是'server.example.com',那么node名是rabbit@server
 -q 安静输出模式,信息会被禁止输出
rabbitmqctl [-n node] [-t timeout] [-q] command [command options...]
1.3.5.1 基本管理功能
stop [<pid_file>]  
    #停止在erlang node上运行的rabbitmq,会使rabbitmq停止
stop_app   
    #停止erlang node上的rabbitmq的应用,但是erlang node还是会继续运行的
start_app   
    #启动erlan node上的rabbitmq的应用
wait <pid_file>  
    #等待rabbitmq服务启动
reset  
    #初始化node状态,会从集群中删除该节点,从管理数据库中删除所有数据,例如vhosts等等。在初始化之前rabbitmq的应用必须先停止
force_reset  
    #无条件的初始化node状态
rotate_logs <suffix>   
    #轮转日志文件
1.3.5.2 cluster管理
join_cluster <clusternode> [--ram]  
    #clusternode表示node名称,--ram表示node以ram node加入集群中。默认node以disc node加入集群,在一个node加入cluster之前,必须先停止该node的rabbitmq应用,即先执行stop_app。
cluster_status  
    #显示cluster中的所有node
change_cluster_node_type disc | ram  
    #改变一个cluster中node的模式,该节点在转换前必须先停止,不能把一个集群中唯一的disk node转化为ram node
forget_cluster_node [--offline]  
    #远程移除cluster中的一个node,前提是该node必须处于offline状态,如果是online状态,则需要加--offline参数。
update_cluster_nodes clusternode   
    #
sync_queue queue  
    #同步镜像队列
cancel_sync_queue queue    
    #
1.3.5.3 用户管理
add_user <username> <password>  
    #在rabbitmq的内部数据库添加用户
delete_user <username>  
    #删除一个用户
change_password <username> <newpassword>  
    #改变用户密码  \\\\改变web管理登陆密码
clear_password <username> 
    #清除用户密码,禁止用户登录
set_user_tags <username> <tag> ...
    #设置用户tags
list_users  
    #列出用户
add_vhost <vhostpath>  
    #创建一个vhosts
delete_vhost <vhostpath>  
    #删除一个vhosts
list_vhosts [<vhostinfoitem> ...]  
    #列出vhosts
set_permissions [-p <vhostpath>] <user> <conf> <write> <read>  
    #针对一个vhosts 给用户赋予相关权限
clear_permissions [-p <vhostpath>] <username>  
    #清除一个用户对vhosts的权限
list_permissions [-p <vhostpath>]   
    #列出哪些用户可以访问该vhosts
list_user_permissions <username>  
    #列出该用户的访问权限
set_parameter [-p <vhostpath>] <component_name> <name> <value>
    #
clear_parameter [-p <vhostpath>] <component_name> <key>
    #
list_parameters [-p <vhostpath>]
    #
1.3.5.4 policy管理

policy管理,策略用来控制和修改queues和exchange在集群中的行为,策略可以应用到vhost

set_policy [-p <vhostpath>] [--priority <priority>] [--apply-to <apply-to>]  
<name> <pattern> <definition>    
    #name 策略名称,pattern  正则表达式,用来匹配资源,符合的就会应用设置的策略,apply-to 表示策略应用到什么类型的地方,一般有queues、exchange和all,默认是all。priority 是个整数优先级,definition 是json格式设置的策略。
clear_policy [-p <vhostpath>] <name>  
    #清除一个策略
list_policies [-p <vhostpath>]  
    #列出已有的策略
1.3.5.5 queue&exchange状态信息
list_queues [-p <vhostpath>] [<queueinfoitem> ...]  
    #返回queue的信息,如果省略了-p参数,则默认显示的是"/"vhosts的信息。
list_exchanges [-p <vhostpath>] [<exchangeinfoitem> ...]  
    #返回exchange的信息。
list_bindings [-p <vhostpath>] [<bindinginfoitem> ...] 
    #返回绑定信息。
list_connections [<connectioninfoitem> ...]  
    #返回链接信息。
list_channels [<channelinfoitem> ...]  
    #返回目前所有的channels。
list_consumers [-p <vhostpath>]  
    #返回consumers,
status  
    #显示broker的状态
environment  
    #显示环境参数的信息
report  
    #返回一个服务状态report,
eval <expr>

1.3.6 插件管理

rabbitmq支持各种插件,开启插件可以使用rabbitmq-plugins命令

rabbitmq-plugins <command> [<command options>]
Commands:
    list [-v] [-m] [-E] [-e] [<pattern>]  显示所有的的插件。-v 显示版本 -m 显示名称 -E 显示明确已经开启的 -e显示明确的和暗中开启的
    enable <plugin> ...   开启一个插件
    disable <plugin> ...  关闭一个插件

如图,启动插件后重启服务,在浏览器打开http://localhost:15672
登录,用户名密码都是guest

1.3.7 服务日志

服务日志记录在RABBITMQ_NODENAME.log,在文件夹RABBITMQ_LOG_BASE中。其他的日志记录在RABBITMQ_NODENAME-sasl.log.

rabbitmqctl rotate_logs stuffix
指示RabbitMQ node循环日志文件.

RabbitMQ 中间件会将原来日志文件中的内容追加到原始名称和后辍的日志文件中,然后再将原始日志文件内容复制到新创建的日志上。实际上,当前日志内容会移到以此后辍结尾的文件上。当目标文件不存在时,将会进行创建。如果不指定后辍,则不会发生循环,日志文件只是重新打开。
rabbitmqctl rotate_logs.1
此命令指示RabbitMQ node将日志文件的内容追加到新日志文件(文件名由原日志文件名和.1后辍构成)中。如. rabbit@mymachine.log.1 和 rabbit@mymachine-sasl.log.1. 最后, 日志会在原始位置恢复到新文件中.

以上是关于rabbitMQ使用的主要内容,如果未能解决你的问题,请参考以下文章

rabbitMq使用笔记一:Window下安装使用RabbitMQ

深入了解RabbitMQ工作原理及简单使用

RabbitMQ手册之rabbitmq-env.conf

RabbitMQ的使用- RabbitMQ服务安装

RabbitMQ的安装和使用Python连接RabbitMQ

学相伴狂神说 RabbitMQ笔记(简单使用RabbitMQ)