The Test programs I provideded will demonstrate the issue.  To be fair and
honest the issue seems to be an issue with using the C# API and C++ API.  

Get the three test programs and you will see the the issue very clear.


Roger Hoover wrote:
> 
> Can anyone confirm or deny the second issue mentioned (what seems like the
> slow consumer problem)?
> 
> "2. A Producer that producers more then 200 messages per sec locks up the
> Broker when the Broker has only one client connected.  This one was the
> biggest issue to accept and the one issue that caused us to say ActiveMQ
> is
> not ready for a production environment.  The most basic and simple task of
> the Message Broker is not working as expected and makes the ActiveMQ
> unusable in a environment where peak message Generation can exceed 200
> messages per second.  To be honest we never even get close to 100 messages
> as it seems we die after 50 messages are fired in the same second.  The
> only
> time I am able to have producers producing without locking up or crashing
> is
> if I don't have any consumers listening.  Having a messaging system that
> works without consumers is not a valid solution."
> 
> On 12/11/07, Nathan Mittler <[EMAIL PROTECTED]> wrote:
>>
>> Appreciate your feedback and helping to identify this problem!  I've
>> captured this in a JIRA issue here:
>>
>> https://issues.apache.org/activemq/browse/AMQCPP-157
>>
>> We'll do our best to get this resolved soon!
>>
>> Regards,
>> Nate
>>
>> On Dec 11, 2007, at 9:10 AM, Hellweek wrote:
>>
>> >
>> > As promised I have created a c++ test program (TestProducerBug) that
>> > will
>> > create up to X producers. The class that does the work is
>> > (TestProducers.cpp).
>> >
>> > I am created a C# test program (TestConsumerBugCSharp) that will
>> > create up
>> > to X consumers using a MessageListener.  The class that does the
>> > work is
>> > (TestConsumers.cs).
>> >
>> > I have created a C++ test program (TestConsumerBug) that will create
>> > up to X
>> > consumers.  The class that does the work(TestConsumers.cpp).
>> >
>> > Here is some information on my setup.
>> >
>> > Compiler MS 2005.
>> >
>> > ActiveMQ
>> > Running ActiveMQ 5.0 Dated Dec 7th 2007.  It is running on windows
>> > 2003
>> > Server 64 Bit.
>> > Running Java 1.6.0_02 this version of Java is 64 bit. (Problem
>> > happens even
>> > on a 32 bit version of JAVA).
>> >
>> > ActiveMQ Settings
>> > Broker Settings (persistent="false" advisorySupport="false")
>> >
>> > Topic Policy
>> > <policyEntry topic="Test.>" producerFlowControl="true">
>> >
>> >            <!-- lets force old messages to be discarded for slow
>> > consumers
>> > -->
>> >            <pendingMessageLimitStrategy>
>> >              <constantPendingMessageLimitStrategy limit="5"/>
>> >            </pendingMessageLimitStrategy>
>> >  <messageEvictionStrategy>
>> >  <oldestMessageEvictionStrategy />
>> >  </messageEvictionStrategy>
>> >
>> >          </policyEntry>
>> >
>> >
>> > Client API's
>> >
>> > CPP activemq-cpp-2.1.2-src
>> > C# ApacheActiveMQ (Not sure the version but latest trunk).
>> >
>> >
>> > When running these test remember to stop and restart the broker each
>> > test as
>> > the test can and will cause the broker to hang.
>> >
>> > Tests 1 -3 will show what is happening between the CPP and C# API.
>> >
>> > Test 4 will show what happens to a producer when a consumer is in a
>> > break
>> > point in the MessageListener.
>> >
>> > Test 1
>> > To recreate the issue build and run
>> > TestProducerBug
>> > TestConsumerBugCSharp.
>> >
>> > If you set the number of producers and clients to 10 you should see
>> > the
>> > problem happen in less then 5 min (About 2,000 messages per consumer).
>> > The producer will throw an exception place a breakpoint on the catch
>> > block
>> > in the ThreadProc.  you will see the following information.
>> > No valid response received for command: Begin Class =
>> > ActiveMQBytesMessage
>> >
>> > Begin Class = ActiveMQMessageBase
>> >
>> > Value of ackHandler = 00000000
>> >
>> > Value of redeliveryCount = 0
>> >
>> > Value of properties = Begin Class PrimitiveMap:
>> >
>> > Begin Class PrimitiveMap:
>> >
>> > Begin Class = Message
>> >
>> > Value of Message::ID_MESSAGE = 0
>> >
>> > Value of ProducerId is Below:
>> >
>> > Begin Class = ProducerId
>> >
>> > Value of ProducerId::ID_PRODUCERID = 123
>> >
>> > Value of ConnectionId = 752afa01-c256-45c2-84ad-c74b0578f199
>> >
>> > Value of Value = 19
>> >
>> > Value of SessionId = 0
>> >
>> > No Data for Class BaseDataStructure
>> >
>> > End Class = ProducerId
>> >
>> > Value of Destination is Below:
>> >
>> > Begin Class = ActiveMQTopic
>> >
>> > Begin Class = ActiveMQDestination
>> >
>> > Value of exclusive = false
>> >
>> > Value of ordered = false
>> >
>> > Value of advisory = false
>> >
>> > Value of orderedTarget = coordinator
>> >
>> > Value of physicalName = Test.20
>> >
>> > Value of options = Begin Class activemq::util::Properties:
>> >
>> > End Class activemq::util::Properties:
>> >
>> > No Data for Class BaseDataStructure
>> >
>> > End Class = ActiveMQDestination
>> >
>> > End Class = ActiveMQTopic
>> >
>> > Value of TransactionId is Below:
>> >
>> > Object is NULL
>> >
>> > Value of OriginalDestination is Below:
>> >
>> > Object is NULL
>> >
>> > Value of MessageId is Below:
>> >
>> > Begin Class = MessageId
>> >
>> > Value of MessageId::ID_MESSAGEID = 110
>> >
>> > Value of ProducerId is Below:
>> >
>> > Begin Class = ProducerId
>> >
>> > Value of ProducerId::ID_PRODUCERID = 123
>> >
>> > Value of ConnectionId = 752afa01-c256-45c2-84ad-c74b0578f199
>> >
>> > Value of Value = 19
>> >
>> > Value of SessionId = 0
>> >
>> > No Data for Class BaseDataStructure
>> >
>> > End Class = ProducerId
>> >
>> > Value of ProducerSequenceId = 19025
>> >
>> > Value of BrokerSequenceId = 0
>> >
>> > No Data for Class BaseDataStructure
>> >
>> > End Class = MessageId
>> >
>> > Value of OriginalTransactionId is Below:
>> >
>> > Object is NULL
>> >
>> > Value of GroupID =
>> >
>> > Value of GroupSequence = 0
>> >
>> > Value of CorrelationId =
>> >
>> > Value of Persistent = 0
>> >
>> > Value of Expiration = 1197392556357
>> >
>> > Value of Priority = 4
>> >
>> > Value of ReplyTo is Below:
>> >
>> > Object is NULL
>> >
>> > Value of Timestamp = 1197392551357
>> >
>> > Value of Type =
>> >
>> > Value of Content[0] =
>> >
>> > Value of Content[1] = , check broker.
>> >
>> > FILE: ..\src\main\activemq\transport\filters\ResponseCorrelator.cpp,
>> > LINE:
>> > 146
>> >
>> > FILE: ..\src\main\activemq\transport\filters\ResponseCorrelator.cpp,
>> > LINE:
>> > 154
>> >
>> > FILE: ..\src\main\activemq\connector\openwire
>> > \OpenWireFormatNegotiator.cpp,
>> > LINE: 105
>> >
>> > FILE: ..\src\main\activemq\connector\openwire\OpenWireConnector.cpp,
>> > LINE:
>> > 1371
>> >
>> > FILE: ..\src\main\activemq\connector\openwire\OpenWireConnector.cpp,
>> > LINE:
>> > 848
>> >
>> > FILE: ..\src\main\activemq\core\ActiveMQSession.cpp, LINE: 675
>> >
>> > FILE: ..\src\main\activemq\core\ActiveMQProducer.cpp, LINE: 194
>> >
>> > FILE: ..\src\main\activemq\core\ActiveMQProducer.cpp, LINE: 149
>> >
>> > FILE: ..\src\main\activemq\core\ActiveMQProducer.cpp, LINE: 108
>> >
>> >
>> > Test 2
>> > Now if you build and run
>> > TestProducerBug
>> > TestConsumerBug
>> >
>> > These tests both use the C++ API and works as expected
>> >
>> >
>> > Test 3
>> > In the CPP program TestProducerBug you will find a sleep commented
>> > out in
>> > the ThreadProc uncomment this line.  Build Program.
>> > Build TestConsumerCSharp.
>> >
>> > You will find with the 100 ms sleep the application is stable.
>> >
>> >
>> > Test 4
>> > Build TestProducerBug remember to comment out the sleep
>> > Build TestConsumerCSharp.
>> >
>> > Place a breakpoint on the MessageListner in the C# program.
>> >
>> > In very little time the producer will throw an exception.
>> >
>> > Hellweek wrote:
>> >>
>> >>
>> >> Hello,
>> >>
>> >> I know what I am about to post will upset a few people, however I
>> >> think it
>> >> is important that I document my experience with ActiveMQ in the
>> >> hopes that
>> >> others like me can have an understanding of the issues that you
>> >> will face.
>> >>
>> >> A little history.
>> >>
>> >> I am not new to Open Source projects, have been involved in them
>> >> and have
>> >> sponsored the use of open source for many years.
>> >>
>> >> I have been working with various message brokers for a few years.  My
>> >> first experience was with TIBCO EMS.  Needless to say I was very
>> >> impressed
>> >> with the stability and functionality of this fine EMS.  Next I had
>> >> the
>> >> opportunity to work with Sonic EMS.  Again I was impressed with this
>> >> product and was even happier with its low cost of ownership.
>> >>
>> >> Over the last 6 weeks it has been my job to evaluate for our
>> >> Trading firm
>> >> an internal messaging system.  We wanted to use a EMS solution for
>> >> dissemination of pricing data to our in-house applications as well as
>> >> external clients of ours.  The messaging systems we are
>> >> evaluating.  TIBCO
>> >> EMS, MSMQ 3.0, SONIC EMS, ACTIVEMQ 4.1.1 or ActieMQ 5.0.
>> >>
>> >> How did each product fair?
>> >> 1. Tibco EMS no issues with any of the stress tests and performance
>> >> tests.
>> >> 2. MSMQ don't even get me started with this POS.
>> >> 3. SONIC EMS no issues with any of the stress tests and performance
>> >> tests.
>> >> 4. ActiveMQ can not make it past any stress tests.  See issues
>> >> below for
>> >> an understanding of what we saw.
>> >>
>> >>
>> >> I have watched ActiveMQ for well over 2 years and 2 years ago the
>> >> project
>> >> was so filled with issues that I knew I would never be able to
>> >> recommend
>> >> it to the owners of the company.  2 Years later and I was in the
>> >> position
>> >> of trying ActiveMQ again and hoping that it would be stable.
>> >>
>> >> I was very pleased to see that many of the issues I saw with
>> >> ActiveMQ had
>> >> been resolved and was committed to giving ActiveMQ a chance at
>> >> being our
>> >> EMS solution for the future.  However, I can say after weeks of
>> >> testing
>> >> ActiveMQ Is still not ready for production use by myself and the
>> >> firm I
>> >> work for.  If you have high message throughput with high number of
>> >> subscribers ActiveMQ is not well suited for your needs.
>> >>
>> >> Lets take some time to examine the issues.
>> >>
>> >> CPP ActiveMQ Client
>> >> 1. A fast producer with slow clients can and will take down the
>> >> producer.
>> >> From what I have seen in testing a slow client can bring the
>> >> producer down
>> >> and in some cases can bring the broker down.  A miss-behaved
>> >> producer or
>> >> client should never ever take the broker down.
>> >>
>> >> 2. A Producer that producers more then 200 messages per sec locks
>> >> up the
>> >> Broker when the Broker has only one client connected.  This one was
>> >> the
>> >> biggest issue to accept and the one issue that caused us to say
>> >> ActiveMQ
>> >> is not ready for a production environment.  The most basic and
>> >> simple task
>> >> of the Message Broker is not working as expected and makes the
>> >> ActiveMQ
>> >> unusable in a environment where peak message Generation can exceed
>> >> 200
>> >> messages per second.  To be honest we never even get close to 100
>> >> messages
>> >> as it seems we die after 50 messages are fired in the same second.
>> >> The
>> >> only time I am able to have producers producing without locking up or
>> >> crashing is if I don't have any consumers listening.  Having a
>> >> messaging
>> >> system that works without consumers is not a valid solution.
>> >>
>> >> Again important to note.  As long as no consumers are connected I can
>> >> produce massive amounts of messages.  Once you connect a client
>> >> massive
>> >> issues start to happen.
>> >>
>> >> 3. Producers and consumers created on the same connection can cause
>> >> deadlocks.  This is a major issue and the main solution is to not
>> >> do this.
>> >> However, this is an unacceptable solution as it is my understanding
>> >> this
>> >> is an acceptable practice.
>> >>
>> >> 4. A fast producer with a fast consumer leads to resource creep.  I
>> >> don't
>> >> want to say it is a memory leak because it is not a leak it is just
>> >> a very
>> >> very slow release of the memory.  I should not have to put sleeps
>> >> in a
>> >> program just to insure that memory gets released correctly.  In my
>> >> test I
>> >> had to sleep for 20 MS between each message being sent to keep the
>> >> ActiveMQ consumer running.
>> >>
>> >> 5. Placing a breakpoint on the message listener on a consumer will
>> >> cause
>> >> out of memory errors in the producer.  Why me setting a breakpoint
>> >> on a
>> >> consumer can cause the producer to throw an exception is
>> >> unacceptable and
>> >> leads me to think that a slow consumer can and will take the broker
>> >> and or
>> >> producer down.
>> >>
>> >> 6. Very confusing to determine what version of ActiveMQ will work
>> >> with
>> >> what version of the client.  Example ActiveMQ 5.0 was released this
>> >> week.
>> >> However, no new client was released and no information on when new
>> >> client
>> >> will be released.  The CPP client just released a 2.1.3 version that
>> >> claims it should be paired with 4.1.1 of the ActiveMQ broker.
>> >> Where is
>> >> the CPP client that is to work with the new features of 5.0?
>> >>
>> >> With all the issues I have I will not be able to go to a production
>> >> environment with ActiveMQ, this is a shame as the people that have
>> >> been
>> >> working this project are talented people and should be commended
>> >> for the
>> >> work that has been done.
>> >>
>> > http://www.nabble.com/file/p14278412/ActiveMQ%2BIssue.ZIP ActiveMQ
>> > +Issue.ZIP
>> > --
>> > View this message in context:
>> http://www.nabble.com/ActiveMQ-thoughts-tp14262131s2354p14278412.html
>> > Sent from the ActiveMQ - User mailing list archive at Nabble.com.
>> >
>>
>>
> 
> 

-- 
View this message in context: 
http://www.nabble.com/ActiveMQ-thoughts-tp14262131s2354p14295149.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.

Reply via email to