Skip to content

Commit 7b1691d

Browse files
Merge pull request #13921 from rabbitmq/split-federation
Split federation plugin
2 parents 4c34155 + 4f86ae0 commit 7b1691d

File tree

68 files changed

+1717
-840
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

68 files changed

+1717
-840
lines changed

.github/workflows/test-make-tests.yaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,8 @@ jobs:
8686
- rabbitmq_cli
8787
- rabbitmq_consistent_hash_exchange
8888
- rabbitmq_event_exchange
89-
- rabbitmq_federation
89+
- rabbitmq_exchange_federation
90+
- rabbitmq_federation_common
9091
- rabbitmq_federation_management
9192
- rabbitmq_federation_prometheus
9293
- rabbitmq_jms_topic_exchange
@@ -98,6 +99,7 @@ jobs:
9899
- rabbitmq_peer_discovery_k8s
99100
- rabbitmq_prelaunch
100101
- rabbitmq_prometheus
102+
- rabbitmq_queue_federation
101103
- rabbitmq_recent_history_exchange
102104
- rabbitmq_sharding
103105
- rabbitmq_shovel

.github/workflows/test-make-type-check.yaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ jobs:
3434
- rabbitmq_aws
3535
- rabbitmq_consistent_hash_exchange
3636
- rabbitmq_event_exchange
37-
- rabbitmq_federation
37+
- rabbitmq_exchange_federation
38+
- rabbitmq_federation_common
3839
- rabbitmq_federation_management
3940
- rabbitmq_federation_prometheus
4041
- rabbitmq_jms_topic_exchange
@@ -50,6 +51,7 @@ jobs:
5051
- rabbitmq_peer_discovery_k8s
5152
- rabbitmq_prelaunch
5253
- rabbitmq_prometheus
54+
- rabbitmq_queue_federation
5355
- rabbitmq_recent_history_exchange
5456
- rabbitmq_sharding
5557
- rabbitmq_shovel

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,9 @@ elvis
4848
!/deps/rabbitmq_ct_helpers/
4949
!/deps/rabbitmq_ct_client_helpers/
5050
!/deps/rabbitmq_event_exchange/
51+
!/deps/rabbitmq_exchange_federation/
5152
!/deps/rabbitmq_federation/
53+
!/deps/rabbitmq_federation_common/
5254
!/deps/rabbitmq_federation_management/
5355
!/deps/rabbitmq_federation_prometheus/
5456
!/deps/rabbitmq_jms_topic_exchange/
@@ -62,6 +64,7 @@ elvis
6264
!/deps/rabbitmq_peer_discovery_k8s/
6365
!/deps/rabbitmq_prelaunch/
6466
!/deps/rabbitmq_prometheus/
67+
!/deps/rabbitmq_queue_federation/
6568
!/deps/rabbitmq_random_exchange/
6669
!/deps/rabbitmq_recent_history_exchange/
6770
!/deps/rabbitmq_sharding/

deps/rabbitmq_cli/test/plugins/disable_plugins_command_test.exs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -105,14 +105,14 @@ defmodule DisablePluginsCommandTest do
105105
@command.run(["rabbitmq_stomp"], Map.merge(context[:opts], %{node: :nonode}))
106106

107107
assert [
108-
[:rabbitmq_federation],
109-
%{mode: :offline, disabled: [:rabbitmq_stomp], set: [:rabbitmq_federation]}
108+
[:rabbitmq_exchange_federation, :rabbitmq_federation, :rabbitmq_federation_common, :rabbitmq_queue_federation],
109+
%{mode: :offline, disabled: [:rabbitmq_stomp], set: [:rabbitmq_exchange_federation, :rabbitmq_federation, :rabbitmq_federation_common, :rabbitmq_queue_federation]}
110110
] ==
111111
Enum.to_list(test_stream)
112112

113113
assert {:ok, [[:rabbitmq_federation]]} == :file.consult(context[:opts][:enabled_plugins_file])
114114

