summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Klishin <michael@clojurewerkz.org>2017-09-07 06:51:31 -0700
committerMichael Klishin <michael@clojurewerkz.org>2017-09-07 06:51:31 -0700
commit96cd56a9d040ffeeeb62c95b84826c1f021a3ebc (patch)
tree7b6ff97168b256c6271dcabf899bf2f1b3a1a722 /src
parentcfc5bde7d40c40a96a094ed0f849ef4f98ff6406 (diff)
downloadrabbitmq-server-git-96cd56a9d040ffeeeb62c95b84826c1f021a3ebc.tar.gz
Introduce x-first-death-{exchange,queue,reason}
They can be used to route dead lettered messages using a headers exchange. Part of #1332.
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_dead_letter.erl11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/rabbit_dead_letter.erl b/src/rabbit_dead_letter.erl
index ca4871d2e0..d185e95edd 100644
--- a/src/rabbit_dead_letter.erl
+++ b/src/rabbit_dead_letter.erl
@@ -113,13 +113,22 @@ group_by_queue_and_reason(Tables) ->
Grouped.
update_x_death_header(Info, Headers) ->
+ X = x_death_event_key(Info, <<"exchange">>),
Q = x_death_event_key(Info, <<"queue">>),
R = x_death_event_key(Info, <<"reason">>),
case rabbit_basic:header(<<"x-death">>, Headers) of
undefined ->
+ %% First x-death event gets its own top-level headers.
+ %% See rabbitmq/rabbitmq-server#1332.
+ Headers2 = rabbit_misc:set_table_value(Headers, <<"x-first-death-reason">>,
+ longstr, R),
+ Headers3 = rabbit_misc:set_table_value(Headers2, <<"x-first-death-queue">>,
+ longstr, Q),
+ Headers4 = rabbit_misc:set_table_value(Headers3, <<"x-first-death-exchange">>,
+ longstr, X),
rabbit_basic:prepend_table_header(
<<"x-death">>,
- [{<<"count">>, long, 1} | Info], Headers);
+ [{<<"count">>, long, 1} | Info], Headers4);
{<<"x-death">>, array, Tables} ->
%% group existing x-death headers in case we have some from
%% before rabbitmq-server#78