Hi Norberto,

I think you have a valid case. Ignoring that expectation will drop the
message with a log and proceed. As you have mentioned it should be caught
and handled properly.

Will you be able to open up an issue [1] and report this?

If you are already familiar with the source code you can try out a fix from
your end. One suggestion I can give it replace the logging with handle
exception as follows,

public RMQChannelPool(RabbitMQConnectionFactory connectionFactory, int
> connectionPoolSize) {
>         RMQChannelPool = new LinkedBlockingDeque<>();
>         try {
>             Connection connection = connectionFactory.createConnection();
>             for (int i = 0; i < connectionPoolSize; i++) {
>                 com.rabbitmq.client.Channel channel =
> connection.createChannel();
>                 RMQChannelPool.add(new RMQChannel(connection, channel));
>             }
>         } catch (IOException e) {
>
> * handleExcpetion("Exception occurred while creating connection", e);*
>     }
>     }
>


handleException will wrap the stacktrace with a Runtime exception and throw
it.

[1]. https://github.com/wso2/product-ei/issues

Thanks,

On Thu, Jan 25, 2018 at 3:50 AM, Norberto Fernandes <[email protected]>
wrote:

> Hi Devs, Maheeka,
>
> Hope that you can share some light on this one.
>
> I noticed that we can have exceptions in case we use an rabbitmq outbound
> endpoint with incorrect credentials. This can occur for example if the
> password used to connect to rabbitmq was changed in rabbitmq server and not
> updated in the WSO2 Proxy/sequence that makes the send to the rabbitmq
> endpoint.
>
> If this happens we can see an error on the logs, but it looks the actual
> payloads/messages are lost. I understand that this may not happen very
> often but it can happen. I believe it would be ideal to have this error
> handled by the fault sequence. And it doesn’t look to be the case.
>
> My error trace that is presented on the logs is as follow:
>
> TID: [-1] [] [2018-01-24 21:37:11,159] ERROR {org.apache.axis2.transport.
> rabbitmq.RabbitMQConnectionFactory} -  [NF_CF] Could not connect to
> RabbitMQ Broker. Error while creating connection
> {org.apache.axis2.transport.rabbitmq.RabbitMQConnectionFactory}
> com.rabbitmq.client.AuthenticationFailureException: ACCESS_REFUSED -
> Login was refused using authentication mechanism PLAIN. For details see the
> broker logfile.
> at com.rabbitmq.client.impl.AMQConnection.start(AMQConnection.java:343)
> at com.rabbitmq.client.impl.recovery.RecoveryAwareAMQConnectionFact
> ory.newConnection(RecoveryAwareAMQConnectionFactory.java:58)
> at com.rabbitmq.client.impl.recovery.AutorecoveringConnection.init(
> AutorecoveringConnection.java:103)
> at com.rabbitmq.client.ConnectionFactory.newConnection(
> ConnectionFactory.java:877)
> at com.rabbitmq.client.ConnectionFactory.newConnection(
> ConnectionFactory.java:839)
> at com.rabbitmq.client.ConnectionFactory.newConnection(
> ConnectionFactory.java:661)
> at org.apache.axis2.transport.rabbitmq.utils.RabbitMQUtils.
> createConnection(RabbitMQUtils.java:56)
> at org.apache.axis2.transport.rabbitmq.RabbitMQConnectionFactory.
> createConnection(RabbitMQConnectionFactory.java:133)
> at org.apache.axis2.transport.rabbitmq.RMQChannelPool.<init>
> (RMQChannelPool.java:20)
> at org.apache.axis2.transport.rabbitmq.RabbitMQConnectionFactory.
> initializeConnectionPool(RabbitMQConnectionFactory.java:370)
> at org.apache.axis2.transport.rabbitmq.RabbitMQConnectionFactoryManag
> er.getConnectionFactory(RabbitMQConnectionFactoryManager.java:95)
> at org.apache.axis2.transport.rabbitmq.RabbitMQSender.
> getConnectionFactory(RabbitMQSender.java:127)
> at org.apache.axis2.transport.rabbitmq.RabbitMQSender.
> sendMessage(RabbitMQSender.java:81)
> at org.apache.axis2.transport.base.AbstractTransportSender.invoke(
> AbstractTransportSender.java:112)
> at org.apache.axis2.engine.AxisEngine$TransportNonBlockingInvocation
> Worker.run(AxisEngine.java:626)
> at java.util.concurrent.ThreadPoolExecutor.runWorker(
> ThreadPoolExecutor.java:1149)
> at java.util.concurrent.ThreadPoolExecutor$Worker.run(
> ThreadPoolExecutor.java:624)
> at java.lang.Thread.run(Thread.java:748)
> TID: [-1] [] [2018-01-24 21:37:11,160]  INFO 
> {org.apache.axis2.engine.AxisEngine}
> -  [MessageContext: logID=399f008a24cfba5968f58c11109b21a614b857c9b7e4790c]
> [NF_CF] Could not connect to RabbitMQ Broker. Error while creating
> connection {org.apache.axis2.engine.AxisEngine}
>
>
> This trace is logged 3 times because the code is doing a retry on
> RabbitMQConnectionFactory.createConnection. When all retries are
> performed this method will throw an exception back to the RMQChannelPool .
>
> If we noticed on the source code of the RMQChannelPool we have:
>
> public RMQChannelPool(RabbitMQConnectionFactory connectionFactory, int
> connectionPoolSize) {
>
>         RMQChannelPool = new LinkedBlockingDeque<>();
>         try {
>             Connection connection = connectionFactory.createConnection();
>             for (int i = 0; i < connectionPoolSize; i++) {
>                 com.rabbitmq.client.Channel channel =
> connection.createChannel();
>                 RMQChannelPool.add(new RMQChannel(connection, channel));
>             }
>         } catch (IOException e) {
>            * log.error("Exception occurred while creating connection",
> e);*
>         }
>     }
>
> This code is doing a catch and just logging a message with the exception.
> So the exception stops at this point.
>
> Looking at the code that it looks to me that the channels are not created
> and nothing gets delivered. I didn't manage to follow the send message code
> sequence but I suspect that it is returning success because I don’t see any
> error on the logs. I assume that it is because of some lucky combination of
> if statements. For sure the message is not being delivered to rabbitmq
> since the password is incorrect. And since there isn’t any other error
> message and it doesn’t execute the fault sequence I assume that it is
> dropping the message.
>
> I have added Maheeka on CC since I notice that he did some work on these
> code in the past.
>
> Please me know if you can help.
>
>
> Many thanks in advance.
> Norberto
>
>
> _______________________________________________
> Dev mailing list
> [email protected]
> http://wso2.org/cgi-bin/mailman/listinfo/dev
>
>


-- 
*Eranda Rajapakshe*
Software Engineer
WSO2 Inc.
Mobile : +94784822608
_______________________________________________
Dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to