我遇到一个简单的驼峰路线有些麻烦,应该从我拥有的ActiveMQ主题中获取一条消息,然后通过使用日志将消息内容打印到控制台。
现在,所有它都是camel-context.xml,以及在ActiveMQ中生成主题并向队列添加简单字符串消息的java类。我正在使用ActiveMQ接口检查主题是否正在创建,它是,但我的消息没有被添加到主题,也没有通过驼峰路由路由。运行main我可以将我的sys的输出输出到控制台,我看到1个消息“排队”并且1个消息在activemq界面中“出列”。我只是没有从我的路线中的“日志消息”获得任何输出到控制台。
任何帮助或提示都会非常受欢迎,因为我是所有这三种技术的新手,我只想让这个简单的“Hello World”工作。
谢谢!这两个文件位于以下位置:
经过进一步测试后,我认为这与我尝试记录消息内容的方式有关,因为我知道它正在拾取我的骆驼路线,因为我添加了第二个主题并告诉了用于将消息路由到它的camel路由,如下所示:
to uri =“activemq:topic:My.SecondTestTopic”
我能够看到是否被重定向到activeMQ界面中的那个队列。
package com.backend;
import javax.jms.*;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
public class TestMessageProducer {
private static String url = ActiveMQConnection.DEFAULT_BROKER_URL;
public static void main(String[] args) throws JMSException {
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);
Connection connection = connectionFactory.createConnection();
connection.start();
Session session = connection.createSession(false,
Session.AUTO_ACKNOWLEDGE);
Topic topic = session.createTopic("My.TestTopic");
MessageProducer producer = session.createProducer(topic);
TextMessage message = session.createTextMessage();
message.setText("THIS IS A TEST TEXT MESSAGE BEING SENT TO THE TOPIC AND HOPEFULLY BEING PICKED UP BY THE" +
"CAMEL ROUTE");
producer.send(message);
System.out.println("Sent message '" + message.getText() + "'");
connection.close();
}
}
<?xml version="1.0" encoding="UTF-8"?>
<spring:beans xmlns:spring="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://camel.apache.org/schema/spring"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:alch="http://service.alchemy.kobie.com/"
xsi:schemaLocation="http://www.springframework.org/schema/beans classpath:META-INF/spring/spring-beans.xsd
http://camel.apache.org/schema/spring classpath:META-INF/spring/camel-spring.xsd">
<!-- load properties -->
<spring:bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<spring:property name="locations" value="file:backend.properties" />
</spring:bean>
<spring:bean id="properties"
class="org.apache.camel.component.properties.PropertiesComponent">
<spring:property name="location" value="file:backend.properties" />
</spring:bean>
<spring:bean id="jmsConnectionFactory"
class="org.apache.activemq.ActiveMQConnectionFactory">
<spring:property name="brokerURL" value="tcp://0.0.0.0:61616?useLocalHost=true" />
</spring:bean>
<spring:bean id="pooledConnectionFactory"
class="org.apache.activemq.pool.PooledConnectionFactory">
<spring:property name="maxConnections" value="8" />
<spring:property name="maximumActive" value="500" />
<spring:property name="connectionFactory" ref="jmsConnectionFactory" />
</spring:bean>
<spring:bean id="jmsConfig"
class="org.apache.camel.component.jms.JmsConfiguration">
<spring:property name="connectionFactory" ref="pooledConnectionFactory"/>
<spring:property name="transacted" value="false"/>
<spring:property name="concurrentConsumers" value="1"/>
</spring:bean>
<spring:bean id="activemq"
class="org.apache.activemq.camel.component.ActiveMQComponent">
<spring:property name="configuration" ref="jmsConfig"/>
</spring:bean>
<!-- camel configuration -->
<camelContext xmlns="http://camel.apache.org/schema/spring">
<route>
<from uri="activemq:topic:My.TestTopic"/>
<log message="Output of message from Queue: ${in.body}"/>
<to uri="activemq:topic:My.SecondTestTopic" />
</route>
答案 0 :(得分:1)
您已经首先启动了Camel应用程序。例如,当您向主题发送非持久性消息时。如果在发送时没有活动订阅者,则任何人都不会收到消息。您可能希望使用持久性持久主题。
答案 1 :(得分:0)
我怀疑您正在创建一个ActiveMQ代理的两个单独实例。您能否更新 TestMessageProducer 以使用URL tcp:// localhost:61616 ?此外,您是否可以使用jconsole检查两个VM上的activemq实例中的主题活动?
===更新===
我错过了关于你验证第二个主题确实收到了消息的一点,所以你的路线正在工作......必须是记录器。如果您的IDE中有camel源代码,则可以打开调试器并在
上放置一个断点org.apache.camel.component.log.LogProducer
.process(Exchange exchange, AsyncCallback callback)
看看会发生什么以及是否被调用。您配置了哪个日志包?