Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Embedded AMQP Java Broker

Tags:

I am trying to create integration test for a Scala / Java application that connects to a RabbitMQ broker. To achieve this I would like an embedded broker that speaks AMQP that I start and stop before each test. Originally I tried to introduce ActiveMQ as an embedded broker with AMQP however the application uses RabbitMQ so only speaks AMQP version 0.9.3 whereas ActiveMQ requires AMQP version 1.0.

Is there another embedded broker I can use in place of ActiveMQ?

like image 684
ahjmorton Avatar asked Jun 18 '15 14:06

ahjmorton


1 Answers

A completely in-memory solution. Replace the spring.* properties as required.

<dependency>   <groupId>org.apache.qpid</groupId>   <artifactId>qpid-broker</artifactId>   <version>6.1.1</version>   <scope>test</scope> </dependency> 
public class EmbeddedBroker {   public void start() {     Broker broker = new Broker();     BrokerOptions brokerOptions = new BrokerOptions();     brokerOptions.setConfigProperty("qpid.amqp_port", environment.getProperty("spring.rabbitmq.port"));     brokerOptions.setConfigProperty("qpid.broker.defaultPreferenceStoreAttributes", "{\"type\": \"Noop\"}");     brokerOptions.setConfigProperty("qpid.vhost", environment.getProperty("spring.rabbitmq.virtual-host"));     brokerOptions.setConfigurationStoreType("Memory");     brokerOptions.setStartupLoggedToSystemOut(false);     broker.startup(brokerOptions);   } } 

Add initial-config.json as a resource:

{   "name": "Embedded Test Broker",   "modelVersion": "6.1",   "authenticationproviders" : [{     "name": "password",     "type": "Plain",     "secureOnlyMechanisms": [],     "users": [{"name": "guest", "password": "guest", "type": "managed"}]   }],   "ports": [{     "name": "AMQP",     "port": "${qpid.amqp_port}",     "authenticationProvider": "password",     "protocols": [ "AMQP_0_9_1" ],     "transports": [ "TCP" ],     "virtualhostaliases": [{       "name": "${qpid.vhost}",       "type": "nameAlias"     }]   }],   "virtualhostnodes" : [{     "name": "${qpid.vhost}",     "type": "Memory",     "virtualHostInitialConfiguration": "{ \"type\": \"Memory\" }"   }] } 
like image 126
OrangeDog Avatar answered Nov 19 '22 17:11

OrangeDog