From 0232f990784cff0b466dc21755dda37ea1dfc358 Mon Sep 17 00:00:00 2001 From: malakaganga Date: Thu, 13 Jun 2024 10:36:30 +0530 Subject: [PATCH] Fix using stale channel when broker is down Fixes: https://github.com/wso2/api-manager/issues/2935 --- .../synapse/message/store/impl/rabbitmq/RabbitMQStore.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/modules/core/src/main/java/org/apache/synapse/message/store/impl/rabbitmq/RabbitMQStore.java b/modules/core/src/main/java/org/apache/synapse/message/store/impl/rabbitmq/RabbitMQStore.java index 40ed201e98..1727ad0824 100644 --- a/modules/core/src/main/java/org/apache/synapse/message/store/impl/rabbitmq/RabbitMQStore.java +++ b/modules/core/src/main/java/org/apache/synapse/message/store/impl/rabbitmq/RabbitMQStore.java @@ -351,12 +351,15 @@ public void destroy() { @Override public MessageProducer getProducer() { RabbitMQProducer producer = new RabbitMQProducer(this); + boolean producerConnectionInvalidated = false; producer.setId(nextProducerId()); producer.setExchangeName(exchangeName); producer.setRoutingKey(routingKey); if (producerConnection == null) { + producerConnectionInvalidated = true; producerConnection = createConnection(); } else if (!producerConnection.isOpen()) { + producerConnectionInvalidated = true; producerConnection.abort(); producerConnection = createConnection(); } @@ -365,7 +368,7 @@ public MessageProducer getProducer() { if (log.isDebugEnabled()) { log.debug(nameString() + " created message producer " + producer.getId()); } - if (channel == null) { + if (channel == null || producerConnectionInvalidated) { channel = createChannel(producerConnection); } producer.setChannel(channel);