115-
assert [:amqp_client, :rabbitmq_federation, :rabbitmq_stomp] ==
115+
assert [:amqp_client, :rabbitmq_exchange_federation, :rabbitmq_federation, :rabbitmq_federation_common, :rabbitmq_queue_federation, :rabbitmq_stomp] ==
116116
Enum.sort(:rabbit_misc.rpc_call(context[:opts][:node], :rabbit_plugins, :active, []))
117117
end
118118

@@ -125,13 +125,13 @@ defmodule DisablePluginsCommandTest do
125125
)
126126

127127
assert [
128-
[:rabbitmq_federation],
129-
%{mode: :offline, disabled: [:rabbitmq_stomp], set: [:rabbitmq_federation]}
128+
[:rabbitmq_exchange_federation, :rabbitmq_federation, :rabbitmq_federation_common, :rabbitmq_queue_federation],
129+
%{mode: :offline, disabled: [:rabbitmq_stomp], set: [:rabbitmq_exchange_federation, :rabbitmq_federation, :rabbitmq_federation_common, :rabbitmq_queue_federation]}
130130
] == Enum.to_list(test_stream)
131131

132132
assert {:ok, [[:rabbitmq_federation]]} == :file.consult(context[:opts][:enabled_plugins_file])
133133

134-
assert [:amqp_client, :rabbitmq_federation, :rabbitmq_stomp] ==
134+
assert [:amqp_client, :rabbitmq_exchange_federation, :rabbitmq_federation, :rabbitmq_federation_common, :rabbitmq_queue_federation, :rabbitmq_stomp] ==
135135
Enum.sort(:rabbit_misc.rpc_call(context[:opts][:node], :rabbit_plugins, :active, []))
136136
end
137137

@@ -145,7 +145,7 @@ defmodule DisablePluginsCommandTest do
145145

146146
assert [
147147
[:rabbitmq_stomp],
148-
%{mode: :offline, disabled: [:rabbitmq_federation], set: [:rabbitmq_stomp]}
148+
%{mode: :offline, disabled: [:rabbitmq_federation_common, :rabbitmq_queue_federation, :rabbitmq_exchange_federation, :rabbitmq_federation], set: [:rabbitmq_stomp]}
149149
] == Enum.to_list(test_stream0)
150150

151151
assert {:ok, [[:rabbitmq_stomp]]} == :file.consult(context[:opts][:enabled_plugins_file])
@@ -166,20 +166,20 @@ defmodule DisablePluginsCommandTest do
166166
assert {:stream, test_stream0} = @command.run(["rabbitmq_stomp"], context[:opts])
167167

168168
assert [
169-
[:rabbitmq_federation],
169+
[:rabbitmq_exchange_federation, :rabbitmq_federation, :rabbitmq_federation_common, :rabbitmq_queue_federation],
170170
%{
171171
mode: :online,
172172
started: [],
173173
stopped: [:rabbitmq_stomp],
174174
disabled: [:rabbitmq_stomp],
175-
set: [:rabbitmq_federation]
175+
set: [:rabbitmq_exchange_federation, :rabbitmq_federation, :rabbitmq_federation_common, :rabbitmq_queue_federation]
176176
}
177177
] ==
178178
Enum.to_list(test_stream0)
179179

180180
assert {:ok, [[:rabbitmq_federation]]} == :file.consult(context[:opts][:enabled_plugins_file])
181181

182-
assert [:amqp_client, :rabbitmq_federation] ==
182+
assert [:amqp_client, :rabbitmq_exchange_federation, :rabbitmq_federation, :rabbitmq_federation_common, :rabbitmq_queue_federation] ==
183183
Enum.sort(:rabbit_misc.rpc_call(context[:opts][:node], :rabbit_plugins, :active, []))
184184

