| Camel JMX Management |
| ==================== |
| |
| This example shows how to manage Camel using JMX (with jconsole) |
| |
| The example uses a timer to every 5th second to generate a file with 100 stock quotes. |
| |
| Another route uses a file consumer to read the files and split the file and send every single |
| stock quote to a JMS queue. |
| |
| Then a third route consumes from this JMS queue and simulate a little CPU heavy work (by delaying) |
| before the data is transformed and logged. The logger will log the progress by logging how |
| long time it takes to process 100 messages. |
| |
| Now the idea is to use the Camel JMX management to be able to adjust this during runtime. |
| What it allows you to do is to improve the performance of this example. |
| |
| At first there is a throttler that will throttle how fast Camel sends message to the JMS queue. |
| For starters you can change this at runtime from the default 10 msg/sec to 500 msg/sec etc. |
| This is done by changing the JMX attribute maximumRequestsPerPeriod on the throttler in the /producer group. |
| |
| The next issue is that the JMS consumer now cannot catch up and you should see that the number of messages |
| on the JMS queue grows a little by little. You can find the queue from the ActiveMQ mbean and drill down under /queues. |
| |
| If this goes a bit to slow you can increase the first route in Camel to produce files faster. This is done by |
| changing the period in the timer endpoint from 5000 to let say 2000. Before this takes effect you have to |
| restart the timer consumer. So find the timer consumer and invoke the stop and start JMX operation. |
| |
| Now you should see the messages start to pile up in the JMS queue. |
| What we do next is to increase the number of concurrent consumers. To do that you have to set this on the JMS |
| endpoint. Set the concurrentConsumers from 1 to 20. And just as the timer consumer this only takes effect when |
| the JMS consumer is restarted. So do a stop and start operation. |
| |
| What you should see is that Camel should be able to process the files much faster now and the logger should |
| output a higher throughput. |
| |
| You will need to compile this example first: |
| mvn compile |
| |
| To run the example type |
| mvn camel:run |
| |
| To use jconsole type |
| jconsole |
| |
| And you should be able to see a process id in the connect to agent tab. |
| If its there then click in and you should be connected to the Camel application. |
| If its missing you can click on the advanced tab and type in JMX URL: |
| service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi/camel |
| (some older versions of Java does not list the local processes) |
| |
| You can see the routing rules by looking at the java code in the |
| src/main/java directory and the Spring XML configuration lives in |
| src/main/resources/META-INF/spring |
| |
| To stop the example hit ctrl + c |
| |
| |
| This example is documented at |
| http://camel.apache.org/management-example.html |
| |
| If you hit any problems please talk to us on the Camel Forums |
| http://camel.apache.org/discussion-forums.html |
| |
| Please help us make Apache Camel better - we appreciate any feedback you |
| may have. Enjoy! |
| |
| ------------------------ |
| The Camel riders! |