title: Configure External Broker(RabbitMQ) In Spring4+STOMP+SockJS Application
body: <p>I am working on a chat application developed using Spring4 Messaging and STOMP implemented with SockJS. The application works fine when I use the <strong>Simple Message Broker</strong> :</p>
  
  <pre><code>config.enableSimpleBroker("/queue/", "/topic/");
  </code></pre>
  
  <p>But, now we have a requirement to use an external broker(RabbitMQ) with the same application. For that, I changed the above code with the following:</p>
  
  <pre><code>// config.enableSimpleBroker("/queue/", "/topic/");
  config.enableStompBrokerRelay("/queue", "/topic");
  </code></pre>
  
  <p>My client side is connecting using STOMP client as below:</p>
  
  <pre><code>stompClient.connect({},  function(frame) {
      // subscribe to topics or queues and other stuff
  });
  </code></pre>
  
  <p>But, I got the following exception:</p>
  
  <pre><code>2014-05-09 11:13:13,567 ERROR        o.s.s.support.TaskUtils$LoggingErrorHandler - Unexpected error occurred in scheduled task.
  org.springframework.messaging.MessageDeliveryException: Message broker is not active.
  at org.springframework.messaging.simp.stomp.StompBrokerRelayMessageHandler.handleMessageInternal(StompBrokerRelayMessageHandler.java:378) ~[spring-messaging-4.0.3.RELEASE.jar:4.0.3.RELEASE]
  at org.springframework.messaging.simp.broker.AbstractBrokerMessageHandler.handleMessage(AbstractBrokerMessageHandler.java:171) ~[spring-messaging-4.0.3.RELEASE.jar:4.0.3.RELEASE]
  at org.springframework.messaging.support.ExecutorSubscribableChannel.sendInternal(ExecutorSubscribableChannel.java:64) ~[spring-messaging-4.0.3.RELEASE.jar:4.0.3.RELEASE]
  at org.springframework.messaging.support.AbstractMessageChannel.send(AbstractMessageChannel.java:116) ~[spring-messaging-4.0.3.RELEASE.jar:4.0.3.RELEASE]
  at org.springframework.messaging.support.AbstractMessageChannel.send(AbstractMessageChannel.java:98) ~[spring-messaging-4.0.3.RELEASE.jar:4.0.3.RELEASE]
  at org.springframework.messaging.simp.SimpMessagingTemplate.doSend(SimpMessagingTemplate.java:129) ~[spring-messaging-4.0.3.RELEASE.jar:4.0.3.RELEASE]
  at org.springframework.messaging.simp.SimpMessagingTemplate.doSend(SimpMessagingTemplate.java:48) ~[spring-messaging-4.0.3.RELEASE.jar:4.0.3.RELEASE]
  at org.springframework.messaging.core.AbstractMessageSendingTemplate.send(AbstractMessageSendingTemplate.java:93) ~[spring-messaging-4.0.3.RELEASE.jar:4.0.3.RELEASE]
  at org.springframework.messaging.core.AbstractMessageSendingTemplate.convertAndSend(AbstractMessageSendingTemplate.java:146) ~[spring-messaging-4.0.3.RELEASE.jar:4.0.3.RELEASE]
  at org.springframework.messaging.core.AbstractMessageSendingTemplate.convertAndSend(AbstractMessageSendingTemplate.java:112) ~[spring-messaging-4.0.3.RELEASE.jar:4.0.3.RELEASE]
  at org.springframework.messaging.core.AbstractMessageSendingTemplate.convertAndSend(AbstractMessageSendingTemplate.java:106) ~[spring-messaging-4.0.3.RELEASE.jar:4.0.3.RELEASE]
  at com.attomic.chat.service.ActiveUserPinger.pingUsers(ActiveUserPinger.java:24) ~[ActiveUserPinger.class:na]
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_05]
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.7.0_05]
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_05]
  at java.lang.reflect.Method.invoke(Method.java:601) ~[na:1.7.0_05]
  at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:65) ~[spring-context-4.0.3.RELEASE.jar:4.0.3.RELEASE]
  at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) ~[spring-context-4.0.3.RELEASE.jar:4.0.3.RELEASE]
  at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) [na:1.7.0_05]
  at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:351) [na:1.7.0_05]
  at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:178) [na:1.7.0_05]
  at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:178) [na:1.7.0_05]
  at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [na:1.7.0_05]
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [na:1.7.0_05]
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [na:1.7.0_05]
  at java.lang.Thread.run(Thread.java:722) [na:1.7.0_05]
  </code></pre>
  
  <p>I checked RabbitMQ and it is up and running. The <strong>STOMP plugin</strong> is also installed and working fine in RabbitMQ.I also tried the following:</p>
  
  <pre><code>1. config.enableStompBrokerRelay("/queue", "/topic").setSystemLogin("guest").setSystemPasscode("guest");
  2. config.enableStompBrokerRelay("/queue", "/topic").setClientLogin("guest").setClientPasscode("guest");
  3. config.enableStompBrokerRelay("/queue", "/topic").setRelayHost("localhost").setRelayPort("15672");
  </code></pre>
  
  <p>I have done quite a bit of search but still unable to resolve this. Can somebody throw some light on this?</p>