Use TIES JMS ServicesLearn how to configure TIES JMS services for supporting multiple coder servers
You can use additional computing resources to speed up the time it takes for your reports to be processed. A typical single server installation of TIES, can only process about 8000-10000 reports per day.
If you want to add more coders to the mix, you can do that by switching over to the TIES JMS services. TIES uses Java Messaging Queues to facilitate this. JMS Producer services add reports to be processed to the queue from where the coders pick them up, and after processing, return them to the processed queues. The JMS Consumer picks up from there and saves the processed reports to the database.
You can add as many coders as you like, as long as the producers and consumers can keep up. We have certain sites coding 150,000 reports a day using 16 coders.
JMS Coder Producer: Reads reports in CODING status from ties_public database and adds them to the CODING_QUEUE
JMS TiesPipeController: Reads reports from the CODING_QUEUE, processes, sets status of report to INDEXING and saves results to CODING_PROCESSED_QUEUE
JMS Coder Consumer: Reads reports from the CODING_PROCESSED queue and saves results to the database
JMS Indexer Producer: Reads reports in INDEXING status from ties_public database and adds them to the INDEXING_QUEUE
JMS IndexPipeController: Reads reports from the INDEXING_QUEUE, adds them to the index and saves report with IDLING status back to the INDEXING_PROCESSED_QUEUE.
JMS Indexer Consumer: Reads reports from the INDEXING_PROCESSED queue, Saves report back to database.
- Download and install ActiveMQ (http://activemq.apache.org/)
- Run the TIES Installer. One the first screen, there is a JMS Server URL text box. Enter tcp://localhost:61616. That is the default for ActiveMQ. (unless u changed it during install)
- On the next screen, select “Install Pipelines Only” option.
- On the following screen select the three JMS options (JMS Ties Pipe Controller, JMS Index Pipe Controller, JMS Database Bridge Services)
- On the next screen , begin installation.
- After installation completes, you will notice several new windows services, all starting with “TIES JMS…”
- You should stop your TiesPipeController and IndexPipeController services and disable them, as you are switching over to their JMS counterparts.
- Next start the JMS Producers and JMS Consumers Services. There will be one each for the coder and indexer
- To check your queues http://localhost:8161/admin/queues.jsp, you should start seeing the CODING and INDEXING queues filling up.
- Next we specify the number of cores to use for the coder. Edit the JMSTiesPipeController/classes/config/caTIES.properties file and near the bottom, you should see a caties.coder.processes parameter. Set it to a reasonable value that accounts for anything else running on this server.
- No modifications are required for the JMS IndexPipeController, as it can only run on one core. Start its service as well.
- Monitor the queues again (Step 9) you should start to see the PROCESSED queues filling up.
- If you start to notice the CPU usage being constantly over 90% for all cores, you might need to scale back the number of coder processes.
TIES Coder prints 'work completed' in the logs but there are several reports still waiting to be processed in the database
- Make sure you are using the JMSTiesPipeController and not the TiesPipeController.
- Check the ActiveMQ JMS queues to see if there are reports in the CODING_QUEUE. You can check queues status at http://<youractivemqserverhostname>:8161/admin/queues.jsp
- If there are no reports in the CODING_QUEUE, check to see if the JMS Coder Producer and JMS Coder Consumer services are running and they have no errors in the logs.
- If there are reports in the CODING_QUEUE, check that the JMSTiesPIpeController configuration points to the correct location for the ActiveMQ server.The configuration file is located at JMSTiesPipeController/classes/conf/caties.properties
- Make sure that there are no errors in the log files found in JMSTiesPipeController.logs.