Search code examples
spring-bootapache-camelamqp

using embedded amqp swith spring boot and camel


I want to integration test a custom camel component and therefor need an embedded/in memory messanging I can easily use to test from/to endpoints.

I am hoping that I can achieve this via spring-boot-amqp-starter. I used this example for a start, which has the dependencies:

 <dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
<dependency>
  <groupId>org.apache.activemq</groupId>
  <artifactId>activemq-broker</artifactId>
</dependency>
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-spring-boot-starter</artifactId>
</dependency>

and the config:

spring:
  activemq:
    broker-url: vm://embedded?broker.persistent=false,useShutdownHook=false
   // ...

This is working, when I use regular Listener annotations in spring, I have a sender using the template and a consumer logging the messages.

Now I go one step further and use camel, but it does not recognize the vm:embedded broker but tries to connect to tcp://localhost, which is not running.

return new RouteBuilder() {
        @Override
        public void configure() throws Exception {
            from("activemq:foo").to("log:sample");

            from("timer:bar").setBody(constant("Hello from Camel")).to("activemq:foo");
        }
    };

How can I configure activemq-camel to use the embedded broker?

Update:

I use dependency management imports for spring-boot-dependencies (1.5.9) and camel-spring-boot-dependencies (2.20.1).


Solution

  • This has been fixed in newer versions of activemq-camel when you use that with Spring Boot. Now the activemq-camel component will honor the spring boot configuration of the spring.activemq.* settings.