<feed xmlns='http://www.w3.org/2005/Atom'>
<title>delta/rabbitmq-server-git.git/scripts, branch avoid-double-channel-count-decrease</title>
<subtitle>github.com: rabbitmq/rabbitmq-server.git
</subtitle>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/rabbitmq-server-git.git/'/>
<entry>
<title>Stream Queue</title>
<updated>2020-09-30T13:52:53+00:00</updated>
<author>
<name>kjnilsson</name>
<email>knilsson@pivotal.io</email>
</author>
<published>2020-09-29T10:43:24+00:00</published>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/rabbitmq-server-git.git/commit/?id=f20fa273e99e6dcd925f8cd5988b6385b7fc0b6a'/>
<id>f20fa273e99e6dcd925f8cd5988b6385b7fc0b6a</id>
<content type='text'>
        This is an aggregated commit of all changes related to the
initial implementation of queue types and on top of that the stream
queue type. The varios commit messages have simply been included mostly
un-edited below.

    Make rabbit_amqqueue:not_found_or_absent_dirty/1 visible
    For use in the stream plugin.

    Use bigger retention policy on max-age test

    Set coordinator timeout to 30s

    Handle coordinator unavailable error

    Handle operator policies as maps when checking if is applicable

    Add is_policy_applicable/2 to classic queues

    Ignore restart commands if the stream has been deleted

    It could happen that after termination some of the monitors are still
    up and trigger writer/replica restarts

    Policy support on stream queues

    Remove subscription events on stream coordinator

    Ensure old leaders are removed from monitors

    Introduce delay when retrying a failed phase

    Note that this ensures monitor is setup, there was a bug where no
    monitor was really started when re-trying the same phase

    Restart replicas after leader election instead of relying on old monitors

    Use timer for stream coordinator retries

    Fix stream stats for members/online
    Multiple fixes for replica monitoring and restart

    Ensure pending commands are appended at the end and re-run

    Ensure phase is reset with the state

    Remove duplicates from replica list

    Restart current phase on state_enter

    Remove unused import

    Ensure rabbit is running when checking for stream quorum

    Restart replicas

    Add a close/1 function to queue types

    So that we can get a chance of cleaning up resources if needed.

    Stream queues close their osiris logs at this point.

    fix compiler errors

    stream-queue: take retention into account

    When calculating ready messages metrics.
    Add osiris to the list of rabbit deps

    Retry restart of replicas

    Do not restart replicas or leaders after receiving a delete cluster command

    Add more logging to the stream coordinator

    Monitor subscribed processes on the stream coordinator

    Memory breakdown for stream queues

    Update quorum queue event formatter

    rabbit_msg_record fixes

    Refactor channel confirms

    Remove old unconfirmed_messages module that was designed to handle
    multiple queue fan in logic including all ha mirrors etc. Replaced with
    simpler rabbit_confirms module that handles the fan out and leaves any
    queue specific logic (such as confirms from mirrors) to the queue type
    implemention. Also this module has a dedicated test module. Which is
    nice.

    Backward compatibility with 3.8.x events

    Supports mixed version cluster upgrades

    Match specification when stream queue already exists

    Max age retention for stream queues

    Stop all replicas before starting leader election

    stream: disallow global qos

    remove IS_CLASSIC|QUORUM macros

    Ensure only classic queues are notified on channel down

    This also removes the delivering_queues map in the channel state as it
    should not be needed for this and just cause additional unecessary
    accounting.

    Polish AMQP 1.0/0.9.1 properties conversion

    Support byte in application properties, handle 1-bit representation for
    booleans.

    Use binary in header for long AMQP 1.0 ID

    Fix AMQP 1.0 to 0.9.1 conversion

    Fix test due to incorrect type

    Convert timestamp application properties to/from seconds

    AMQP 1.0 uses milliseconds for timestamp and AMQP 0.9.1 uses seconds, so
    conversion needed.

    Dialyzer fixes

    Handle all message-id types

    AMQP 1.0 is more liberal in it's allowed types of message-id and
    correlation-id - this adds headers to describe the type of the data in
    the message_id / correlation_id properties and also handles the case
    where the data cannot fit by again using headers.

    Resize stream coordinator cluster when broker configuration changes

    convert timestamp to and fro seconds

    user_id should be a binary

    message annotations keys need to be symbols

    stream-queue: default exchange and routing key

    As these won't be present for data written using the rabbitmq-stream
    plugin.

    Add exchange, routing key as message annotations

    To the AMQP 1.0 formatted data to enable roundtrip.

    Add osiris logging module config

    And update logging config test suite.

    Restart election when start of new leader fails

    The node might have just gone down so we need to try another one
    Only aux keeps track of phase now, as it might change if the leader election fails

    Stream coordinator refactor - all state is kept on the ra machine

    Ensure any ra cluster not a qq is not cleaned up

    Fixes to recovery and monitoring

    Add AMQP 1.0 common to dependencies

    Add rabbit_msg_record module
    To handle conversions into internal stream storage format.
    Use rabbitmq-common stream-queue branch
    Use SSH for osiris dependency
    Stream coordinator: delete replica
    Stream coordinator: add replica
    Stream coordinator: leader failover

    Stream coordinator: declare and delete

    Test consuming from a random offset
    Previous offsets should not be delivered to consumers
    Consume from stream replicas and multiple test fixes

    Use max-length-bytes and add new max-segment-size

    Use SSH for osiris dependency

    Basic cancel for stream queues

    Publish stream queues and settle/reject/requeue refactor

    Consume from stream queues

    Fix recovery
    Publish stream messages

    Add/delete stream replicas
    Use safe queue names

    Set retention policy for stream queues

    Required by the ctl command

    [#171207092]

    Stream queue delete queue

    fix missing callback impl

    Stream queue declare

Queue type abstraction

    And use the implementing module as the value of the amqqueue record
    `type` field. This will allow for easy dispatch to the queue type
    implementation.

    Queue type abstraction

    Move queue declare into rabbit_queue_type
    Move queue delete into queue type implementation

    Queue type: dequeue/basic_get

    Move info inside queue type abstraction

    Move policy change into queue type interface

    Add purge to queue type

    Add recovery to the queue type interface

    Rename amqqueue quorum_nodes field

    To a more generic an extensible opaque queue type specific map.

    Fix tests and handle classic API response

    Fix HA queue confirm bug

    All mirrors need to be present as queue names. This introduces context
    linking allowing additional queue refs to be linked to a single "master"
    queue ref contining the actual queue context.

    Fix issue with events of deleted queues

    Also update queue type smoke test to use a cluster by default.

    correct default value of amqqueue getter

    Move classic queues further inside queue type interface

why

[TrackerId]

Dialyzer fixes
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
        This is an aggregated commit of all changes related to the
initial implementation of queue types and on top of that the stream
queue type. The varios commit messages have simply been included mostly
un-edited below.

    Make rabbit_amqqueue:not_found_or_absent_dirty/1 visible
    For use in the stream plugin.

    Use bigger retention policy on max-age test

    Set coordinator timeout to 30s

    Handle coordinator unavailable error

    Handle operator policies as maps when checking if is applicable

    Add is_policy_applicable/2 to classic queues

    Ignore restart commands if the stream has been deleted

    It could happen that after termination some of the monitors are still
    up and trigger writer/replica restarts

    Policy support on stream queues

    Remove subscription events on stream coordinator

    Ensure old leaders are removed from monitors

    Introduce delay when retrying a failed phase

    Note that this ensures monitor is setup, there was a bug where no
    monitor was really started when re-trying the same phase

    Restart replicas after leader election instead of relying on old monitors

    Use timer for stream coordinator retries

    Fix stream stats for members/online
    Multiple fixes for replica monitoring and restart

    Ensure pending commands are appended at the end and re-run

    Ensure phase is reset with the state

    Remove duplicates from replica list

    Restart current phase on state_enter

    Remove unused import

    Ensure rabbit is running when checking for stream quorum

    Restart replicas

    Add a close/1 function to queue types

    So that we can get a chance of cleaning up resources if needed.

    Stream queues close their osiris logs at this point.

    fix compiler errors

    stream-queue: take retention into account

    When calculating ready messages metrics.
    Add osiris to the list of rabbit deps

    Retry restart of replicas

    Do not restart replicas or leaders after receiving a delete cluster command

    Add more logging to the stream coordinator

    Monitor subscribed processes on the stream coordinator

    Memory breakdown for stream queues

    Update quorum queue event formatter

    rabbit_msg_record fixes

    Refactor channel confirms

    Remove old unconfirmed_messages module that was designed to handle
    multiple queue fan in logic including all ha mirrors etc. Replaced with
    simpler rabbit_confirms module that handles the fan out and leaves any
    queue specific logic (such as confirms from mirrors) to the queue type
    implemention. Also this module has a dedicated test module. Which is
    nice.

    Backward compatibility with 3.8.x events

    Supports mixed version cluster upgrades

    Match specification when stream queue already exists

    Max age retention for stream queues

    Stop all replicas before starting leader election

    stream: disallow global qos

    remove IS_CLASSIC|QUORUM macros

    Ensure only classic queues are notified on channel down

    This also removes the delivering_queues map in the channel state as it
    should not be needed for this and just cause additional unecessary
    accounting.

    Polish AMQP 1.0/0.9.1 properties conversion

    Support byte in application properties, handle 1-bit representation for
    booleans.

    Use binary in header for long AMQP 1.0 ID

    Fix AMQP 1.0 to 0.9.1 conversion

    Fix test due to incorrect type

    Convert timestamp application properties to/from seconds

    AMQP 1.0 uses milliseconds for timestamp and AMQP 0.9.1 uses seconds, so
    conversion needed.

    Dialyzer fixes

    Handle all message-id types

    AMQP 1.0 is more liberal in it's allowed types of message-id and
    correlation-id - this adds headers to describe the type of the data in
    the message_id / correlation_id properties and also handles the case
    where the data cannot fit by again using headers.

    Resize stream coordinator cluster when broker configuration changes

    convert timestamp to and fro seconds

    user_id should be a binary

    message annotations keys need to be symbols

    stream-queue: default exchange and routing key

    As these won't be present for data written using the rabbitmq-stream
    plugin.

    Add exchange, routing key as message annotations

    To the AMQP 1.0 formatted data to enable roundtrip.

    Add osiris logging module config

    And update logging config test suite.

    Restart election when start of new leader fails

    The node might have just gone down so we need to try another one
    Only aux keeps track of phase now, as it might change if the leader election fails

    Stream coordinator refactor - all state is kept on the ra machine

    Ensure any ra cluster not a qq is not cleaned up

    Fixes to recovery and monitoring

    Add AMQP 1.0 common to dependencies

    Add rabbit_msg_record module
    To handle conversions into internal stream storage format.
    Use rabbitmq-common stream-queue branch
    Use SSH for osiris dependency
    Stream coordinator: delete replica
    Stream coordinator: add replica
    Stream coordinator: leader failover

    Stream coordinator: declare and delete

    Test consuming from a random offset
    Previous offsets should not be delivered to consumers
    Consume from stream replicas and multiple test fixes

    Use max-length-bytes and add new max-segment-size

    Use SSH for osiris dependency

    Basic cancel for stream queues

    Publish stream queues and settle/reject/requeue refactor

    Consume from stream queues

    Fix recovery
    Publish stream messages

    Add/delete stream replicas
    Use safe queue names

    Set retention policy for stream queues

    Required by the ctl command

    [#171207092]

    Stream queue delete queue

    fix missing callback impl

    Stream queue declare

Queue type abstraction

    And use the implementing module as the value of the amqqueue record
    `type` field. This will allow for easy dispatch to the queue type
    implementation.

    Queue type abstraction

    Move queue declare into rabbit_queue_type
    Move queue delete into queue type implementation

    Queue type: dequeue/basic_get

    Move info inside queue type abstraction

    Move policy change into queue type interface

    Add purge to queue type

    Add recovery to the queue type interface

    Rename amqqueue quorum_nodes field

    To a more generic an extensible opaque queue type specific map.

    Fix tests and handle classic API response

    Fix HA queue confirm bug

    All mirrors need to be present as queue names. This introduces context
    linking allowing additional queue refs to be linked to a single "master"
    queue ref contining the actual queue context.

    Fix issue with events of deleted queues

    Also update queue type smoke test to use a cluster by default.

    correct default value of amqqueue getter

    Move classic queues further inside queue type interface

why

[TrackerId]

Dialyzer fixes
</pre>
</div>
</content>
</entry>
<entry>
<title>Switch to Mozilla Public License 2.0 (MPL 2.0)</title>
<updated>2020-07-10T13:31:17+00:00</updated>
<author>
<name>dcorbacho</name>
<email>dparracorbacho@piotal.io</email>
</author>
<published>2020-07-10T13:31:17+00:00</published>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/rabbitmq-server-git.git/commit/?id=4479ceae5a4ce22cfb3473c6336d119297eb6dd3'/>
<id>4479ceae5a4ce22cfb3473c6336d119297eb6dd3</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Re-enable CTL_ERL_ARGS and dist port settings</title>
<updated>2020-06-30T08:23:29+00:00</updated>
<author>
<name>Luke Bakken</name>
<email>lbakken@pivotal.io</email>
</author>
<published>2020-06-25T13:20:23+00:00</published>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/rabbitmq-server-git.git/commit/?id=eafa2aa482ac806055c967e15af0ca554d152810'/>
<id>eafa2aa482ac806055c967e15af0ca554d152810</id>
<content type='text'>
Fixes #2394
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Fixes #2394
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix a typo spotted by @VVD</title>
<updated>2020-06-24T14:18:35+00:00</updated>
<author>
<name>Michael Klishin</name>
<email>mklishin@pivotal.io</email>
</author>
<published>2020-06-24T14:18:35+00:00</published>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/rabbitmq-server-git.git/commit/?id=1c0cab5cddce5e6757fcfb9e10c2ff918bd4c61d'/>
<id>1c0cab5cddce5e6757fcfb9e10c2ff918bd4c61d</id>
<content type='text'>
References #2389, #2387</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
References #2389, #2387</pre>
</div>
</content>
</entry>
<entry>
<title>scripts/rabbitmq-service.bat: Configure Erlang distribution port</title>
<updated>2020-06-19T14:36:45+00:00</updated>
<author>
<name>Jean-Sébastien Pédron</name>
<email>jean-sebastien@rabbitmq.com</email>
</author>
<published>2020-06-19T14:36:45+00:00</published>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/rabbitmq-server-git.git/commit/?id=b806315ab13a95a7280bb0087ef1bfd4d3c96749'/>
<id>b806315ab13a95a7280bb0087ef1bfd4d3c96749</id>
<content type='text'>
As said in the comment, this is normally done at runtime now (see
rabbitmq/rabbitmq-server#2180). However, we must configure the
distribution on the command line specifically for the Windows service.

Until this patch, the distribution was enabled with the correct
nodename, but the TCP port configuration was not set. This caused a
regression because the selected TCP port was random instead of the
expected default of 25672.

This patch restores the previous behavior.

Fixes rabbitmq/rabbitmq-server#2387.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
As said in the comment, this is normally done at runtime now (see
rabbitmq/rabbitmq-server#2180). However, we must configure the
distribution on the command line specifically for the Windows service.

Until this patch, the distribution was enabled with the correct
nodename, but the TCP port configuration was not set. This caused a
regression because the selected TCP port was random instead of the
expected default of 25672.

This patch restores the previous behavior.

Fixes rabbitmq/rabbitmq-server#2387.
</pre>
</div>
</content>
</entry>
<entry>
<title>Support RABBITMQ_HOME paths containing brackets on windows</title>
<updated>2020-06-08T13:42:03+00:00</updated>
<author>
<name>Thomas Speckert</name>
<email>60146803+twjs76@users.noreply.github.com</email>
</author>
<published>2020-06-08T13:42:03+00:00</published>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/rabbitmq-server-git.git/commit/?id=7de370fefab77a28caeccdbfde629ccccc51932c'/>
<id>7de370fefab77a28caeccdbfde629ccccc51932c</id>
<content type='text'>
If the environment variable RABBITMQ_HOME contained a path with either
'(' or ')' (for example, a path under C:\Program Files (x86)\), then
the script would unexpectedly exit with the error
'\some\path was unexpected at this time'. This was caused by the
parenthesis being interpreted as part of the batch 'if/else'.

Adding quotes around the arguments to the SET command fixes the problem.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
If the environment variable RABBITMQ_HOME contained a path with either
'(' or ')' (for example, a path under C:\Program Files (x86)\), then
the script would unexpectedly exit with the error
'\some\path was unexpected at this time'. This was caused by the
parenthesis being interpreted as part of the batch 'if/else'.

Adding quotes around the arguments to the SET command fixes the problem.
</pre>
</div>
</content>
</entry>
<entry>
<title>rabbitmq-defaults.bat: Allow to override `$CONF_ENV_FILE`</title>
<updated>2020-06-04T16:36:11+00:00</updated>
<author>
<name>Jean-Sébastien Pédron</name>
<email>jean-sebastien@rabbitmq.com</email>
</author>
<published>2020-06-04T16:36:11+00:00</published>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/rabbitmq-server-git.git/commit/?id=eac55d7f044fae04f05872acfef66305c3acd191'/>
<id>eac55d7f044fae04f05872acfef66305c3acd191</id>
<content type='text'>
It is already possible on Unix.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
It is already possible on Unix.
</pre>
</div>
</content>
</entry>
<entry>
<title>rabbitmq-env: Fix indentation</title>
<updated>2020-04-06T11:00:08+00:00</updated>
<author>
<name>Jean-Sébastien Pédron</name>
<email>jean-sebastien@rabbitmq.com</email>
</author>
<published>2020-04-06T11:00:08+00:00</published>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/rabbitmq-server-git.git/commit/?id=be9a642f928816f9d02856012ff6d7a421004c1e'/>
<id>be9a642f928816f9d02856012ff6d7a421004c1e</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Update copyright (year 2020)</title>
<updated>2020-03-10T14:36:02+00:00</updated>
<author>
<name>Jean-Sébastien Pédron</name>
<email>jean-sebastien@rabbitmq.com</email>
</author>
<published>2020-03-10T14:36:02+00:00</published>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/rabbitmq-server-git.git/commit/?id=2d7ce9961237de7f5ab67375ec99da9299d39a3a'/>
<id>2d7ce9961237de7f5ab67375ec99da9299d39a3a</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Only handle SIGHUP and SIGTSTP</title>
<updated>2020-02-20T16:41:07+00:00</updated>
<author>
<name>Jean-Sébastien Pédron</name>
<email>jean-sebastien@rabbitmq.com</email>
</author>
<published>2020-02-11T08:45:52+00:00</published>
<link rel='alternate' type='text/html' href='http://91.123.203.49/cgit/delta/rabbitmq-server-git.git/commit/?id=02aa73c36b720ae713d182ede1b8fc59966fcb41'/>
<id>02aa73c36b720ae713d182ede1b8fc59966fcb41</id>
<content type='text'>
Here is a summary of RabbitMQ signal handling:

== SIGTERM ==

After #2180, `rabbit` is a regular Erlang application and
`application:stop(rabbit)` terminates RabbitMQ gracefully. This means
that `init:stop()` shuts the service down properly. Therefore, the
default handling of SIGTERM, which calls `init:stop()`, is correct.
rabbitmq-server(8) already relies on this mechanism.

This commit restores the default signal handler which already does the
right thing. No need to do it ourselves.

== SIGHUP and SIGTSTP ==

SIHGUP is usually used to reload the configuration without restarting
the service and/or reopen log files after log file rotation. SIGTSTP is
sent when a user types Ctrl+Z to pause a program and get back to the
shell. Both signals have common behavior we can't satisfy currently.

Note that we don't handle SIGCONT which is the one used to resume a
program after SIGTSTP. The system default behavior is already good (the
signal is discarded).

To be consistent with rabbitmq-server(8) signal handling, the signals
are ignored until we can do something about them.

== SIGQUIT ==

This signal is meant to terminate the process immediately and
create a core dump. If possible, temporary files should even be kept
around. The default behavior in Erlang is to call `erlang:halt()` which
is a sane default: we should not stop RabbitMQ gracefully.

This commit restores this behavior.

== SIGUSR1 and SIGUSR2 ==

Erlang uses SIGUSR1 to crash the VM and create an `erl_crash.dump`
file. We already used this in the past to debug RabbitMQ. Again, a sane
default.

This commit restores this behavior.

== Other signals ==

We keep the default behavior of all other signals. None of them are
meant to stop the program gracefully anyway. If a user wants to stop
RabbitMQ, he will already use the common accepted signal for this
purpose (i.e. SIGTERM).

Another change in this commit is the way we setup the signal handler:
* We don't replace the default Erlang signal handler, just add ours.
* We do it very early in rabbitmq_prelaunch. Like other things
  configured by this application, we do not uninstall the handler when
  the application is stopped.

This reverts:
* commit 6a4d2721d06b8c70a36e29e6c51bbef6608def55
* commit fa607e4a25d6142bb17a90b44ef757572a923c09
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Here is a summary of RabbitMQ signal handling:

== SIGTERM ==

After #2180, `rabbit` is a regular Erlang application and
`application:stop(rabbit)` terminates RabbitMQ gracefully. This means
that `init:stop()` shuts the service down properly. Therefore, the
default handling of SIGTERM, which calls `init:stop()`, is correct.
rabbitmq-server(8) already relies on this mechanism.

This commit restores the default signal handler which already does the
right thing. No need to do it ourselves.

== SIGHUP and SIGTSTP ==

SIHGUP is usually used to reload the configuration without restarting
the service and/or reopen log files after log file rotation. SIGTSTP is
sent when a user types Ctrl+Z to pause a program and get back to the
shell. Both signals have common behavior we can't satisfy currently.

Note that we don't handle SIGCONT which is the one used to resume a
program after SIGTSTP. The system default behavior is already good (the
signal is discarded).

To be consistent with rabbitmq-server(8) signal handling, the signals
are ignored until we can do something about them.

== SIGQUIT ==

This signal is meant to terminate the process immediately and
create a core dump. If possible, temporary files should even be kept
around. The default behavior in Erlang is to call `erlang:halt()` which
is a sane default: we should not stop RabbitMQ gracefully.

This commit restores this behavior.

== SIGUSR1 and SIGUSR2 ==

Erlang uses SIGUSR1 to crash the VM and create an `erl_crash.dump`
file. We already used this in the past to debug RabbitMQ. Again, a sane
default.

This commit restores this behavior.

== Other signals ==

We keep the default behavior of all other signals. None of them are
meant to stop the program gracefully anyway. If a user wants to stop
RabbitMQ, he will already use the common accepted signal for this
purpose (i.e. SIGTERM).

Another change in this commit is the way we setup the signal handler:
* We don't replace the default Erlang signal handler, just add ours.
* We do it very early in rabbitmq_prelaunch. Like other things
  configured by this application, we do not uninstall the handler when
  the application is stopped.

This reverts:
* commit 6a4d2721d06b8c70a36e29e6c51bbef6608def55
* commit fa607e4a25d6142bb17a90b44ef757572a923c09
</pre>
</div>
</content>
</entry>
</feed>
