Hello,

I have managed to replicate an issue that is occuring in our production
environment with the setup noted below. We are using ActiveMQ Artemis
version 2.15.

There are two brokers (broker1 and broker2). Each broker has only one queue
called test. There is a bridge from broker1 test queue to broker2 test
queue.

<bridges>
 <bridge name="broker1-to-broker2-bridge">
    <queue-name>test</queue-name>
    <static-connectors>
       <connector-ref>broker2-connector</connector-ref>
    </static-connectors>
 </bridge>
</bridges>

Using a java program (JMS API) we create 10 producers. Each producer puts
200 messages into the broker1 test queue (concurrently). The size of each
message is 70 megabytes.What should happen is that all messages should move
across the bridge and eventually end up in the broker2 test queue. What
happens is approximately 1 message (in some cases more) will make it to the
broker2 test queue, the other messages pile up in the broker1 test queue.
The consumer count on the broker1 test queue is always 1 and the delivering
count is 0. At this point nothing will ever get through the bridge - it is
completely sunk. There are absolutely *no log messages* in broker1 or
broker2 that would indicate something is wrong. Producers can however still
send messages to the broker1 test queue. In our actual production
environment, where all messages are not 70 megabytes, a restart of the
broker will move messages across the bridge until the issue occurs again
and we need to *manually restart the broker*.

If I rerun the above test with debug on, the only thing that seems to stick
out in the logs is that there are lots of SessionProducerCreditsMessages"
with credits=0 which leads us to the test below.

If we rerun the our test again with this configuration:

<bridges>
 <bridge name="broker1-to-broker2-bridge">
    <queue-name>test</queue-name>
    *<producer-window-size>209715200</producer-window-size>*
    <static-connectors>
       <connector-ref>broker2-connector</connector-ref>
    </static-connectors>
 </bridge>
</bridges>


The messages all flow from broker1 test queue to broker 2 test queue. The
documentation says this about producer-window-size:


   - producer-window-size. This optional parameter determines the producer
   flow control through the bridge. You usually leave this off unless you are
   dealing with huge large messages


*Questions*

1.) Could not configuring a producer-window-size on the bridge cause the
issue noted above? It says that it is disabled by default.
2.) What is considered a really huge large message?
3.) Should there not be something in the logs to indicate that something
fatal is going here?
4.) If you do need to configure the producer-window-size, how do you
determine the size that it should be set to (especially if you get all
sorts of message sizes)?
5.) Is there any reason why we wouldn't just set a very high
producer-window-size on all of our bridges? The only time the bridge should
not send messages is if the other side is down for some reason.

The issue is with Artemis 2.15, but we can also reproduce this on 2.16.

Thanks

Reply via email to