X-Git-Url: https://review.fuel-infra.org/gitweb?a=blobdiff_plain;f=website%2Freference%2Fplugins%2Fconnector_activemq.md;fp=website%2Freference%2Fplugins%2Fconnector_activemq.md;h=f38bade522e33ccb1561f455d44465ffd7817673;hb=b87d2f4e68281062df1913440ca5753ae63314a9;hp=0000000000000000000000000000000000000000;hpb=ab0ea530b8ac956091f17b104ab2311336cfc250;p=packages%2Fprecise%2Fmcollective.git diff --git a/website/reference/plugins/connector_activemq.md b/website/reference/plugins/connector_activemq.md new file mode 100644 index 0000000..f38bade --- /dev/null +++ b/website/reference/plugins/connector_activemq.md @@ -0,0 +1,135 @@ +--- +layout: default +title: ActiveMQ Connector +toc: false +--- +[STOMP]: http://stomp.codehaus.org/ + +The ActiveMQ connector uses the [STOMP] rubygem to connect to ActiveMQ servers. It is specifically optimiszed for ActiveMQ +and uses features in ActiveMQ 5.5.0 and later. + +This code will only work with version _1.1.8_ or newer of the Stomp gem. + +## Differences between ActiveMQ connector and Stomp Connector + +The ActiveMQ connector requires MCollective 2.0.0 or newer and introduce a new structure to the middleware messsages. + + * Replies goes direct to clients using short lived queues + * Agent topics are called */topic/<collective>.<agent_name>.agent* + * Support for point to point messages are added by using _/queue/<collective>.nodes_ and using JMS selectors. + +The use of short lived queues mean that replies are now going to go back only to the person who sent the request. +This has big impact on overall CPU usage by clients on busy networks but also optimize the traffic flow on +networks with many brokers. + +Point to Point messages means each node has a unique subscription, the approach using JMS Selectors means +internally to ActiveMQ only a single thread will be dedicated to this rather than 1 per connected node. + +Before using this plugin you will need to make appropriate adjustments to your ActiveMQ Access Control Lists. + +## Configuring ActiveMQ +For best behavior there are a few settings you need in your _activemq.xml_ + +### Remove unused queues +We use uniquely named queues for replies. As queues will live forever we need to get ActiveMQ to remove +queues we are done with else they will just add up and grow forever. + +{% highlight xml %} + + + + + + + +{% endhighlight %} + +The above policy will instruct ActiveMQ to remove dead queues after 5 minutes. + +### Optimize network usage for direct requests in a network of brokers +If you are using a network of brokers you will need to make a big change to how that works. +At present we tend to have 1 bi-directional connection for everything, with direct requests +we dedicate a bi-directional connection for these queues leaving the other just for topics. + +{% highlight xml %} + + + + + + + + + + + + +{% endhighlight %} + +You will need to adjust the TTL for your network. Note the queue connection has a different +_conduitSubscriptions_ policy than the topic one, you have to create these different connections +and set this policy for everything to work correctly. + +## Configuring MCollective + +### Common Options +The most basic configuration method is supported in all versions of the gem: + +### Failover Pools +A sample configuration can be seen below. Note this plugin does not support the old style config of the Stomp connector. + +{% highlight ini %} +connector = activemq +plugin.activemq.pool.size = 2 +plugin.activemq.pool.1.host = stomp1 +plugin.activemq.pool.1.port = 6163 +plugin.activemq.pool.1.user = me +plugin.activemq.pool.1.password = secret + +plugin.activemq.pool.2.host = stomp2 +plugin.activemq.pool.2.port = 6163 +plugin.activemq.pool.2.user = me +plugin.activemq.pool.2.password = secret +{% endhighlight %} + +This gives it 2 servers to attempt to connect to, if the first one fails it will use the second. Usernames and passwords can be set +with the environment variables STOMP_USER, STOMP_PASSWORD. + +If you do not specify a port it will default to _61613_ + +You can also specify the following options for the Stomp gem, these are the defaults in the Stomp 1.1.6 gem: + +{% highlight ini %} +plugin.activemq.initial_reconnect_delay = 0.01 +plugin.activemq.max_reconnect_delay = 30.0 +plugin.activemq.use_exponential_back_off = true +plugin.activemq.back_off_multiplier = 2 +plugin.activemq.max_reconnect_attempts = 0 +plugin.activemq.randomize = false +plugin.activemq.timeout = -1 +{% endhighlight %} + +### Message Priority + +ActiveMQ messages support priorities, you can pass in the needed priority header by setting: + +{% highlight ini %} +plugin.activemq.priority = 4 +{% endhighlight %}