JMS Event Service
Proof Of Concept
This is a functional proof of concept, please feel free to try it out and also post comments, suggestions, etc.
Information
The JMS event service is meant to be a replacement for the current Event Service which uses the database to send messages between nodes in the cluster. It allows for a standard message sending methodology and does not touch the database. Events are also transactional with JMS.
JMS Information
JMS Event Service
Goals
Standard message types (JMS Message)
Better cluster wide events with lower database load and more flexibility
More flexible message data (JMS supports all kinds of data being attached to messages)
Easy interception of events (via standard JMS listeners)
Easy handling of custom event queues
Encourage wider usage of events in Sakai
Allows JMS and event handling in Sakai
Lei (a student worker here at CARET) and I have created a general JMS service for Sakai and an implementation of the Sakai event tracking
service to go along with itOur current JMS implementation uses ActiveMQ and auto discovery to send messages to other Sakai servers running in the cluster
Uses some sakai.properties for config (but works with defaults)
Requires users to disable the legacy EventTrackingService
Also requires allowing the JMS api into shared (already there in trunk)
Benefits in a little more detail
Reduce the load that the legacy cluster event service puts on the DB
Able to use JMS messages
Easy to define standard listeners
Allows you to add a listener or listeners that can log to a db on a different machine or wherever else you want without impacting the production database instance
ability to set up your own message destinations
ability to send just about anything in your message (JMS allows full objects and all kinds of crazy stuff)
transactional message processing
ability to control where the messages go (local only, cluster, etc.)
Code https://source.sakaiproject.org/contrib/messageservice/trunk
JIRA SAK issue for tracking this: http://jira.sakaiproject.org/jira/browse/SAK-11021
Deploying and Running The JMS Event Service in sakai_2-5-x
Getting the source and building it
svn co https://source.sakaiproject.org/svn/sakai/branches/sakai_2-5-x cd sakai_2-5-x https://source.sakaiproject.org/contrib/messageservice/trunk messageservice mvn clean install sakai:deploy
Sakai Properties
Property | Default Value | Comments |
|---|---|---|
jms.useJMX | false | If you have tomcat configured to allow JMX access, I would recommend to enable this setting as it greatly helps during the development process |
jms.brokerURL | tcp://localhost:61616 | - |
jms.brokerDataPath | sakai-home location | This is either in "tomcat/sakai" or the location defined by JAVA_OPTS "-Dsakai.home=/path/to/sakai-home/" |
Troubleshooting
If tomcat doesn't start completely and the last message in catalina.out is the following:
WARN: brokerName not set (2007-12-11 20:22:26,149 main_org.apache.activemq.transport.discovery.multicast.MulticastDiscoveryAgent)... then, you probably have some port/transport security service in place such at iptables. The issue is that activeMQ uses UDP on port 6155 for its multicast discovery. This webpage has some information regarding this topic.
So in my case, I had to add the following line to my iptables
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp -s 192.168.1.0/24 --dport 6155 -j ACCEPT