AMQP 消息服务器,RabbitMQ 3.4.0 发布

jopen 9年前

基于Erlang的高级消息队列RabbitMQ 3.4.0发布.新产品系列。2014-10-21。之前版本2014-08-11的3.3.5.遗留产品3.2.4/3.1.5 在高级消息队列里,RabbitMQ应该最主流的。


1. RPC客户端快速应答机制。
2. 可监控和限制队列字节长度。
3. 无须重启即可激活或卸下插件。
4. 可从持久化数据中恢复崩溃队 列。
5. 允许.Net客户端网络中断后自动重连。
6. 缺省不再支持SSL V3防止POODLE攻击。
7. SSL握手超时可配置。
8. 新的rabbitmq-plugins set子命令。


Release: RabbitMQ 3.4.0    Security Fixes  ==============    management plugin  -----------------  26414 do not trust X-Forwarded-For header when enforcing 'loopback_users'    various  -------  26419 disable SSLv3 by default to prevent the POODLE attack      Release Highlights  ==================    server  ------  bug fixes  26354 prevent force_event_refresh message from killing connections that have        not fully started (since 3.3.0)  26347 ensure bindings are deleted when deleting queue records as part        of rabbitmqctl forget_cluster_node (since 3.0.3)  26341 add assertions to prevent silent failure from DETS errors in        rabbit_recovery_terms (since 3.3.0)  26171 prevent crash in rare conditions in gm:find_member_or_blank/2 during        slave startup (since 2.6.0)  26368 prevent autoheal from hanging when loser shuts down before the winner        learns it is the winner (since 3.1.0)  25850 prevent excessive binary memory use when accepting or delivering        large messages at high speed (since 1.0.0)  26230 ensure exchanges and queues are federated appropriately when        created when policy exists to make them so but the plugin is        not enabled (since 3.0.0)  26389 prevent consumer utilisation getting stuck at 0% after busy queue        goes idle (since 3.3.0)  26370 prevent "rabbitmqctl cluster_status" from breaking the database        if invoked at the wrong point during first startup (since 3.0.0)  26295 ensure "rabbitmqctl wait" waits for plugins to start  26336 fix logging when cluster auto-config fails (since 3.0.0)  26338 log enotconn as 'connection_closed_abruptly', not an internal        error (since 1.0.0)  26343 fix warning about missing behaviour_info/1 in supervisor2 with        older Erlang (since 3.2.0)  26363 ensure cluster auto-config does not try to cluster with nodes        which have had "rabbitmqctl stop_app" invoked (since 3.0.0)  26378 fix compilation warnings about conflicting behaviours (since 2.6.0)  26386 ensure broker starts even if vhost pointed to by default_vhost        config item has been deleted (since 1.0.0)  26404 prevent queue synchronisation from hanging if there is a very        short partition just as it starts (since 3.1.0)    enhancements  21446 allow crashing queue processes to recover, using persistent data        if present  25813 provide fast direct route for RPC replies          (see  24926 allow plugins to be enabled / disabled without restarting the server  25884 add argument and policy to limit queue length in bytes  26150 prevent clean master shutdown from promoting unsynchronised        slaves and thus losing messages; add ha-promote-on-shutdown        to configure  26151 make queues located on down cluster nodes visible in "rabbitmqctl        list_queues"  26213 prevent undefined behaviour during partial partitions by        promoting them to full ones  26254 allow "rabbitmqctl_forget_cluster_node" to promote mirror queue slaves        that are down and thus recover from loss of a node containing masters        after it was the last node to stop  26256 add "rabbitmqctl force_boot" command to allow administrator to        override RabbitMQ's idea of the last node to shut down  26307 add messages_{ready,unacknowledged}_ram / messages_ram /        messages_persistent queue info keys  25666 / 26339 add message_bytes / message_bytes_{ready,unacknowledged,        ram,persistent} queue info keys  25214 improve robustness in the face of stray messages from Mnesia after        partitions  25279 make SSL handshake timeout configurable  25678 make mnesia table loading timeout configurable  26148 add username and vhost to amqp_error log messages  26169 add username / connection information to firehose trace messages  26242 improve clarity of rabbitmqctl error messages when stop_app has been        invoked  26225 provide connection age in rabbitmqctl list_connections  25446 add "rabbitmq-plugins set" subcommand  25824 / 26398 provide a summary of binary memory use  26397 split out memory used by slaves vs masters / unmirrored in the        memory summary  26401 split out memory used by connection readers / writers / channels / other        in the memory summary  26192 improve usability of "rabbitmqctl remove_cluster_node --offline" by        not requiring the user to start a node with RABBITMQ_NODE_ONLY  18626 add RABBITMQ_USE_LONGNAME (with thanks to Marcos Diez)  26204 allow message TTL and queue expiry times above (2^32)-1 milliseconds  26211 fix use of type specifications deprecated in Erlang 17  26366 improve error messages when queue / exchange equivalence checks fail  26387 use new strange way to determine OTP minor version number  26394 add cluster heartbeat messages at a faster rate than net_ticktime  26406 add environment for plugins and non-RabbitMQ apps to "rabbitmqctl        environment"  25848 warn if RABBITMQ_SERVER_ERL_ARGS set in a way that will lead to        poor performance  25454 warn if rabbitmq-plugins and rabbitmq-server disagree on the        location of the enabled_plugins file  26221 improve performance of queue.declare{nowait=true}      building & packaging  --------------------  enhancements  26344 ensure missing config file is correctly logged in .deb / RPM        (since 3.3.0)  26154 switch standalone OS X build to use Erlang 17.1  26040 add missing BuildRequires to RPM spec (since 1.8.0)  26411 fix warning on Debian build clean due to deleted files      management plugin  -----------------  enhancements  26107 provide (and default to) mode where we maintain message rates        only per object (queue, exchange etc) not per object        pair (queue->channel etc) to save memory  26174 improve responsiveness of management API under load  25329 maintain history and draw charts for some per-node stats        (memory, disk space etc)  25470 provide UI to show / hide series in charts in the web UI  26382 provide UI to show / hide columns columns in the web UI  26225 provide connection age in connection list  25824 provide a summary of binary memory use  26151 make queues located on down cluster nodes visible in queue list  23724 provide API to list all consumers  26340 redesigned, more concise interface for queue / exchange /        policy arguments  26193 display locations of configuration, database and logs in management  26193 detect and warn on mismatched net_ticktime setting  26235 show enabled plugins in management  25984 switch to HTML5 local storage where available, ensure        multiple web UIs on same host do not share login  26358 support setting message properties with "rabbitmqadmin publish"  26390 ensure all charts have the same time range  26391 make "rabbitmqadmin list" restrict to a default set of columns    bug fixes  26399 ensure statistics do not depend on erlang:now/0 being in sync with        os:timestamp/0 (since 3.2.0)      shovel plugin  -------------  enhancements  26239 allow dynamic shovels to set message properties like static        ones do, and allow static shovels to use add_forward_headers like        dynamic ones do      LDAP plugin  -----------  enhancements  26275 support LDAP connections using StartTLS (requires Erlang R16B03 or later)      tracing plugin  --------------  enhancements  26357 add milliseconds to timestamps      STOMP plugin  ------------  enhancements  26306 add flow control for message deliveries through STOMP; greatly reduces        memory use when slow consumers without prefetch-count connect to a        large / fast moving queue  26243 ensure all stomp-named queues are named "stomp-*"  26266 support "requeue" header on NACK frames      MQTT plugin  -----------  enhancements  26330 add flow control for message deliveries through MQTT; greatly reduces        memory use when slow consumers without prefetch-count connect to a        large / fast moving queue    bug fixes  26356 fix incorrect reporting of MQTT protocol version when using MQTT 3.1.1      Web-STOMP plugin  ----------------  enhancements  26392 don't depend on the SockJS CDN      java client  -----------  enhancements  26402 provide a means to configure the time given to slow consumers        to continue consuming internally queued messages after the        connection closes  26359 add listeners for queue name changes during recovery  26207 add APIs to make methods easier to use in nowait mode  26121 add --randomRoutingKey flag to PerfTest  26091 add --consumerRate flag to PerfTest  26348 make ConnectionFactory's networkRecoveryInterval property into a long    bug fixes  26364 clean up client-side references to auto-deleted queues in the        common case (since 3.3.0)  26374 limit size of WorkPool queues, thus prevent slow consumer with no        prefetch limit from consuming unbounded memory (since 2.7.0)  26413 prevent duplicate connection recovery listeners from being        registered (since 3.3.0)    dependency change  26095 drop support for Java 1.5    licencing change  24543 make the Java client additionally avaliable under the ASL2      .net client  -----------  enhancements  26130 automatic connection recovery similar to that of the Java client  26208 add APIs to make methods easier to use in nowait mode  26324 introduce an interface for ConnectionFactory  26334 set up stream timeouts as early as possible (thanks to John Oliver)  26199 allow IO and heartbeat to be background threads  25525 allow Subscription class to set explicit consumer tag  26097 add support for nack / reject in Subscription  26122 remove unnecessary lock in Subscription    feature removal  26131 / 26132 remove support for versions of AMQP prior to 0-9-1  26133 remove redirect following      erlang client  -------------  enhancements  26166 allow default ssl options to be provided in the configuration file    bug fixes  26418 ensure writer death is detected in direct connections (since 3.2.0)        (with thanks to Christopher Faulet)  26346 ensure amqp_rpc_client uses exclusive, autodelete response        queues (since 1.3.0)


RabbitMQ 是由 LShift 提供的一个 Advanced Message Queuing Protocol (AMQP) 的开源实现,由以高性能、健壮以及可伸缩性出名的 Erlang 写成,因此也是继承了这些优点。

AMQP 里主要要说两个组件:Exchange 和 Queue (在 AMQP 1.0 里还会有变动),如下图所示,绿色的 X 就是 Exchange ,红色的是 Queue ,这两者都在 Server 端,又称作 Broker ,这部分是 RabbitMQ 实现的,而蓝色的则是客户端,通常有 Producer 和 Consumer 两种类型:

RabbitMQ 3.4.0 发布,AMQP 消息服务器