【问题标题】:ProducerTemplate and Direct:start in camelProducerTemplate 和 Direct:从骆驼开始
【发布时间】:2013-04-09 02:38:08
【问题描述】:

我的骆驼路线是:

from("direct:start")
.to("http://myhost/mypath");

我用过:

ProducerTemplate template; 
template.sendBody("direct:start", "This is a test message"); 

发送交换。我收到以下异常:

No consumers available on endpoint: Endpoint[direct://start].

如何在 direct:start 端点中接收相同的交换?

【问题讨论】:

    标签: apache apache-camel endpoint


    【解决方案1】:

    您收到此错误的原因是因为您没有配置从direct:start 开始的Route

    如果您已经配置了Route,但在您的原始查询中没有提及它,那么下一步要尝试的是首先启动 Camel 上下文,然后再调用 sendBody 方法。

    camelContext.start();
    template.sendBody("direct:start", "This is a test message"); 
    

    希望这能解决您的问题。

    【讨论】:

      【解决方案2】:

      我知道这是一个非常古老的问题。但是为仍然遇到此类问题的任何人写这篇文章。

      场景:在调用 http GET 方法的过程中,我在过程中间从 DB 获取一些数据,并将数据作为消息发送给 artemis 生产者。

      首先,如果您在 spring 中使用骆驼 - 您根本不需要创建任何骆驼上下文。因为 spring 足够聪明,可以通过以下依赖项为您创建骆驼上下文。

      一些必要的依赖:

      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-artemis</artifactId>
      </dependency>
      <dependency>
          <groupId>org.apache.camel</groupId>
          <artifactId>camel-spring-boot-starter</artifactId>
          <version>2.24.2</version>
      </dependency>
      <dependency>
          <groupId>org.apache.camel</groupId>
          <artifactId>camel-jaxb-starter</artifactId>
          <version>2.24.2</version>
      </dependency>
      <dependency>
          <groupId>org.apache.camel</groupId>
          <artifactId>camel-jms</artifactId>
          <version>2.24.2</version>
      </dependency>
      <dependency>
          <groupId>org.apache.camel</groupId>
          <artifactId>camel-jackson-starter</artifactId>
          <version>2.24.2</version>
      </dependency>
      <dependency>
          <groupId>org.apache.camel</groupId>
          <artifactId>camel-core</artifactId>
          <version>2.24.2</version>
      </dependency>
      <dependency>
          <groupId>org.apache.camel</groupId>
          <artifactId>camel-amqp</artifactId>
          <version>2.24.2</version>
      </dependency>
      

      为了解决这个问题,我创建了一个类,它从骆驼库中扩展了 RouteBuilder 类。在这个构建器中,我创建了一个虚拟消费者并使用它向实际生产者发送消息。我的目的地是 artemis 生产者端点。

      import com.fasterxml.jackson.databind.ObjectMapper;
      import com.fasterxml.jackson.databind.SerializationFeature;
      import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
      import org.apache.camel.LoggingLevel;
      import org.apache.camel.builder.RouteBuilder;
      import org.apache.camel.component.jackson.JacksonDataFormat;
      import org.apache.camel.spi.DataFormat;
      import org.springframework.stereotype.Component;
      
      @Component
      public class MyRouteBuilder extends RouteBuilder {
      
          private DataFormat marshalDataFormat;
      
          public MyRouteBuilder(ObjectMapper objectMapper) {
              objectMapper.registerModule(new JavaTimeModule());
              objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
              marshalDataFormat = new JacksonDataFormat(objectMapper, MyClass.class);
          }
      
          @Override
          public void configure() throws Exception {
              from("direct:imaginary-consumer")
                      .marshal(marshalDataFormat)
                      .log(LoggingLevel.INFO, "Message ready to send is ${body}")
                      .to("producer:message-data")
                      .log(LoggingLevel.INFO, "Message has been sent successfully to topic.");
          }
      
      }
      

      sn-p 下面是任何携带消息体的实现类。此方法获取消息数据并将其发送给我们在 MyRouteBuilder 类中创建的虚构/虚拟消费者。路由器类被调用并将消息发送到目的地(此处为生产者)。也可以是 http 端点。

      @Autowired
      private ProducerTemplate producerTemplate;
      
      public void sendMessage(Map<String, MyClass> messageBody) {
         producerTemplate.sendBody("direct:imaginary-consumer", messageBody);
      }
      

      【讨论】:

        【解决方案3】:

        这也发布在 Apache Camel 邮件列表中,正在讨论它的活动。 http://camel.465427.n5.nabble.com/ProducerTemplate-and-direct-start-in-camel-tp5730558.html

        【讨论】:

        • 我只在骆驼邮件列表上问过同样的问题。 PS:如果你出于同样的原因否决了我的问题,我觉得你不应该:)
        猜你喜欢
        • 2018-05-30
        • 2022-01-11
        • 2023-04-02
        • 1970-01-01
        • 2015-05-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多