Developer README
How to use it
-
Create a task table in producer side DB
- DROP TABLE IF EXISTS
dev_db.jms_b_task; - CREATE TABLE
dev_db.jms_b_task(idint(10) unsigned NOT NULL AUTO_INCREMENT,content_idvarchar(45) DEFAULT NULL,typeint(10) unsigned NOT NULL,statusint(10) unsigned NOT NULL,created_timedatetime NOT NULL,operated_timedatetime DEFAULT NULL,messagelongtext,retryint(10) unsigned DEFAULT NULL,last_errorvarchar(200) DEFAULT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
- DROP TABLE IF EXISTS
-
Use JMSTaskDAO to add task
-
Create specific scheduler (implementing AbstractJMSScheduler) to execute task (sending message)
-
If using NO_ACKNOWLEDGE mode, receive message in consumer side.
-
If using CLIENT_ACKNOWLEDGE mode, receive message in consumer side by implementing AbstractTaskMessageListener
-
If using CLIENT_ACKNOWLEDGE mode, ReplyReceiver will get the acknoledge message
Spring configuration
- Producer
<!-- JMS Task configuration --> <!-- JMS DAO --> <bean id="jmsTaskDao" class="com.bleum.canton.jms.dao.impl.JMSTaskDao"> <property name="dataSource" ref="estoreDataSource" /> </bean> <!-- Acknowledge reply queue --> <bean id="replyQueueEstore" class="org.apache.activemq.command.ActiveMQQueue"> <constructor-arg index="0" value="estore.reply.queue"></constructor-arg> </bean> <!-- Task Scheduler --> <bean id="inventoryScheduler" class="com.bleum.canton.oms.jms.scheduler.InventoryScheduler"> <property name="initialDelay" value="10000" /> <property name="fixedDelay" value="30000" /> <property name="threads" value="1" /> <property name="maxTasksPerThread" value="10" /> <property name="jmsSender" ref="inventoryUpdateSender" /> </bean> <!-- Task Scheduler using client acknowledge mode --> <bean id="orderCreateScheduler" class="com.bleum.canton.oms.jms.scheduler.OrderCreateScheduler"> <property name="initialDelay" value="10000" /> <property name="fixedDelay" value="30000" /> <property name="threads" value="1" /> <property name="maxTasksPerThread" value="10" /> <property name="jmsSender" ref="orderCreateSender" /> <property name="clientAck" value="2" /> <property name="replyQueue" ref="replyQueueEstore" /> </bean> <!-- Acknowledge reply receiver, needed if using client acknowledge mode --> <bean id="replyReceiver" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> <property name="connectionFactory" ref="connectionFactory" /> <property name="destination" ref="replyQueueEstore" /> <property name="messageListener" ref="replyMessageListener" /> <property name="concurrentConsumers" value="1" /> <property name="sessionTransacted" value="true" /> <property name="receiveTimeout" value="10000" /> </bean>
- Consumer
<!-- JMS Task configuration --> <!-- JMS DAO, this is only needed if using client acknowledge mode --> <bean id="jmsTaskDao" class="com.bleum.canton.jms.dao.impl.JMSTaskDao"> <property name="dataSource" ref="estoreDataSource" /> </bean>