Apache Camel и Stomp

Я разрабатываю решение, архитектура которого:

  PHP -> JMS -> Camel -> several web services and endpoints.

Согласно: http://activemq.apache.org/php.html

... Я должен использовать клиент PHP STOMP для использования JMS. Это прекрасно работает.

Я также использовал Java-клиент ActiveMQ STOMP для получения данных от JMS.

Но я хочу использовать Camel для маршрутизации сообщений JMS. Кажется, я не могу заставить Camel работать с JMS/Stomp.

Я просмотрел https://github.com/fusesource/stompjms.

... но я не уверен, как заставить это работать с Camel.

Я также попробовал Spring camel-context.xml с BrokerURL, указывающим STOMP:

  <bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent">
      <property name="connectionFactory">
          <bean class="org.apache.activemq.ActiveMQConnectionFactory">
              <property name="brokerURL" value="stomp://localhost:61613" />
              <property name="userName" value="admin" />
              <property name="password" value="AmChamDev" />
          </bean>
      </property>
  </bean>

... но это приводит к:

  [ #0 - JmsConsumer[/queue/test]] ultJmsMessageListenerContainer WARN  Could not 
  refresh JMS Connection for destination '/queue/test' - retrying in 5000 ms. 
  Cause: Could not create Transport. 
  Reason: java.io.IOException: Transport scheme NOT recognized: [stomp]

Есть идеи, как заставить Camel работать с JMS/Stomp?


person John Jesus    schedule 23.02.2013    source источник


Ответы (2)


Вы должны использовать открытый проводной транспорт при использовании компонента JMS/ActiveMQ.

tcp://localhost:61616 или что там у тебя.

Но не волнуйтесь. Даже если вы отправляете сообщения в ActiveMQ, используя STOP (или любой другой доступный транспорт), вы можете получить то же самое сообщение, используя API JMS (и, следовательно, компонент ActiveMQ в Camel), используя транспорт по умолчанию (открытый провод).

person Petter Nordlander    schedule 23.02.2013
comment
Петтер, ты прав. У меня было неправильное понимание того, как работают конечные точки. Я попробовал это на стороне Java/получателя, используя конечную точку tcp://localhost:61616, и на стороне PHP/отправителя, используя конечную точку stomp://localhost:61613, и сообщения прошли. - person John Jesus; 24.02.2013
comment
большое спасибо. Кстати, я n00b из stackoverflow, можете ли вы проголосовать за мой вопрос, чтобы я мог проголосовать за ваш ответ? - person John Jesus; 24.02.2013

Согласно документам Camel http://camel.apache.org/stomp.html вам необходимо включить дополнительная зависимость:

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-stomp</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>
person Serġan    schedule 20.05.2015