Exchange的三种type
Direct Exchange –通过binding key的完全匹配,binding key的名称与queue name的名称相同。 当P publish key是orange时,exchange会把它放到Q1。如果是black或者green那么就会到Q2。其余的Message都会被丢弃
Fanout Exchange – 不通过bindingkey路由消息,exchange会将所有的Message都放到它所知道的queue中。你只需要简单的将queue绑定到exchange上。一个发送到exchange的消息都会被转发到与该exchange绑定的所有queue上。Fanout类型的exchange转发消息是最快的。
Topic Exchange – 将bingdingkey和某模式进行匹配。此时queue需要绑定要一个模式上。符号“#”匹配一个或多个词,符号“*”匹配不多不少一个词。
Round-robin dispatching 循环分发机制
默认情况下,RabbitMQ 会顺序的分发每个Message。当每个收到ack后,会将该Message删除,然后将下一个Message分发到下一个Consumer。这种分发方式叫做round-robin。
RabbitMQ的分发机制非常适合扩展,而且它是专门为并发程序设计的。如果现在load加重,那么只需要创建更多的Consumer来进行任务处理即可。当然了,对于负载还要加大怎么办?我没有遇到过这种情况,那就可以创建多个virtual Host,细化不同的通信类别了。
Message acknowledgment 消息确认机制
(http://blog.csdn.net/lmj623565791/article/details/37620057)
为了保证数据不被丢失,RabbitMQ支持消息确认机制,即acknowledgments。为了保证数据能被正确处理而不仅仅是被Consumer收到,那么我们不能采用no-ack。而应该是在处理完数据后发送ack。在处理数据后发送的ack,就是告诉RabbitMQ数据已经被接收,处理完成,RabbitMQ可以去安全的删除它了。如果Consumer退出了但是没有发送ack,那么RabbitMQ就会把这个Message发送到下一个Consumer。这样就保证了在Consumer异常退出的情况下数据也不会丢失。默认情况下,消息确认是打开的(enabled)。
Message durability消息持久化机制
Message acknowledgment机制保证了consumer异常退出,message不会丢失,但是如果RabbitMQ Server退出呢? 为了保证在RabbitMQ退出或者crash了数据仍没有丢失,需要将queue和Message都要持久化。
Fair dispatch 公平分发机制
默认状态下,RabbitMQ将第n个Message分发给第n个Consumer。当然n是取余后的。它不管Consumer是否还有unacked Message,只是按照这个默认机制进行分发。那么如果有个Consumer工作比较重,那么就会导致有的Consumer基本没事可做,有的Consumer却是毫无休息的机会。通过 basic.qos 方法设置prefetch_count=1 。这样RabbitMQ就会使得每个Consumer在同一个时间点最多处理一个Message。换句话说,在接收到该Consumer的ack前,他它不会将新的Message分发给它
rabbitmqctl命令行管理工具
rabbitmqctl是一个简单的命令行工具用于管理RabbitMQ Server,在shell中执行如下命令,能看到各种命令简价:
Usage:
rabbitmqctl [-n ] [-q] []
Options:
-n node
-q
Commands:
stop []
stop_app
start_app
wait
reset
force_reset
rotate_logs
join_cluster [<--ram>]
cluster_status
change_cluster_node_type disc | ram
forget_cluster_node [--offline]
update_cluster_nodes clusternode
add_user
delete_user
change_password
clear_password
set_user_tags ...
list_users
add_vhost
delete_vhost
list_vhosts [ ...]
set_permissions [-p ]
clear_permissions [-p ]
list_permissions [-p ]
list_user_permissions
set_parameter [-p ]
clear_parameter [-p ]
list_parameters [-p ]
set_policy [-p ] []
clear_policy [-p ]
list_policies [-p ]
list_queues [-p ] [ ...]
list_exchanges [-p ] [ ...]
list_bindings [-p ] [ ...]
list_connections [ ...]
list_channels [ ...]
list_consumers [-p ]
status
environment
report
eval
close_connection
trace_on [-p ]
trace_off [-p ]
set_vm_memory_high_watermark
must be a member of the list [name, tracing].
The list_queues, list_exchanges and list_bindings commands accept an optional virtual host parameter for which to display results. The default value is “/”.
must be a member of the list [name, durable, auto_delete, arguments, policy, pid, owner_pid, exclusive_consumer_pid, exclusive_consumer_tag, messages_ready, messages_unacknowledged, messages, consumers, active_consumers, memory, slave_pids, synchronised_slave_pids].
must be a member of the list [name, type, durable, auto_delete, internal, arguments, policy].
must be a member of the list [source_name, source_kind, destination_name, destination_kind, routing_key, arguments].
must be a member of the list [pid, name, port, host, peer_port, peer_host, ssl, ssl_protocol, ssl_key_exchange, ssl_cipher, ssl_hash, peer_cert_subject, peer_cert_issuer, peer_cert_validity, last_blocked_by, last_blocked_age, state, channels, protocol, auth_mechanism, user, vhost, timeout, frame_max, client_properties, recv_oct, recv_cnt, send_oct, send_cnt, send_pend].