2017-04-27 156 views
0
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隊列。 任何指針將是非常有幫助的我..apache駱駝jms隊列rdsl

謝謝..

回答

0

消息處理器是一個字符串,如

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

這使得駱駝承擔起這個名字和它不是一個組成部分,所以將其更改爲

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

和內嵌的處理器,你可以做一些事情的消息,或者如果你只是想快速測試,然後使用日誌Ë ndpoint

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

另外注意,關於CamelContextstart方法沒有阻塞。看到這個FAQ:http://camel.apache.org/running-camel-standalone-and-have-it-keep-running.html