@@ -126,7 +126,7 @@ public class AmqpAppender extends AbstractAppender {
126126 /**
127127 * The template.
128128 */
129- private RabbitTemplate rabbitTemplate ;
129+ private final RabbitTemplate rabbitTemplate = new RabbitTemplate () ;
130130
131131 /**
132132 * Where LoggingEvents are queued to send.
@@ -250,12 +250,18 @@ public static Builder newBuilder() {
250250 * Submit the required number of senders into the pool.
251251 */
252252 private void startSenders () {
253+ this .rabbitTemplate .setConnectionFactory (this .manager .connectionFactory );
253254 if (this .manager .async ) {
254- this .manager .senderPool = Executors .newCachedThreadPool ();
255255 for (int i = 0 ; i < this .manager .senderPoolSize ; i ++) {
256256 this .manager .senderPool .submit (new EventSender ());
257257 }
258258 }
259+ else if (this .manager .maxSenderRetries > 0 ) {
260+ RetryTemplate retryTemplate = new RetryTemplate ();
261+ RetryPolicy retryPolicy = new SimpleRetryPolicy (this .manager .maxSenderRetries );
262+ retryTemplate .setRetryPolicy (retryPolicy );
263+ this .rabbitTemplate .setRetryTemplate (retryTemplate );
264+ }
259265 }
260266
261267 @ Override
@@ -281,22 +287,6 @@ protected Message postProcessMessageBeforeSend(Message message, Event event) {
281287 }
282288
283289 protected void sendEvent (Event event , Map <?, ?> properties ) {
284- synchronized (this ) {
285- if (this .rabbitTemplate == null ) {
286- if (this .manager .activateOptions ()) {
287- this .rabbitTemplate = new RabbitTemplate (this .manager .connectionFactory );
288- if (!this .manager .async && this .manager .maxSenderRetries > 0 ) {
289- RetryTemplate retryTemplate = new RetryTemplate ();
290- RetryPolicy retryPolicy = new SimpleRetryPolicy (this .manager .maxSenderRetries );
291- retryTemplate .setRetryPolicy (retryPolicy );
292- this .rabbitTemplate .setRetryTemplate (retryTemplate );
293- }
294- }
295- else {
296- throw new AmqpException ("Cannot create template" );
297- }
298- }
299- }
300290 LogEvent logEvent = event .getEvent ();
301291 String name = logEvent .getLoggerName ();
302292 Level level = logEvent .getLevel ();
@@ -362,7 +352,7 @@ protected void doSend(Event event, LogEvent logEvent, MessageProperties amqpProp
362352 message = new Message (msgBody .toString ().getBytes (), amqpProps ); //NOSONAR (default charset)
363353 }
364354 message = postProcessMessageBeforeSend (message , event );
365- this .rabbitTemplate .send (this .manager .exchangeName , routingKey , message ); // NOSONAR (sync)
355+ this .rabbitTemplate .send (this .manager .exchangeName , routingKey , message );
366356 }
367357 catch (AmqpException e ) {
368358 int retries = event .incrementRetries ();
@@ -655,7 +645,7 @@ protected AmqpManager(LoggerContext loggerContext, String name) {
655645 super (loggerContext , name );
656646 }
657647
658- boolean activateOptions () {
648+ private boolean activateOptions () {
659649 ConnectionFactory rabbitConnectionFactory = createRabbitConnectionFactory ();
660650 if (rabbitConnectionFactory != null ) {
661651 Assert .state (this .applicationId != null , "applicationId is required" );
@@ -677,6 +667,7 @@ boolean activateOptions() {
677667 this .clientConnectionProperties );
678668 }
679669 setUpExchangeDeclaration ();
670+ this .senderPool = Executors .newCachedThreadPool ();
680671 return true ;
681672 }
682673 return false ;
@@ -1191,8 +1182,11 @@ public AmqpAppender build() {
11911182 }
11921183
11931184 AmqpAppender appender = buildInstance (this .name , this .filter , theLayout , this .ignoreExceptions , manager , eventQueue );
1194- appender .startSenders ();
1195- return appender ;
1185+ if (manager .activateOptions ()) {
1186+ appender .startSenders ();
1187+ return appender ;
1188+ }
1189+ return null ;
11961190 }
11971191
11981192 /**
0 commit comments