@@ -68,7 +68,7 @@ void multipleSimpleMessageListeners() {
68
68
69
69
Map <String , RabbitListenerContainerTestFactory > factories = context
70
70
.getBeansOfType (RabbitListenerContainerTestFactory .class , false , false );
71
- Assertions .assertThat (factories ).hasSize (3 );
71
+ Assertions .assertThat (factories ).hasSize (4 );
72
72
73
73
factories .values ().forEach (factory -> {
74
74
Assertions .assertThat (factory .getListenerContainers ().size ())
@@ -99,34 +99,38 @@ void testDeclarablesMatchProperRabbitAdmin() {
99
99
100
100
Map <String , RabbitListenerContainerTestFactory > factories = context
101
101
.getBeansOfType (RabbitListenerContainerTestFactory .class , false , false );
102
- Assertions .assertThat (factories ).hasSize (3 );
102
+ Assertions .assertThat (factories ).hasSize (4 );
103
103
104
104
BiFunction <RabbitAdmin , Declarable , Boolean > declares = (admin , dec ) -> dec .getDeclaringAdmins ().size () == 1
105
105
&& dec .getDeclaringAdmins ().contains (admin .getBeanName ());
106
106
107
107
Map <String , AbstractExchange > exchanges = context .getBeansOfType (AbstractExchange .class , false , false )
108
108
.values ().stream ().collect (Collectors .toMap (AbstractExchange ::getName , v -> v ));
109
- Assertions .assertThat (exchanges ).hasSize (3 );
109
+ Assertions .assertThat (exchanges ).hasSize (4 );
110
110
Assertions .assertThat (declares .apply (MultiConfig .DEFAULT_RABBIT_ADMIN , exchanges .get ("testExchange" ))).isTrue ();
111
111
Assertions .assertThat (declares .apply (MultiConfig .RABBIT_ADMIN_BROKER_B , exchanges .get ("testExchangeB" )))
112
112
.isTrue ();
113
113
Assertions .assertThat (declares .apply (MultiConfig .RABBIT_ADMIN_BROKER_C , exchanges .get ("testExchangeC" )))
114
114
.isTrue ();
115
+ Assertions .assertThat (declares .apply (MultiConfig .RABBIT_ADMIN_BROKER_D , exchanges .get ("testExchangeD" )))
116
+ .isTrue ();
115
117
116
118
Map <String , org .springframework .amqp .core .Queue > queues = context
117
119
.getBeansOfType (org .springframework .amqp .core .Queue .class , false , false )
118
120
.values ().stream ().collect (Collectors .toMap (org .springframework .amqp .core .Queue ::getName , v -> v ));
119
- Assertions .assertThat (queues ).hasSize (3 );
121
+ Assertions .assertThat (queues ).hasSize (4 );
120
122
Assertions .assertThat (declares .apply (MultiConfig .DEFAULT_RABBIT_ADMIN , queues .get ("testQueue" ))).isTrue ();
121
123
Assertions .assertThat (declares .apply (MultiConfig .RABBIT_ADMIN_BROKER_B , queues .get ("testQueueB" ))).isTrue ();
122
124
Assertions .assertThat (declares .apply (MultiConfig .RABBIT_ADMIN_BROKER_C , queues .get ("testQueueC" ))).isTrue ();
125
+ Assertions .assertThat (declares .apply (MultiConfig .RABBIT_ADMIN_BROKER_D , queues .get ("testQueueD" ))).isTrue ();
123
126
124
127
Map <String , Binding > bindings = context .getBeansOfType (Binding .class , false , false )
125
128
.values ().stream ().collect (Collectors .toMap (Binding ::getRoutingKey , v -> v ));
126
- Assertions .assertThat (bindings ).hasSize (3 );
129
+ Assertions .assertThat (bindings ).hasSize (4 );
127
130
Assertions .assertThat (declares .apply (MultiConfig .DEFAULT_RABBIT_ADMIN , bindings .get ("testKey" ))).isTrue ();
128
131
Assertions .assertThat (declares .apply (MultiConfig .RABBIT_ADMIN_BROKER_B , bindings .get ("testKeyB" ))).isTrue ();
129
132
Assertions .assertThat (declares .apply (MultiConfig .RABBIT_ADMIN_BROKER_C , bindings .get ("testKeyC" ))).isTrue ();
133
+ Assertions .assertThat (declares .apply (MultiConfig .RABBIT_ADMIN_BROKER_D , bindings .get ("testKeyD" ))).isTrue ();
130
134
131
135
context .close (); // Close and stop the listeners
132
136
}
@@ -180,9 +184,19 @@ void testCreationOfConnections() {
180
184
Mockito .verify (MultiConfig .CONNECTION_FACTORY_BROKER_C ).createConnection ();
181
185
Mockito .verify (MultiConfig .CONNECTION_BROKER_C ).createChannel (false );
182
186
187
+ Mockito .verify (MultiConfig .CONNECTION_FACTORY_BROKER_D , Mockito .never ()).createConnection ();
188
+ Mockito .verify (MultiConfig .CONNECTION_BROKER_D , Mockito .never ()).createChannel (false );
189
+ SimpleResourceHolder .bind (MultiConfig .ROUTING_CONNECTION_FACTORY , "brokerD" );
190
+ rabbitTemplate .convertAndSend ("messageToBrokerD" );
191
+ SimpleResourceHolder .unbind (MultiConfig .ROUTING_CONNECTION_FACTORY );
192
+ Mockito .verify (MultiConfig .CONNECTION_FACTORY_BROKER_D ).createConnection ();
193
+ Mockito .verify (MultiConfig .CONNECTION_BROKER_D ).createChannel (false );
194
+
183
195
context .close (); // Close and stop the listeners
184
196
}
185
197
198
+
199
+
186
200
@ Test
187
201
@ DisplayName ("Test assignment of RabbitAdmin in the endpoint registry" )
188
202
void testAssignmentOfRabbitAdminInTheEndpointRegistry () {
@@ -192,7 +206,7 @@ void testAssignmentOfRabbitAdminInTheEndpointRegistry() {
192
206
final RabbitListenerEndpointRegistry registry = context .getBean (RabbitListenerEndpointRegistry .class );
193
207
final Collection <MessageListenerContainer > listenerContainers = registry .getListenerContainers ();
194
208
195
- Assertions .assertThat (listenerContainers ).hasSize (3 );
209
+ Assertions .assertThat (listenerContainers ).hasSize (4 );
196
210
listenerContainers .forEach (container -> {
197
211
Assertions .assertThat (container ).isInstanceOf (MessageListenerTestContainer .class );
198
212
final MessageListenerTestContainer refContainer = (MessageListenerTestContainer ) container ;
@@ -228,6 +242,13 @@ public void handleItB(String body) {
228
242
key = "testKeyC" ))
229
243
public void handleItC (String body ) {
230
244
}
245
+
246
+ @ RabbitListener (containerFactory = "${broker-name:brokerD}" , bindings = @ QueueBinding (
247
+ exchange = @ Exchange ("testExchangeD" ),
248
+ value = @ Queue ("testQueueD" ),
249
+ key = "testKeyD" ))
250
+ public void handleItD (String body ) {
251
+ }
231
252
}
232
253
233
254
@ Component
@@ -244,6 +265,10 @@ public void handleItB(String body) {
244
265
@ RabbitListener (queues = "testQueueC" , containerFactory = "brokerC" )
245
266
public void handleItC (String body ) {
246
267
}
268
+
269
+ @ RabbitListener (queues = "testQueueD" , containerFactory = "${broker-name:brokerD}" )
270
+ public void handleItD (String body ) {
271
+ }
247
272
}
248
273
249
274
@ Configuration
@@ -254,34 +279,41 @@ static class MultiConfig {
254
279
static final ConnectionFactory DEFAULT_CONNECTION_FACTORY = Mockito .mock (ConnectionFactory .class );
255
280
static final ConnectionFactory CONNECTION_FACTORY_BROKER_B = Mockito .mock (ConnectionFactory .class );
256
281
static final ConnectionFactory CONNECTION_FACTORY_BROKER_C = Mockito .mock (ConnectionFactory .class );
282
+ static final ConnectionFactory CONNECTION_FACTORY_BROKER_D = Mockito .mock (ConnectionFactory .class );
257
283
258
284
static final Connection DEFAULT_CONNECTION = Mockito .mock (Connection .class );
259
285
static final Connection CONNECTION_BROKER_B = Mockito .mock (Connection .class );
260
286
static final Connection CONNECTION_BROKER_C = Mockito .mock (Connection .class );
287
+ static final Connection CONNECTION_BROKER_D = Mockito .mock (Connection .class );
261
288
262
289
static final Channel DEFAULT_CHANNEL = Mockito .mock (Channel .class );
263
290
static final Channel CHANNEL_BROKER_B = Mockito .mock (Channel .class );
264
291
static final Channel CHANNEL_BROKER_C = Mockito .mock (Channel .class );
292
+ static final Channel CHANNEL_BROKER_D = Mockito .mock (Channel .class );
265
293
266
294
static {
267
295
final Map <Object , ConnectionFactory > targetConnectionFactories = new HashMap <>();
268
296
targetConnectionFactories .put ("brokerB" , CONNECTION_FACTORY_BROKER_B );
269
297
targetConnectionFactories .put ("brokerC" , CONNECTION_FACTORY_BROKER_C );
298
+ targetConnectionFactories .put ("brokerD" , CONNECTION_FACTORY_BROKER_D );
270
299
ROUTING_CONNECTION_FACTORY .setDefaultTargetConnectionFactory (DEFAULT_CONNECTION_FACTORY );
271
300
ROUTING_CONNECTION_FACTORY .setTargetConnectionFactories (targetConnectionFactories );
272
301
273
302
Mockito .when (DEFAULT_CONNECTION_FACTORY .createConnection ()).thenReturn (DEFAULT_CONNECTION );
274
303
Mockito .when (CONNECTION_FACTORY_BROKER_B .createConnection ()).thenReturn (CONNECTION_BROKER_B );
275
304
Mockito .when (CONNECTION_FACTORY_BROKER_C .createConnection ()).thenReturn (CONNECTION_BROKER_C );
305
+ Mockito .when (CONNECTION_FACTORY_BROKER_D .createConnection ()).thenReturn (CONNECTION_BROKER_D );
276
306
277
307
Mockito .when (DEFAULT_CONNECTION .createChannel (false )).thenReturn (DEFAULT_CHANNEL );
278
308
Mockito .when (CONNECTION_BROKER_B .createChannel (false )).thenReturn (CHANNEL_BROKER_B );
279
309
Mockito .when (CONNECTION_BROKER_C .createChannel (false )).thenReturn (CHANNEL_BROKER_C );
310
+ Mockito .when (CONNECTION_BROKER_D .createChannel (false )).thenReturn (CHANNEL_BROKER_D );
280
311
}
281
312
282
313
static final RabbitAdmin DEFAULT_RABBIT_ADMIN = new RabbitAdmin (DEFAULT_CONNECTION_FACTORY );
283
314
static final RabbitAdmin RABBIT_ADMIN_BROKER_B = new RabbitAdmin (CONNECTION_FACTORY_BROKER_B );
284
315
static final RabbitAdmin RABBIT_ADMIN_BROKER_C = new RabbitAdmin (CONNECTION_FACTORY_BROKER_C );
316
+ static final RabbitAdmin RABBIT_ADMIN_BROKER_D = new RabbitAdmin (CONNECTION_FACTORY_BROKER_D );
285
317
286
318
@ Bean
287
319
public RabbitListenerAnnotationBeanPostProcessor postProcessor () {
@@ -307,6 +339,11 @@ public RabbitAdmin rabbitAdminBrokerC() {
307
339
return RABBIT_ADMIN_BROKER_C ;
308
340
}
309
341
342
+ @ Bean ("brokerD-admin" )
343
+ public RabbitAdmin rabbitAdminBrokerD () {
344
+ return RABBIT_ADMIN_BROKER_D ;
345
+ }
346
+
310
347
@ Bean ("defaultContainerFactory" )
311
348
public RabbitListenerContainerTestFactory defaultContainerFactory () {
312
349
return new RabbitListenerContainerTestFactory ();
@@ -322,6 +359,11 @@ public RabbitListenerContainerTestFactory containerFactoryBrokerC() {
322
359
return new RabbitListenerContainerTestFactory ();
323
360
}
324
361
362
+ @ Bean ("brokerD" )
363
+ public RabbitListenerContainerTestFactory containerFactoryBrokerD () {
364
+ return new RabbitListenerContainerTestFactory ();
365
+ }
366
+
325
367
@ Bean
326
368
public RabbitListenerEndpointRegistry rabbitListenerEndpointRegistry () {
327
369
return new RabbitListenerEndpointRegistry ();
0 commit comments