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.
FUSE Mediation Router will use the throughput logger when sending dataset's.
dataset:name?options
Where name is used to find the DataSet instance in the Registry
FUSE Mediation Router ships with a support implementation of
org.apache.camel.component.dataset.DataSet
, the
org.apache.camel.component.dataset.DataSetSupport
class, that can be used
as a base for implementing your own DataSet. FUSE Mediation Router also ships with a default
implementation, the org.apache.camel.component.dataset.SimpleDataSet
that
can be used for testing.
Option | Default | Description |
---|---|---|
produceDelay | 3 | Allows a delay in ms. to be specified which causes producers to pause - to simulate slow producers. Will uses a minimum of 3 ms. delay unless you set this option to -1 to force no delay at all. |
consumeDelay | 0 | Allows a delay in ms. to be specified which causes consumers to pause - to simulate slow consumers |
preloadSize | 0 | Sets how many messages should be preloaded (sent) before the route completes its initialization |
FUSE Mediation Router will lookup in the Registry for a bean implementing the DataSet interface. So you can register your own DataSet as:
<bean id="myDataSet" class="com.mycompany.MyDataSet"> <property name="size" value="100"/> </bean>
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.
Property | Type | Description |
---|---|---|
defaultBody | Object | 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 | long | Specifies the number of messages to be received before reporting progress. Useful for showing progress of a large load test |
size | long | Specifies how many messages to send/consume |
There is an example of load testing an ActiveMQ queue using FUSE Mediation Router in the ActiveMQ source code repository. The code lives at this location
https://svn.apache.org/repos/asf/activemq/trunk/activemq-camel-loadtest/
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://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd "> <camelContext xmlns="http://camel.apache.org/schema/spring"> <route> <!-- sends messages every 10 milliseconds --> <from uri="dataset:myDataSet?produceDelay=10"/> <to uri="activemq:test.queue"/> </route> <route> <from uri="activemq:test.queue"/> <to uri="dataset:myDataSet?produceDelay=10"/> </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> <!-- Lets connect the Camel ActiveMQ component to the embedded broker. See http://activemq.apache.org/camel/activemq.html for more information. --> <bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent"> <property name="brokerURL" value="tcp://localhost:61616" /> </bean> </beans>
Spring Testing