Apache camel 未执行的路由:camel/fuse/activemq

Apache camel 未执行的路由:camel/fuse/activemq,apache-camel,jbossfuse,Apache Camel,Jbossfuse,为了理解如何在已部署的Jboss EAP 6.4服务器上使用驼峰路由,我正在学习一些教程。我当前应用程序的目标相当简单,因为我想从ActiveMQ主题中读取内容,然后将其注销。下面的代码总结了我的操作: package com.mycompany; import javax.ejb.Startup; import javax.enterprise.context.ApplicationScoped; import javax.jms.ConnectionFactory; import org

为了理解如何在已部署的Jboss EAP 6.4服务器上使用驼峰路由,我正在学习一些教程。我当前应用程序的目标相当简单,因为我想从ActiveMQ主题中读取内容,然后将其注销。下面的代码总结了我的操作:

package com.mycompany;

import javax.ejb.Startup;
import javax.enterprise.context.ApplicationScoped;
import javax.jms.ConnectionFactory;

import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.cdi.ContextName;
import org.apache.camel.component.jms.JmsComponent;

@ApplicationScoped
@Startup
@ContextName("com.mycompany")
public class CamelRoute extends RouteBuilder {

    @Override
    public void configure() throws Exception {
        System.out.println("### we are in the main");

        final ConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");
        getContext().addComponent("jms", JmsComponent.jmsComponentAutoAcknowledge(factory));

        System.out.println("#### route being called");
        from("jms:topic:activemq/topic/myTopic").log("###### we are in here with this message ${body}");

    }
}
我还有一个Launcher类来测试我的路线:

package com.mycompany;

import org.apache.camel.main.Main;

public class Launcher {

    public static void main(final String... args) throws Exception {
        final Main main = new Main();
        main.addRouteBuilder(new CamelRoute());
        main.run(args);
    }
}
如果我通过下面的maven命令启动路由,我就可以接收到activemq主题的所有消息。所以我知道,如果我手动启动路由,我至少可以检索数据

mvn clean install exec:java -Dexec.mainClass=com.mycompany.Launcher
然而,一旦我将我的应用程序作为一个jar部署到服务器上,启用了,就不能这么说了。我的system.out语句在日志中都不明显。我几乎感觉自己缺少了启动应用程序的额外配置

注意:我在CamelRoute类中添加了用于启动的EJB注释,但这并没有解决问题。我是不是漏掉了什么明显的东西

部署jar后jboss eap 6.4日志的输出:

04:18:21,390 INFO  [org.jboss.as.repository] (HttpManagementService-threads - 49) JBAS014900: Content added at location C:\bin\jboss-fuse\jboss-eap-6.4\standalone\data\content\99\f271f8372007ee6a2bce37668656acb80ef160\content
04:18:21,427 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-4) JBAS015876: Starting deployment of "camel-java-1.0.0-SNAPSHOT.jar" (runtime-name: "camel-java-1.0.0-SNAPSHOT.jar")
04:18:21,431 INFO  [org.wildfly.extension.camel] (MSC service thread 1-4) @ContextName annotation found
04:18:21,442 WARN  [org.jboss.weld.deployer] (MSC service thread 1-6) JBAS016012: Deployment deployment "camel-java-1.0.0-SNAPSHOT.jar" contains CDI annotations but beans.xml was not found.
04:18:21,464 INFO  [org.jboss.as.server] (HttpManagementService-threads - 49) JBAS015859: Deployed "camel-java-1.0.0-SNAPSHOT.jar" (runtime-name : "camel-java-1.0.0-SNAPSHOT.jar")

日志输出中有一个指针,指示此问题的可能原因:

JBAS016012: Deployment deployment "camel-java-1.0.0-SNAPSHOT.jar" contains CDI annotations but beans.xml was not found.

您需要确保将META-INF/beans.xml添加到JAR中。直到CDI1.1才添加隐式bean归档。EAP6.x/JavaEE6使用CDI1.0。如果部署中不存在beans.xml,您的Camel CDI应用程序将永远不会启动。

您是否已在服务器上运行了它?我怀疑你的应用程序一启动就死掉了。您需要确保它永远运行。请检查文档以了解这一点。@SoucianceEqdamRashti对,我上面提到的maven命令在没有服务器的情况下运行。它永无止境当部署到eap服务器时,我看到部署了.jar文件,但没有执行system.out语句。最好与fuse团队一起检查。这是一个商业应用程序。EAP不会有驼峰组件-您必须安装保险丝。如果您使用的是Wildfly,那么它将是Wildfly Camel子系统。一旦这些位到位,应用程序服务器将启用骆驼。@RickJWagner rick,据我所知,eap 6.4带有fuse?在我当地的环境中,我可以看到fusepatch和fuse-6.3jar。你指的是我可能遗漏的其他东西吗?有没有办法证明我有我需要的一切?