Hi, Our tests show some problems in activemq flow-control and congestion handling. We use C++ interface for client side with openwire transport. We used slow consumers to test the behavior of client and server. No persistency is used.
Our environment is: Server: Activemq-4.1.1 JAVA: J2SDK1.4.2_14 Operating System: Linux AS4 2.6.9-42ELsmp Client: Transport: openwire C++ Client api version: activemq-cpp-2.0.1-1.rhe14 C++ Compiler: gcc-c++-3.4.6 Operating System: Linux AS4 2.6.9-42ELsmp Problem description: Activemq Congestion problem (Here congestion means the state that flow-control is enabled and configured size of topic/queue is reached and producers are blocked): Topics in congestion state: 1. When consumer goes down, without closing the connection, broker does not clean up resources for that connection. This caused producer to stay blocked forever. 2. If we attempt to clean up connection from jconsole. Producer is killed with segmentation fault. Queues in congestion state: 1. If producer starts before consumer and gets blocked, once consumer starts producer gets segmentation fault. 2. If producer is blocked and consumer crashes, and we restart consumer, producer gets segmentation fault. 3. When producer is blocked, if memory is increased from jconsole. Producer gets segmentation fault. In summary, once producer is congestion state, it can not come out of that state. TCP dump shows that every time the congestion is likely to be relieved by some methods (increase memory, speedup consumer, etc), producer receives a message from broker (14 bytes, probably related to flow control to inform the producer that there is no more congestion and it can send more messages). But it seems the Producer can not understand this message and tries to close resources. Closing resources in turn has a bug and get segmentation fault. The segfault is a known issue documented on activemq forum and a fix will be in next release. But producer should have understood the flow-control message and goes on. TTL in congestion state: For both topic and queue, TTL does not work in congestion. If producer is blocked due to flow-control, memory is not cleared when messages expire due to ttl. Thanks, Anlin. -- View this message in context: http://www.nabble.com/AMQ-CPP-flow-control-and-server-congestion-handling-problem-tf4325223s2354.html#a12318190 Sent from the ActiveMQ - User mailing list archive at Nabble.com.