jms队列在apache camel rdsl

时间:2017-04-27 12:22:57

标签: apache-camel jms

package com.att.ajsc.deviceeventrouter;

import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.springframework.stereotype.Component;

@Component("messageProcessor")
public class MessageProcessor implements Processor {
    public void process(Exchange exchange) throws Exception {
        System.out.println("-----"+exchange.getIn().getBody());
        exchange.getOut().setBody(exchange.getIn().getBody());
    }

}


        import javax.jms.ConnectionFactory;

        import org.apache.activemq.ActiveMQConnectionFactory;
        import org.apache.camel.CamelContext;
        import org.apache.camel.ProducerTemplate;
        import org.apache.camel.builder.RouteBuilder;
        import org.apache.camel.component.jms.JmsComponent;
        import org.apache.camel.impl.DefaultCamelContext;
        import org.apache.camel.util.jndi.JndiContext;

        /**
         * An example class for demonstrating some of the basics behind Camel. This
         * example sends some text messages on to a JMS Queue, consumes them and
         * persists them to disk
         */
        public final class CamelJmsToFileExample {

            private CamelJmsToFileExample() {        
            }

            public static void main(String args[]) throws Exception {
                /*JndiContext jndiContext = new JndiContext();
                jndiContext.bind("myBean", new MyBean());
                jndiContext.bind("mongoClient", new CommonDbConnection());*/
                CamelContext context = new DefaultCamelContext();
                ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
                context.addComponent("test-jms",  JmsComponent.jmsComponentAutoAcknowledge(connectionFactory));
                CustomMessage customMessage = new CustomMessage();
                customMessage.setId("123");
                context.addRoutes(new RouteBuilder() {
                    public void configure() {
                        System.out.println("Inside the configure");
                        from("test-jms:queue:test.queue").to("messageProcessor");
                    }
                });
                ProducerTemplate template = context.createProducerTemplate();
                context.start();
                template.sendBody("test-jms:queue:test.queue", customMessage);

            }
        }


    pom.xml

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>EmailService</groupId>
      <artifactId>com.emailService</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <name>emailService</name>
      <dependencies>
            <dependency>
                <groupId>org.apache.camel</groupId>
                <artifactId>camel-core</artifactId>
                <version>2.15.1</version>
            </dependency>
            <dependency>
                <groupId>org.apache.camel</groupId>
                <artifactId>camel-stream</artifactId>
                <version>2.15.1</version>
            </dependency>
            <dependency>
                <groupId>org.apache.camel</groupId>
                <artifactId>camel-jms</artifactId>
                <version>2.15.1</version>
            </dependency>
            <dependency>
                <groupId>org.apache.activemq</groupId>
                <artifactId>activemq-camel</artifactId>
                <version>5.6.0</version>
            </dependency>
            <dependency>
                <groupId>org.apache.activemq</groupId>
                <artifactId>activemq-pool</artifactId>
                <version>5.11.1</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.mongodb/mongo-java-driver -->
            <dependency>
                <groupId>org.mongodb</groupId>
                <artifactId>mongo-java-driver</artifactId>
                <version>3.4.2</version>
            </dependency>
            <dependency>
                <groupId>org.apache.camel</groupId>
                <artifactId>camel-mongodb</artifactId>
                <version>2.13.1</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.integration</groupId>
                <artifactId>spring-integration-mongodb</artifactId>
                <version>4.3.8.RELEASE</version>
            </dependency> 
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-autoconfigure</artifactId>
                <version>1.5.2.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.apache.camel</groupId>
                <artifactId>camel-spring-boot</artifactId>
                <version>2.15.1</version>
            </dependency> 
      </dependencies>
    </project>




exception am facing :




 SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
    SLF4J: Defaulting to no-operation (NOP) logger implementation
    SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
    Inside the configure
    Exception in thread "main" org.apache.camel.FailedToCreateRouteException: Failed to create route route1 at: >>> To[messageProcessor] <<< in route: Route(route1)[[From[test-jms:queue:test.queue]] -> [To[messa... because of No endpoint could be found for: messageProcessor, please check your classpath contains the needed Camel component jar.
        at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:1028)
        at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:185)
        at org.apache.camel.impl.DefaultCamelContext.startRoute(DefaultCamelContext.java:841)
        at org.apache.camel.impl.DefaultCamelContext.startRouteDefinitions(DefaultCamelContext.java:2895)
        at org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:2618)
        at org.apache.camel.impl.DefaultCamelContext.access$000(DefaultCamelContext.java:167)
        at org.apache.camel.impl.DefaultCamelContext$2.call(DefaultCamelContext.java:2467)
        at org.apache.camel.impl.DefaultCamelContext$2.call(DefaultCamelContext.java:2463)
        at org.apache.camel.impl.DefaultCamelContext.doWithDefinedClassLoader(DefaultCamelContext.java:2486)
        at org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:2463)
        at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
        at org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:2432)
        at CamelJmsToFileExample.main(CamelJmsToFileExample.java:37)
    Caused by: org.apache.camel.NoSuchEndpointException: No endpoint could be found for: messageProcessor, please check your classpath contains the needed Camel component jar.
        at org.apache.camel.util.CamelContextHelper.getMandatoryEndpoint(CamelContextHelper.java:81)
        at org.apache.camel.model.RouteDefinition.resolveEndpoint(RouteDefinition.java:200)
        at org.apache.camel.impl.DefaultRouteContext.resolveEndpoint(DefaultRouteContext.java:107)
        at org.apache.camel.impl.DefaultRouteContext.resolveEndpoint(DefaultRouteContext.java:113)
        at org.apache.camel.model.SendDefinition.resolveEndpoint(SendDefinition.java:62)
        at org.apache.camel.model.SendDefinition.createProcessor(SendDefinition.java:56)
        at org.apache.camel.model.ProcessorDefinition.makeProcessor(ProcessorDefinition.java:505)
        at org.apache.camel.model.ProcessorDefinition.addRoutes(ProcessorDefinition.java:217)
        at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:1025)
        ... 12 more

当从jms队列向处理器发送数据时,我正面临上述异常,任何人都可以帮助解决此问题。 任何人都可以建议如何在apache camel java RDSL中实现jms Queue。 任何指针都对我有用..

谢谢..

1 个答案:

答案 0 :(得分:0)

消息处理器是一个字符串,例如

 from("test-jms:queue:test.queue").to("messageProcessor");

这使得Camel假定它是一个具有该名称的组件而不是它,因此将其更改为

from("test-jms:queue:test.queue").process(new Processor() ... );

并内联一个处理器,您可以在其中对消息执行某些操作,或者如果您只是想进行快速测试,则使用日志端点

 from("test-jms:queue:test.queue").to("log:hello");

还要注意start上的CamelContext方法没有阻止。请参阅此常见问题解答:http://camel.apache.org/running-camel-standalone-and-have-it-keep-running.html