Skip to content

Commit 96cd56a

Browse files
Introduce x-first-death-{exchange,queue,reason}
They can be used to route dead lettered messages using a headers exchange. Part of #1332.
1 parent cfc5bde commit 96cd56a

File tree

1 file changed

+10
-1
lines changed

1 file changed

+10
-1
lines changed

src/rabbit_dead_letter.erl

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,13 +113,22 @@ group_by_queue_and_reason(Tables) ->
113113
Grouped.
114114

115115
update_x_death_header(Info, Headers) ->
116+
X = x_death_event_key(Info, <<"exchange">>),
116117
Q = x_death_event_key(Info, <<"queue">>),
117118
R = x_death_event_key(Info, <<"reason">>),
118119
case rabbit_basic:header(<<"x-death">>, Headers) of
119120
undefined ->
121+
%% First x-death event gets its own top-level headers.
122+
%% See rabbitmq/rabbitmq-server#1332.
123+
Headers2 = rabbit_misc:set_table_value(Headers, <<"x-first-death-reason">>,
124+
longstr, R),
125+
Headers3 = rabbit_misc:set_table_value(Headers2, <<"x-first-death-queue">>,
126+
longstr, Q),
127+
Headers4 = rabbit_misc:set_table_value(Headers3, <<"x-first-death-exchange">>,
128+
longstr, X),
120129
rabbit_basic:prepend_table_header(
121130
<<"x-death">>,
122-
[{<<"count">>, long, 1} | Info], Headers);
131+
[{<<"count">>, long, 1} | Info], Headers4);
123132
{<<"x-death">>, array, Tables} ->
124133
%% group existing x-death headers in case we have some from
125134
%% before rabbitmq-server#78

0 commit comments

Comments
 (0)