Hi

I need a simple queue.

This queue will be persistent and it will use a database in the backend to
store the messages.

It will receive produced messages small in size (just one or two string
attributes) in bursts of 10~100.

It will consume messages by a pool of 100~300 message driven beans (tomee).
Each message will be consumed and will trigger a long-running job that may
take from 1 minute to 1 hour to complete. If the job fails, I want the
message to return to the queue so it can be consumed again, no matter how
many retries.

I don't want to send invalid messages to a "poisoned messages queue".

Architecture is simple. The queue will run in a single activeMQ instance
and consumers are MDBs from a single TomEE+ web application.

So, here's what I have so far

activemq.xml=========================================

    <broker xmlns="http://activemq.apache.org/schema/core";
brokerName="localhost" dataDirectory="${activemq.data}">
        <destinationPolicy>
            <policyMap>
                <policyEntries>
                    <policyEntry topic=">" producerFlowControl="true">
                        <pendingMessageLimitStrategy>
                            <constantPendingMessageLimitStrategy
limit="1000" />
                        </pendingMessageLimitStrategy>
                    </policyEntry>
                    <policyEntry queue=">" producerFlowControl="true"
memoryLimit="1mb">
                    </policyEntry>
                </policyEntries>
            </policyMap>
        </destinationPolicy>

        <persistenceAdapter>
            <jdbcPersistenceAdapter dataSource="#oracle-ds" />
        </persistenceAdapter>

        <systemUsage>
            <systemUsage>
                <memoryUsage>
                    <memoryUsage limit="1 gb" />
                </memoryUsage>
                <storeUsage>
                    <storeUsage limit="100 gb" />
                </storeUsage>
                <tempUsage>
                    <tempUsage limit="50 gb" />
                </tempUsage>
            </systemUsage>
        </systemUsage>

        <transportConnectors>
            <transportConnector name="tcp" uri="tcp://0.0.0.0:61616" />
        </transportConnectors>
    </broker>

    <bean id="oracle-ds" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
        <property name="driverClassName" value="oracle.jdbc.OracleDriver" />
        <property name="url" value="jdbc:oracle:thin:@localhost:1521:XE" />
        <property name="username" value="*****" />
        <property name="password" value="******" />
        <property name="poolPreparedStatements" value="true" />
        <property name="maxActive" value="100" />
    </bean>

tomee.xml=========================================

    <Resource id="Default JMS Resource Adapter"
type="ActiveMQResourceAdapter">
        BrokerXmlConfig =  broker:(tcp://localhost:61616)
        ServerUrl = tcp://localhost:61616
        ThreadPoolSize = 200
    </Resource>

    <Resource id="MyJmsConnectionFactory"
type="javax.jms.ConnectionFactory">
    ResourceAdapter = Default\ JMS\ Resource\ Adapter
    PoolMaxSize = 200
    </Resource>

    <Resource id="JobQueue" type="javax.jms.Queue" />

MDB=========================================

@MessageDriven(activationConfig = {
        @ActivationConfigProperty(propertyName = "destinationType",
propertyValue = "javax.jms.Queue"),
        @ActivationConfigProperty(propertyName = "destination",
propertyValue = "JobQueue"),
        @ActivationConfigProperty(propertyName = "maxMessagesPerSessions",
propertyValue = "1"),
        @ActivationConfigProperty(propertyName = "maxSessions",
propertyValue = "200"),
        @ActivationConfigProperty(propertyName = "acknowledgeMode",
propertyValue = "Auto-acknowledge") })

=========================================

With this configuration, I am still facing some interruptions.

Sometimes, TomEE simply stops consuming the queue (once or twice per week),
so I have to restart it. I am still checking the logs for anything
suspicious.

I am using TomEE+ 1.6.0 stable (quite old, I know) and a standalone AMQ
5.10 stable in a linux environment and oracle JDK 7.

But I'd like some advice on how to properly set up activemq / tomee in this
scenario (that's why I am sending this email to both activemq and tomee
lists)

Thank you very much, any help is welcome.

[]

Leo

Reply via email to