首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ProducerTemplate和Direct:从camel开始

ProducerTemplate和Direct:从camel开始
EN

Stack Overflow用户
提问于 2013-04-09 10:38:08
回答 3查看 7.1K关注 0票数 2

我的驼队路线是:

代码语言:javascript
运行
复制
from("direct:start")
.to("http://myhost/mypath");

我使用:

代码语言:javascript
运行
复制
ProducerTemplate template; 
template.sendBody("direct:start", "This is a test message"); 

来发送交易。我得到了以下异常:

代码语言:javascript
运行
复制
No consumers available on endpoint: Endpoint[direct://start].

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

EN

回答 3

Stack Overflow用户

发布于 2016-02-09 02:04:03

出现此错误的原因是您尚未配置从direct:start开始的Route

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

代码语言:javascript
运行
复制
camelContext.start();
template.sendBody("direct:start", "This is a test message"); 

希望这能解决你的问题。

票数 1
EN

Stack Overflow用户

发布于 2021-02-23 10:15:19

我知道这是一个非常古老的问题。但是写这篇文章是为了那些仍然有这种问题的人。

场景:在http GET方法调用的过程中,我在过程中间从DB获取一些数据,并将数据作为消息放到artemis生成器上。

首先,如果你正在使用camel和spring --你根本不需要创建任何camel上下文。因为spring足够智能,可以为您创建具有以下依赖项的camel上下文。

几个必要的依赖项:

代码语言:javascript
运行
复制
<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>

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

代码语言:javascript
运行
复制
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.");
    }

}

下面的代码片段位于任何携带消息体的实现类中。此方法接受消息数据,并将其发送给我们在MyRouteBuilder类中创建的虚构/虚拟消费者。路由器类被调用并将消息发送到目的地(这里是生产者)。它也可以发送到http端点。

代码语言:javascript
运行
复制
@Autowired
private ProducerTemplate producerTemplate;

public void sendMessage(Map<String, MyClass> messageBody) {
   producerTemplate.sendBody("direct:imaginary-consumer", messageBody);
}
票数 0
EN

Stack Overflow用户

发布于 2013-04-09 13:56:32

这也被张贴在Apache Camel邮件列表上,在那里它的活跃正在被讨论。http://camel.465427.n5.nabble.com/ProducerTemplate-and-direct-start-in-camel-tp5730558.html

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15892366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档