| == Camel JMX Management |
| |
| === Introduction |
| |
| 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. |
| |
| === Build |
| |
| You will need to compile this example first: |
| |
| .... |
| mvn compile |
| .... |
| |
| === Run |
| |
| 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 |
| |
| === Help and contributions |
| |
| If you hit any problem using Camel or have some feedback, then please |
| https://camel.apache.org/support.html[let us know]. |
| |
| We also love contributors, so |
| https://camel.apache.org/contributing.html[get involved] :-) |
| |
| The Camel riders! |