185185
assert {:stream, test_stream1} = @command.run(["rabbitmq_federation"], context[:opts])
@@ -189,8 +189,8 @@ defmodule DisablePluginsCommandTest do
189189
%{
190190
mode: :online,
191191
started: [],
192-
stopped: [:rabbitmq_federation],
193-
disabled: [:rabbitmq_federation],
192+
stopped: [:rabbitmq_exchange_federation, :rabbitmq_federation, :rabbitmq_federation_common, :rabbitmq_queue_federation],
193+
disabled: [:rabbitmq_federation_common, :rabbitmq_queue_federation, :rabbitmq_exchange_federation, :rabbitmq_federation],
194194
set: []
195195
}
196196
] ==
@@ -214,7 +214,7 @@ defmodule DisablePluginsCommandTest do
214214
|> Map.update!(:stopped, &Enum.sort/1)
215215
|> Map.update!(:disabled, &Enum.sort/1)
216216

217-
expected_list = Enum.sort([:rabbitmq_federation, :rabbitmq_stomp])
217+
expected_list = Enum.sort([:rabbitmq_exchange_federation, :rabbitmq_federation, :rabbitmq_federation_common, :rabbitmq_queue_federation, :rabbitmq_stomp])
218218

219219
assert [
220220
[],
@@ -243,7 +243,7 @@ defmodule DisablePluginsCommandTest do
243243
|> Map.update!(:stopped, &Enum.sort/1)
244244
|> Map.update!(:disabled, &Enum.sort/1)
245245

246-
expected_list = Enum.sort([:rabbitmq_federation, :rabbitmq_stomp])
246+
expected_list = Enum.sort([:rabbitmq_exchange_federation, :rabbitmq_federation, :rabbitmq_federation_common, :rabbitmq_queue_federation, :rabbitmq_stomp])
247247

248248
assert [
249249
[],

deps/rabbitmq_cli/test/plugins/enable_plugins_command_test.exs

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ defmodule EnablePluginsCommandTest do
120120

121121
check_plugins_enabled([:rabbitmq_stomp], context)
122122

123-
assert [:amqp_client, :rabbitmq_federation, :rabbitmq_stomp] ==
123+
assert [:amqp_client, :rabbitmq_exchange_federation, :rabbitmq_federation, :rabbitmq_federation_common, :rabbitmq_queue_federation, :rabbitmq_stomp] ==
124124
currently_active_plugins(context)
125125
end
126126

@@ -144,7 +144,7 @@ defmodule EnablePluginsCommandTest do
144144
check_plugins_enabled([:rabbitmq_stomp], context)
145145

146146
assert_equal_sets(
147-
[:amqp_client, :rabbitmq_federation, :rabbitmq_stomp],
147+
[:amqp_client, :rabbitmq_exchange_federation, :rabbitmq_federation, :rabbitmq_federation_common, :rabbitmq_queue_federation, :rabbitmq_stomp],
148148
currently_active_plugins(context)
149149
)
150150
end
@@ -174,11 +174,11 @@ defmodule EnablePluginsCommandTest do
174174
)
175175

176176
assert [
177-
[:rabbitmq_federation, :rabbitmq_stomp],
177+
[:rabbitmq_exchange_federation, :rabbitmq_federation, :rabbitmq_federation_common, :rabbitmq_queue_federation, :rabbitmq_stomp],
178178
%{
179179
mode: :offline,
180-
enabled: [:rabbitmq_federation],
181-
set: [:rabbitmq_federation, :rabbitmq_stomp]
180+
enabled: [:rabbitmq_exchange_federation, :rabbitmq_federation, :rabbitmq_federation_common, :rabbitmq_queue_federation],
181+
set: [:rabbitmq_exchange_federation, :rabbitmq_federation, :rabbitmq_federation_common, :rabbitmq_queue_federation, :rabbitmq_stomp]
182182
}
183183
] ==
184184
Enum.to_list(test_stream1)
@@ -210,21 +210,21 @@ defmodule EnablePluginsCommandTest do
210210
{:stream, test_stream1} = @command.run(["rabbitmq_federation"], context[:opts])
211211

212212
assert [
213-
[:rabbitmq_federation, :rabbitmq_stomp],
213+
[:rabbitmq_exchange_federation, :rabbitmq_federation, :rabbitmq_federation_common, :rabbitmq_queue_federation, :rabbitmq_stomp],
214214
%{
215215
mode: :online,
216-
started: [:rabbitmq_federation],
216+
started: [:rabbitmq_exchange_federation, :rabbitmq_federation, :rabbitmq_federation_common, :rabbitmq_queue_federation],
217217
stopped: [],
218-
enabled: [:rabbitmq_federation],
219-
set: [:rabbitmq_federation, :rabbitmq_stomp]
218+
enabled: [:rabbitmq_exchange_federation, :rabbitmq_federation, :rabbitmq_federation_common, :rabbitmq_queue_federation],
219+
set: [:rabbitmq_exchange_federation, :rabbitmq_federation, :rabbitmq_federation_common, :rabbitmq_queue_federation, :rabbitmq_stomp]
220220
}
221221
] ==
222222
Enum.to_list(test_stream1)
223223

224224
check_plugins_enabled([:rabbitmq_stomp, :rabbitmq_federation], context)
225225

226226
assert_equal_sets(
227-
[:amqp_client, :rabbitmq_federation, :rabbitmq_stomp],
227+
[:amqp_client, :rabbitmq_exchange_federation, :rabbitmq_federation, :rabbitmq_federation_common, :rabbitmq_queue_federation, :rabbitmq_stomp],
228228
currently_active_plugins(context)
229229
)
230230

@@ -239,21 +239,21 @@ defmodule EnablePluginsCommandTest do
239239
@command.run(["rabbitmq_stomp", "rabbitmq_federation"], context[:opts])
240240

241241
assert [
242-
[:rabbitmq_federation, :rabbitmq_stomp],
242+
[:rabbitmq_exchange_federation, :rabbitmq_federation, :rabbitmq_federation_common, :rabbitmq_queue_federation, :rabbitmq_stomp],
243243
%{
244244
mode: :online,
245-
started: [:rabbitmq_federation, :rabbitmq_stomp],
245+
started: [:rabbitmq_exchange_federation, :rabbitmq_federation, :rabbitmq_federation_common, :rabbitmq_queue_federation, :rabbitmq_stomp],
246246
stopped: [],
247-
enabled: [:rabbitmq_federation, :rabbitmq_stomp],
248-
set: [:rabbitmq_federation, :rabbitmq_stomp]
247+
enabled: [:rabbitmq_exchange_federation, :rabbitmq_federation, :rabbitmq_federation_common, :rabbitmq_queue_federation, :rabbitmq_stomp],
248+
set: [:rabbitmq_exchange_federation, :rabbitmq_federation, :rabbitmq_federation_common, :rabbitmq_queue_federation, :rabbitmq_stomp]
249249
}
250250
] ==
251251
Enum.to_list(test_stream)
252252

253253
check_plugins_enabled([:rabbitmq_stomp, :rabbitmq_federation], context)
254254

255255
assert_equal_sets(
256-
[:amqp_client, :rabbitmq_federation, :rabbitmq_stomp],
256+
[:amqp_client, :rabbitmq_exchange_federation, :rabbitmq_federation, :rabbitmq_federation_common, :rabbitmq_queue_federation, :rabbitmq_stomp],
257257
currently_active_plugins(context)
258258
)
259259

@@ -266,14 +266,14 @@ defmodule EnablePluginsCommandTest do
266266
assert {:stream, test_stream} = @command.run(["amqp_client"], context[:opts])
267267

268268
assert [
269-
[:rabbitmq_federation],
270-
%{mode: :online, started: [], stopped: [], enabled: [], set: [:rabbitmq_federation]}
269+
[:rabbitmq_exchange_federation, :rabbitmq_federation, :rabbitmq_federation_common, :rabbitmq_queue_federation],
270+
%{mode: :online, started: [], stopped: [], enabled: [], set: [:rabbitmq_exchange_federation, :rabbitmq_federation, :rabbitmq_federation_common, :rabbitmq_queue_federation]}
271271
] ==
272272
Enum.to_list(test_stream)
273273

274274
check_plugins_enabled([:rabbitmq_federation], context)
275275

276-
assert [:amqp_client, :rabbitmq_federation] ==
276+
assert [:amqp_client, :rabbitmq_exchange_federation, :rabbitmq_federation, :rabbitmq_federation_common, :rabbitmq_queue_federation] ==
277277
currently_active_plugins(context)
278278

279279
reset_enabled_plugins_to_preconfigured_defaults(context)

deps/rabbitmq_cli/test/plugins/set_plugins_command_test.exs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ defmodule SetPluginsCommandTest do
9292

9393
assert {:ok, [[:rabbitmq_stomp]]} = :file.consult(context[:opts][:enabled_plugins_file])
9494

95-
assert [:amqp_client, :rabbitmq_federation, :rabbitmq_stomp] =
95+
assert [:amqp_client, :rabbitmq_exchange_federation, :rabbitmq_federation, :rabbitmq_federation_common, :rabbitmq_queue_federation, :rabbitmq_stomp] =
9696
Enum.sort(:rabbit_misc.rpc_call(context[:opts][:node], :rabbit_plugins, :active, []))
9797
end
9898

@@ -108,7 +108,7 @@ defmodule SetPluginsCommandTest do
108108

109109
assert {:ok, [[:rabbitmq_stomp]]} = :file.consult(context[:opts][:enabled_plugins_file])
110110

111-
assert [:amqp_client, :rabbitmq_federation, :rabbitmq_stomp] =
111+
assert [:amqp_client, :rabbitmq_exchange_federation, :rabbitmq_federation, :rabbitmq_federation_common, :rabbitmq_queue_federation, :rabbitmq_stomp] =
112112
Enum.sort(:rabbit_misc.rpc_call(context[:opts][:node], :rabbit_plugins, :active, []))
113113
end
114114

@@ -120,7 +120,7 @@ defmodule SetPluginsCommandTest do
120120
%{
121121
mode: :online,
122122
started: [],
123-
stopped: [:rabbitmq_federation],
123+
stopped: [:rabbitmq_exchange_federation, :rabbitmq_federation, :rabbitmq_federation_common, :rabbitmq_queue_federation],
124124
set: [:rabbitmq_stomp]
125125
}
126126
] = Enum.to_list(test_stream0)
@@ -133,18 +133,18 @@ defmodule SetPluginsCommandTest do
133133
assert {:stream, test_stream1} = @command.run(["rabbitmq_federation"], context[:opts])
134134

