如何在camel路由中读取activemq的消息

时间:2017-06-05 09:16:50

标签: apache-camel jms activemq

我试图使用camel路由从队列中读取消息并将其发送到消息监听器的bean,但它以异常结束。难道我做错了什么。 我在activemq中序列化了对象

 <bean class="com.herman.cxf.incident.ReportIncidentRequestConsumer"
            id="requestConsumer" />
        <camelContext id="camelContext-32616f27-d786-4ed8-9f75-2d208cd14b40"
            trace="false" xmlns="http://camel.apache.org/schema/blueprint">
            <route id="report_amq">
                <from uri="activemq:queue:INCIDENT_REQUEST" />
                <to uri="bean:requestConsumer" />
            </route>
        </camelContext>

消息列表器类:

public class ReportIncidentRequestConsumer implements MessageListener {

        Logger _log = Logger.getLogger(ReportIncidentRequestConsumer.class);

        @Override
        public void onMessage(Message arg0) {
            _log.info("================== IM HERE IN REQUEST CONSUMER ===============");
        }

    }

错误时抛出: 引起:javax.jms.JMSException:无法从内容构建正文。可序列化的类不可用于代理。原因:java.lang.ClassNotFoundException:Forbidden class org.apache.cxf.message.MessageContentsList!不信任此类被序列化为ObjectMessage有效负载。

2 个答案:

答案 0 :(得分:1)

使用camel时,您不需要MessageListener来处理消息。

您可以使用Processor对邮件执行某些操作。

首先编写一个实现这样处理器的类......

public class MyProcessor implements Processor {
  public void process(Exchange exchange) throws Exception {
    // do something...
  }
}

然后,您可以通过在Spring中声明bean来轻松地在路径中使用它,例如通过XML(或者在JNDI中注册它,如果这是您的注册表)

<bean id="myProcessor" class="com.acme.MyProcessor"/>

然后在Camel中你可以做到

from("activemq:myQueue").to("myProcessor");

答案 1 :(得分:1)

跳过在camel中处理ActiveMQ的不同方法,由于“不受信任的包”而引发了异常。 ActiveMQ使用可信包的列表,它可以序列化/反序列化对象(更多细节:http://activemq.apache.org/objectmessage.html)。 为了能够发送/接收您需要的对象,您需要作为ActiveMq客户端告诉您信任它们。以下是一些示例:https://github.com/apache/activemq/blob/master/activemq-camel/src/test/resources/org/apache/activemq/camel/jms-object-message.xml

相关问题