Our backend application is pumping a large number of messages through an ActiveMQ queue (upwards of 6,000 typically) to our frontend application (Flex based) through Flex Data Services.
We are using Jconsole to track the number of messages that go in to the queue, and the number of messages that get pulled off of the queue. In our testing, 100% of the time Flex Data Services consumes 100% of the messages off of the queue. Roughly 30% of the time however, the Flex application's Consumer receives only a small portion of the total messages from FDS (the number varies, but it is usually around 5-10% of the total messages). We have looked through the FDS documentation extensively, and added all appropriate settings to both our messaging-config.xml and our services-config, here are some excerpts of those settings: Our queue as defined in messaging-config.xml: <destination id="MQ00001"> <adapter ref="jms" /> <properties> <network> <session-timeout>0</session-timeout> </network> <jms> <destination-type>Queue</destination-type> <message-type>javax.jms.TextMessage</message-type> <connection-factory>ConnectionFactory</connection-factory> <destination-jndi-name>dynamicQueues/MQ00001</destination- jndi-name> <delivery-mode>PERSISTENT</delivery-mode> <message-priority>DEFAULT_PRIORITY</message-priority> <acknowledge-mode>AUTO_ACKNOWLEDGE</acknowledge-mode> <transacted-sessions>false</transacted-sessions> <initial-context-environment> <property> <name>Context.INITIAL_CONTEXT_FACTORY</name> <value>org.apache.activemq.jndi.ActiveMQInitialContextFactory</value> </property> <property> <name>Context.PROVIDER_URL</name> <value>tcp://192.168.2.187:61616</value> </property> </initial-context-environment> </jms> <server> <max-cache-size>100000</max-cache-size> <message-time-to-live>0</message-time-to-live> <durable>true</durable> </server> </properties> <channels> <channel ref="my-rtmp" /> </channels> </destination> As you can see, we are setting generous values for our max-cache-size (number of messages to cache), and making sure that our messages live forever on the queue, and we are also ensuring delivery by setting their durable setting to true. We also ensure that our consumers never automatically disconnect from the queue (session-timeout = 0). Our RTMP channel definition in services-config.xml: <channel-definition id="my-rtmp" class="mx.messaging.channels.RTMPChannel"> <endpoint uri="rtmp://{server.name}:443" class="flex.messaging.endpoints.RTMPEndpoint"/> <properties> <idle-timeout-minutes>720</idle-timeout-minutes> <client-to-server-maxbps>10000K</client-to-server-maxbps> <server-to-client-maxbps>10000K</server-to-client-maxbps> <accept-backlog>100000</accept-backlog> </properties> </channel-definition> Again, we are setting generous values for all of our values here to ensure delivery of messages. We had initially thought that perhaps this was based on the UDP protocol and packets were getting dropped (for whatever reason). After some research, we are led to believe that RTMP (the protocol of which these messages are transferred over) is based on TCP, which would mean that there shouldn't be any dropping of packets. We have pretty much ruled this out as a possible problem. Does anybody have any experience with these types of issues? Or any thoughts on what else we might look at for settings, optimization, etc? Help for any Adobe guys or general gurus in Flex Data Services would be much appreciated. Thanks for your time, Brian