135135
assert [
136-
[:rabbitmq_federation],
136+
[:rabbitmq_exchange_federation, :rabbitmq_federation, :rabbitmq_federation_common, :rabbitmq_queue_federation],
137137
%{
138138
mode: :online,
139-
started: [:rabbitmq_federation],
139+
started: [:rabbitmq_exchange_federation, :rabbitmq_federation, :rabbitmq_federation_common, :rabbitmq_queue_federation],
140140
stopped: [:rabbitmq_stomp],
141-
set: [:rabbitmq_federation]
141+
set: [:rabbitmq_exchange_federation, :rabbitmq_federation, :rabbitmq_federation_common, :rabbitmq_queue_federation]
142142
}
143143
] = Enum.to_list(test_stream1)
144144

145145
assert {:ok, [[:rabbitmq_federation]]} = :file.consult(context[:opts][:enabled_plugins_file])
146146

147-
assert [:amqp_client, :rabbitmq_federation] =
147+
assert [:amqp_client, :rabbitmq_exchange_federation, :rabbitmq_federation, :rabbitmq_federation_common, :rabbitmq_queue_federation] =
148148
Enum.sort(:rabbit_misc.rpc_call(context[:opts][:node], :rabbit_plugins, :active, []))
149149
end
150150

@@ -156,7 +156,7 @@ defmodule SetPluginsCommandTest do
156156
%{
157157
mode: :online,
158158
started: [],
159-
stopped: [:rabbitmq_federation, :rabbitmq_stomp],
159+
stopped: [:rabbitmq_exchange_federation, :rabbitmq_federation, :rabbitmq_federation_common, :rabbitmq_queue_federation, :rabbitmq_stomp],
160160
set: []
161161
}
162162
] = Enum.to_list(test_stream)
@@ -174,19 +174,19 @@ defmodule SetPluginsCommandTest do
174174
@command.run(["rabbitmq_federation", "rabbitmq_stomp"], context[:opts])
175175

