Hey. I'm looking for a high-performance solution for message throughput of about 10.000 messages per second. I think thats no problem at all.
My System: - Some multi-core systems - ActiveMQ 5.3 - Apache tomcat + Java Webapp handling Producers - Java tool handling Consumers and delivering to the target system. - Messages of typ Add/Update/Delete But I have some limiting facts to take care about: 1) I need to make sure that no message is lost. For that case i did some testing with redundant brokers on different hosts. If one dies the other takes over, no prblem, but still loosing messages. I'm using failover-configuration within Java-API for producer and consumer. API works fine. But I think the activeMQ server uses transaction to persist data to the MYSQL-Cluster and if I kill one Broker (using kill -9 <pid>) the transaction is not done and the messages are lost. Using just kill <pid> no message is lost, but some times there is one more than I sent. I hope that behaviour is just a configuration fault I did. I'm using just two little configuration for the factory I used to create some Producer: ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(user, password, url); connectionFactory.setAlwaysSessionAsync(false); connectionFactory.setAlwaysSyncSend(true); My Session uses: Session.AUTO_ACKNOWLEDGE Per message I run the following code: this.session.getProducer().send(message); if (transacted) this.session.getSession().commit(); this.session.close(); I know that I create one new producer per Message. Sure could change that. But why are messages lost on broker fault? 2) The second fact I need to care for: The order of the Messages is importened. Reason: One Message tells the system to update, the other message to delete. If the entry is deleted before updating system throws error. Is there any possibility for multiple brokers to take care of producing order? UseCase: One Server slows down and the other one deliveres normal. Messages got mixed up and Consuming system runs into error. I'm sure I could just use one broker and ensure the order, but that's perhaps to slow. For more information my broker configuration: <beans xmlns="http://www.springframework.org/schema/beans" xmlns:amq="http://activemq.apache.org/schema/core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd"> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/> <broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" useJmx="true"> <persistenceAdapter> <journaledJDBC dataDirectory="${activemq.base}/data" dataSource="#mysql-ds"/> </persistenceAdapter> <transportConnectors> <transportConnector name="openwire" uri="tcp://0.0.0.0:61616"/> </transportConnectors> <destinationPolicy> <policyMap> <policyEntries> <policyEntry queue=">" producerFlowControl="true" memoryLimit="20mb"> <deadLetterStrategy> <individualDeadLetterStrategy queuePrefix="DLQ." useQueueForQueueMessages="true" /> </deadLetterStrategy> </policyEntry> <policyEntry topic=">" producerFlowControl="true" memoryLimit="20mb"> </policyEntry> </policyEntries> </policyMap> </destinationPolicy> <managementContext> <managementContext createConnector="true"/> </managementContext> <systemUsage> <systemUsage sendFailIfNoSpace="true"> <memoryUsage> <memoryUsage limit="1024 mb"/> </memoryUsage> <storeUsage> <storeUsage limit="2 gb" name="foo"/> </storeUsage> <tempUsage> <tempUsage limit="1000 mb"/> </tempUsage> </systemUsage> </systemUsage> </broker> <bean id="mysql-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost/activemq?relaxAutoCommit=true"/> <property name="username" value="activemq"/> <property name="password" value="activepwd"/> <property name="maxActive" value="200"/> <property name="poolPreparedStatements" value="true"/> </bean> <jetty xmlns="http://mortbay.com/schemas/jetty/1.0"> <connectors> <nioConnector port="8161"/> </connectors> <handlers> <webAppContext contextPath="/admin" resourceBase="${activemq.base}/webapps/admin" logUrlOnStart="true"/> <webAppContext contextPath="/fileserver" resourceBase="${activemq.base}/webapps/fileserver" logUrlOnStart="true"/> </handlers> </jetty> </beans> I hope some one can help me. Or spend me some good advice for cluster design and a configuration example. -- View this message in context: http://old.nabble.com/General-Design-Help-tp26284819p26284819.html Sent from the ActiveMQ - User mailing list archive at Nabble.com.