35
35
import org .springframework .context .ApplicationContextAware ;
36
36
import org .springframework .context .ApplicationListener ;
37
37
import org .springframework .context .event .ContextRefreshedEvent ;
38
+ import org .springframework .integration .core .MessageSource ;
38
39
import org .springframework .integration .endpoint .IntegrationConsumer ;
39
40
import org .springframework .integration .endpoint .MessageProducerSupport ;
40
41
import org .springframework .integration .endpoint .PollingConsumer ;
50
51
import org .springframework .lang .Nullable ;
51
52
import org .springframework .messaging .MessageChannel ;
52
53
import org .springframework .messaging .MessageHandler ;
54
+ import org .springframework .messaging .PollableChannel ;
55
+ import org .springframework .util .ClassUtils ;
53
56
54
57
/**
55
58
* Builds the runtime object model graph.
62
65
*/
63
66
public class IntegrationGraphServer implements ApplicationContextAware , ApplicationListener <ContextRefreshedEvent > {
64
67
65
- private static final float GRAPH_VERSION = 1.0f ;
68
+ private static final float GRAPH_VERSION = 1.1f ;
69
+
70
+ private static MicrometerNodeEnhancer micrometerEnhancer ;
66
71
67
72
private final NodeFactory nodeFactory = new NodeFactory ();
68
73
@@ -152,6 +157,10 @@ protected <T> Map<String, T> getBeansOfType(Class<T> type) {
152
157
}
153
158
154
159
private synchronized Graph buildGraph () {
160
+ if (micrometerEnhancer == null && ClassUtils .isPresent ("io.micrometer.core.instrument.MeterRegistry" ,
161
+ this .applicationContext .getClassLoader ())) {
162
+ micrometerEnhancer = new MicrometerNodeEnhancer (this .applicationContext );
163
+ }
155
164
String implementationVersion = IntegrationGraphServer .class .getPackage ().getImplementationVersion ();
156
165
if (implementationVersion == null ) {
157
166
implementationVersion = "unknown - is Spring Integration running from the distribution jar?" ;
@@ -347,91 +356,128 @@ private static final class NodeFactory {
347
356
super ();
348
357
}
349
358
350
- private MessageChannelNode channelNode (String name , MessageChannel channel ) {
351
- return new MessageChannelNode (this .nodeId .incrementAndGet (), name , channel );
359
+ MessageChannelNode channelNode (String name , MessageChannel channel ) {
360
+ MessageChannelNode node ;
361
+ if (channel instanceof PollableChannel ) {
362
+ node = new PollableChannelNode (this .nodeId .incrementAndGet (), name , channel );
363
+ }
364
+ else {
365
+ node = new MessageChannelNode (this .nodeId .incrementAndGet (), name , channel );
366
+ }
367
+ if (IntegrationGraphServer .micrometerEnhancer != null ) {
368
+ node = IntegrationGraphServer .micrometerEnhancer .enhance (node );
369
+ }
370
+ return node ;
352
371
}
353
372
354
- private MessageGatewayNode gatewayNode (String name , MessagingGatewaySupport gateway ) {
373
+ MessageGatewayNode gatewayNode (String name , MessagingGatewaySupport gateway ) {
355
374
String errorChannel = channelToBeanName (gateway .getErrorChannel ());
356
375
String requestChannel = channelToBeanName (gateway .getRequestChannel ());
357
376
return new MessageGatewayNode (this .nodeId .incrementAndGet (), name , gateway , requestChannel , errorChannel );
358
377
}
359
378
360
379
@ Nullable
361
- private String channelToBeanName (MessageChannel messageChannel ) {
380
+ String channelToBeanName (MessageChannel messageChannel ) {
362
381
return messageChannel instanceof NamedComponent
363
382
? ((NamedComponent ) messageChannel ).getBeanName ()
364
383
: Objects .toString (messageChannel , null );
365
384
}
366
385
367
- private MessageProducerNode producerNode (String name , MessageProducerSupport producer ) {
386
+ MessageProducerNode producerNode (String name , MessageProducerSupport producer ) {
368
387
String errorChannel = channelToBeanName (producer .getErrorChannel ());
369
388
String outputChannel = channelToBeanName (producer .getOutputChannel ());
370
389
return new MessageProducerNode (this .nodeId .incrementAndGet (), name , producer ,
371
390
outputChannel , errorChannel );
372
391
}
373
392
374
- private MessageSourceNode sourceNode (String name , SourcePollingChannelAdapter adapter ) {
393
+ MessageSourceNode sourceNode (String name , SourcePollingChannelAdapter adapter ) {
375
394
String errorChannel = channelToBeanName (adapter .getDefaultErrorChannel ());
376
395
String outputChannel = channelToBeanName (adapter .getOutputChannel ());
377
- return new MessageSourceNode (this .nodeId .incrementAndGet (), name , adapter .getMessageSource (),
396
+ String nameToUse = name ;
397
+ MessageSource <?> source = adapter .getMessageSource ();
398
+ if (source instanceof NamedComponent ) {
399
+ nameToUse = ((NamedComponent ) source ).getComponentName ();
400
+ }
401
+ MessageSourceNode node = new MessageSourceNode (this .nodeId .incrementAndGet (), nameToUse , source ,
378
402
outputChannel , errorChannel );
403
+ if (IntegrationGraphServer .micrometerEnhancer != null ) {
404
+ node = IntegrationGraphServer .micrometerEnhancer .enhance (node );
405
+ }
406
+ return node ;
379
407
}
380
408
381
- private MessageHandlerNode handlerNode (String name , IntegrationConsumer consumer ) {
409
+ MessageHandlerNode handlerNode (String nameArg , IntegrationConsumer consumer ) {
382
410
String outputChannelName = channelToBeanName (consumer .getOutputChannel ());
383
411
MessageHandler handler = consumer .getHandler ();
412
+ MessageHandlerNode node ;
413
+ String name = nameArg ;
414
+ if (handler instanceof NamedComponent ) {
415
+ name = ((NamedComponent ) handler ).getComponentName ();
416
+ }
384
417
if (handler instanceof CompositeMessageHandler ) {
385
- return compositeHandler (name , consumer , (CompositeMessageHandler ) handler , outputChannelName , null ,
418
+ node = compositeHandler (name , consumer , (CompositeMessageHandler ) handler , outputChannelName , null ,
386
419
false );
387
420
}
388
421
else if (handler instanceof DiscardingMessageHandler ) {
389
- return discardingHandler (name , consumer , (DiscardingMessageHandler ) handler , outputChannelName , null ,
422
+ node = discardingHandler (name , consumer , (DiscardingMessageHandler ) handler , outputChannelName , null ,
390
423
false );
391
424
}
392
425
else if (handler instanceof MappingMessageRouterManagement ) {
393
- return routingHandler (name , consumer , handler , (MappingMessageRouterManagement ) handler ,
426
+ node = routingHandler (name , consumer , handler , (MappingMessageRouterManagement ) handler ,
394
427
outputChannelName , null , false );
395
428
}
396
429
else if (handler instanceof RecipientListRouterManagement ) {
397
- return recipientListRoutingHandler (name , consumer , handler , (RecipientListRouterManagement ) handler ,
430
+ node = recipientListRoutingHandler (name , consumer , handler , (RecipientListRouterManagement ) handler ,
398
431
outputChannelName , null , false );
399
432
}
400
433
else {
401
434
String inputChannel = channelToBeanName (consumer .getInputChannel ());
402
- return new MessageHandlerNode (this .nodeId .incrementAndGet (), name , handler ,
435
+ node = new MessageHandlerNode (this .nodeId .incrementAndGet (), name , handler ,
403
436
inputChannel , outputChannelName );
404
437
}
438
+ if (IntegrationGraphServer .micrometerEnhancer != null ) {
439
+ node = IntegrationGraphServer .micrometerEnhancer .enhance (node );
440
+ }
441
+ return node ;
405
442
}
406
443
407
- private MessageHandlerNode polledHandlerNode (String name , PollingConsumer consumer ) {
444
+ MessageHandlerNode polledHandlerNode (String nameArg , PollingConsumer consumer ) {
408
445
String outputChannelName = channelToBeanName (consumer .getOutputChannel ());
409
446
String errorChannel = channelToBeanName (consumer .getDefaultErrorChannel ());
410
447
MessageHandler handler = consumer .getHandler ();
448
+ MessageHandlerNode node ;
449
+ String name = nameArg ;
450
+ if (handler instanceof NamedComponent ) {
451
+ name = ((NamedComponent ) handler ).getComponentName ();
452
+ }
411
453
if (handler instanceof CompositeMessageHandler ) {
412
- return compositeHandler (name , consumer , (CompositeMessageHandler ) handler , outputChannelName ,
454
+ node = compositeHandler (name , consumer , (CompositeMessageHandler ) handler , outputChannelName ,
413
455
errorChannel , true );
414
456
}
415
457
else if (handler instanceof DiscardingMessageHandler ) {
416
- return discardingHandler (name , consumer , (DiscardingMessageHandler ) handler , outputChannelName ,
458
+ node = discardingHandler (name , consumer , (DiscardingMessageHandler ) handler , outputChannelName ,
417
459
errorChannel , true );
418
460
}
419
461
else if (handler instanceof MappingMessageRouterManagement ) {
420
- return routingHandler (name , consumer , handler , (MappingMessageRouterManagement ) handler ,
462
+ node = routingHandler (name , consumer , handler , (MappingMessageRouterManagement ) handler ,
421
463
outputChannelName , errorChannel , true );
422
464
}
423
465
else if (handler instanceof RecipientListRouterManagement ) {
424
- return recipientListRoutingHandler (name , consumer , handler , (RecipientListRouterManagement ) handler ,
466
+ node = recipientListRoutingHandler (name , consumer , handler , (RecipientListRouterManagement ) handler ,
425
467
outputChannelName , errorChannel , true );
426
468
}
427
469
else {
428
470
String inputChannel = channelToBeanName (consumer .getInputChannel ());
429
- return new ErrorCapableMessageHandlerNode (this .nodeId .incrementAndGet (), name , handler ,
471
+ node = new ErrorCapableMessageHandlerNode (this .nodeId .incrementAndGet (), name , handler ,
430
472
inputChannel , outputChannelName , errorChannel );
431
473
}
474
+ if (IntegrationGraphServer .micrometerEnhancer != null ) {
475
+ node = IntegrationGraphServer .micrometerEnhancer .enhance (node );
476
+ }
477
+ return node ;
432
478
}
433
479
434
- private MessageHandlerNode compositeHandler (String name , IntegrationConsumer consumer ,
480
+ MessageHandlerNode compositeHandler (String name , IntegrationConsumer consumer ,
435
481
CompositeMessageHandler handler , String output , String errors , boolean polled ) {
436
482
437
483
List <CompositeMessageHandlerNode .InnerHandler > innerHandlers =
@@ -453,7 +499,7 @@ private MessageHandlerNode compositeHandler(String name, IntegrationConsumer con
453
499
inputChannel , output , innerHandlers );
454
500
}
455
501
456
- private MessageHandlerNode discardingHandler (String name , IntegrationConsumer consumer ,
502
+ MessageHandlerNode discardingHandler (String name , IntegrationConsumer consumer ,
457
503
DiscardingMessageHandler handler , String output , String errors , boolean polled ) {
458
504
459
505
String discards = channelToBeanName (handler .getDiscardChannel ());
@@ -465,7 +511,7 @@ private MessageHandlerNode discardingHandler(String name, IntegrationConsumer co
465
511
inputChannel , output , discards );
466
512
}
467
513
468
- private MessageHandlerNode routingHandler (String name , IntegrationConsumer consumer , MessageHandler handler ,
514
+ MessageHandlerNode routingHandler (String name , IntegrationConsumer consumer , MessageHandler handler ,
469
515
MappingMessageRouterManagement router , String output , String errors , boolean polled ) {
470
516
471
517
Collection <String > routes =
@@ -481,7 +527,7 @@ private MessageHandlerNode routingHandler(String name, IntegrationConsumer consu
481
527
inputChannel , output , routes );
482
528
}
483
529
484
- private MessageHandlerNode recipientListRoutingHandler (String name , IntegrationConsumer consumer ,
530
+ MessageHandlerNode recipientListRoutingHandler (String name , IntegrationConsumer consumer ,
485
531
MessageHandler handler , RecipientListRouterManagement router , String output , String errors ,
486
532
boolean polled ) {
487
533
@@ -499,7 +545,7 @@ private MessageHandlerNode recipientListRoutingHandler(String name, IntegrationC
499
545
inputChannel , output , routes );
500
546
}
501
547
502
- private void reset () {
548
+ void reset () {
503
549
this .nodeId .set (0 );
504
550
}
505
551
0 commit comments