176176
assert [
177-
[:rabbitmq_federation, :rabbitmq_stomp],
177+
[:rabbitmq_exchange_federation, :rabbitmq_federation, :rabbitmq_federation_common, :rabbitmq_queue_federation, :rabbitmq_stomp],
178178
%{
179179
mode: :online,
180-
started: [:rabbitmq_federation, :rabbitmq_stomp],
180+
started: [:rabbitmq_exchange_federation, :rabbitmq_federation, :rabbitmq_federation_common, :rabbitmq_queue_federation, :rabbitmq_stomp],
181181
stopped: [],
182-
set: [:rabbitmq_federation, :rabbitmq_stomp]
182+
set: [:rabbitmq_exchange_federation, :rabbitmq_federation, :rabbitmq_federation_common, :rabbitmq_queue_federation, :rabbitmq_stomp]
183183
}
184184
] = Enum.to_list(test_stream)
185185

186186
assert {:ok, [[:rabbitmq_federation, :rabbitmq_stomp]]} =
187187
:file.consult(context[:opts][:enabled_plugins_file])
188188

189-
assert [:amqp_client, :rabbitmq_federation, :rabbitmq_stomp] =
189+
assert [:amqp_client, :rabbitmq_exchange_federation, :rabbitmq_federation, :rabbitmq_federation_common, :rabbitmq_queue_federation, :rabbitmq_stomp] =
190190
Enum.sort(:rabbit_misc.rpc_call(context[:opts][:node], :rabbit_plugins, :active, []))
191191
end
192192

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
PROJECT = rabbitmq_exchange_federation
2+
PROJECT_DESCRIPTION = RabbitMQ Exchange Federation
3+
PROJECT_MOD = rabbit_exchange_federation_app
4+
5+
define PROJECT_ENV
6+
[
7+
{pgroup_name_cluster_id, false},
8+
{internal_exchange_check_interval, 90000}
9+
]
10+
endef
11+
12+
define PROJECT_APP_EXTRA_KEYS
13+
{broker_version_requirements, []}
14+
endef
15+
16+
DEPS = rabbit_common rabbit amqp_client rabbitmq_federation_common
17+
TEST_DEPS = rabbitmq_ct_helpers rabbitmq_ct_client_helpers
18+
19+
PLT_APPS += rabbitmq_cli
20+
21+
DEP_EARLY_PLUGINS = rabbit_common/mk/rabbitmq-early-plugin.mk
22+
DEP_PLUGINS = rabbit_common/mk/rabbitmq-plugin.mk
23+
24+
include ../../rabbitmq-components.mk
25+
include ../../erlang.mk
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
## RabbitMQ Federation
2+
3+
RabbitMQ federation offers a group of features for loosely
4+
coupled and WAN-friendly distributed RabbitMQ setups. Note that
5+
this is not an alternative to queue mirroring.
6+
7+
8+
## Supported RabbitMQ Versions
9+
10+
This plugin ships with RabbitMQ, there is no need to
11+
install it separately.
12+
13+
14+
## Documentation
15+
16+
See [RabbitMQ federation plugin](https://www.rabbitmq.com/federation.html) on rabbitmq.com.
17+
18+
19+
## License and Copyright
20+
21+
Released under [the same license as RabbitMQ](https://www.rabbitmq.com/mpl.html).
22+
23+
2007-2015 (c) 2007-2024 Broadcom. The term “Broadcom” refers to Broadcom Inc. and/or its subsidiaries. All rights reserved.
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
%% This Source Code Form is subject to the terms of the Mozilla Public
2+
%% License, v. 2.0. If a copy of the MPL was not distributed with this
3+
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
4+
%%
5+
%% Copyright (c) 2007-2025 Broadcom. All Rights Reserved. The term “Broadcom” refers to Broadcom Inc. and/or its subsidiaries. All rights reserved.
6+
%%
7+
8+
-define(FEDERATION_PG_SCOPE, rabbitmq_exchange_federation_pg_scope).

0 commit comments

Comments
 (0)