DataSet Component

Testing of distributed and asynchronous processing is notoriously difficult. The Mock, Test and DataSet endpoints work great with the Spring Testing framework to simplify your unit and integration testing using Enterprise Integration Patterns and Camel's large range of Components together with the powerful Mock and Test testing endpoints.

The DataSet component (available since 1.3.0) provides a mechanism to easily perform load & soak testing of your system. It works by allowing you to create DataSet instances both as a source of messages and as a way to assert that the data set is received.

URI format

dataset:name

Where name is used to find the DataSet instance in the Registry

Example

For example to test that a set of messages are sent to a queue then consumed from a queue without loosing any messages.

// send the dataset to a queue
from("dataset:foo").to("activemq:SomeQueue");

// now lets test that the messages are consumed correctly
from("activemq:SomeQueue").to("dataset:foo");

The above would look in the Registry to find the foo DataSet instance which is used to create the messages.

Then you create a DataSet implementation, such as using the SimpleDataSet as described below, configuring things like how big the data set is and what the messages look like etc.

Properties on SimpleDataSet

Property Description
defaultBody Specifies the default message body. For SimpleDataSet it is a constant payload; though if you want to create custom payloads per message create your own derivation of DataSetSupport
reportGroup Specifies the number of messages to be received before reporting progress. Useful for showing progress of a large load test
size Specifies how many messages to send/consume

Load testing ActiveMQ with Camel

There is an example of load testing an ActiveMQ queue using Camel in the ActiveMQ source code repository. The code lives at this location

You can grab the code

svn co https://svn.apache.org/repos/asf/activemq/trunk/activemq-camel-loadtest/

Then try running the test case

cd activemq-camel-loadtest
mvn clean install

To see how the test is defined see the Spring XML file

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
       http://activemq.apache.org/camel/schema/spring http://activemq.apache.org/camel/schema/spring/camel-spring.xsd
       http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd
    ">

  <camelContext xmlns="http://activemq.apache.org/camel/schema/spring">

    <route>
      <from uri="dataset:myDataSet"/>
      <to uri="activemq:test.queue"/>
    </route>

    <route>
      <from uri="activemq:test.queue"/>
      <to uri="dataset:myDataSet"/>
    </route>

  </camelContext>

  <bean id="myDataSet" class="org.apache.camel.component.dataset.SimpleDataSet">
    <property name="size" value="10000"/>
    <property name="reportCount" value="100"/>
  </bean>

  <!-- lets create an embedded broker for this test -->
  <broker xmlns="http://activemq.apache.org/schema/core" dataDirectory="target/activemq">

    <transportConnectors>
       <transportConnector uri="tcp://localhost:61616"/>
    </transportConnectors>

  </broker>
</beans>

See Also

Graphic Design By Hiram