Apache Camel超时同步路由

2024-01-04

我正在 trwing 使用 Apache Camel 构造一个带有超时的同步路由,但我在框架中找不到任何可以解析它的内容。 所以我决定建立一个为我制作的流程。

public class TimeOutProcessor implements Processor {

private String route;
private Integer timeout;

public TimeOutProcessor(String route, Integer timeout) {
    this.route = route;
    this.timeout = timeout;
}


@Override
public void process(Exchange exchange) throws Exception {
    ExecutorService executor = Executors.newSingleThreadExecutor();

    Future<Exchange> future = executor.submit(new Callable<Exchange>() {

        public Exchange call() {
            // Check for field rating

            ProducerTemplate producerTemplate = exchange.getFromEndpoint().getCamelContext().createProducerTemplate();
            return producerTemplate.send(route, exchange);
        }
    });
    try {
        exchange.getIn().setBody(future.get(
                timeout,
                TimeUnit.SECONDS));
    } catch (TimeoutException e) {
        throw new TimeoutException("a timeout problem occurred");
    }
    executor.shutdownNow();
}

我这样称呼这个过程:

.process(new TimeOutProcessor("direct:myRoute",
                Integer.valueOf(this.getContext().resolvePropertyPlaceholders("{{timeout}}")))

我想知道我的方法是否是推荐的方法,如果不是,构建超时同步路由的最佳方法是什么?


我要感谢那些回答我的人。

这是我的最终代码:

public class TimeOutProcessor implements Processor {

private String route;
private Integer timeout;

public TimeOutProcessor(String route, Integer timeout) {
    this.route = route;
    this.timeout = timeout;
}


@Override
public void process(Exchange exchange) throws Exception {
    Future<Exchange> future = null;
    ProducerTemplate producerTemplate = exchange.getFromEndpoint().getCamelContext().createProducerTemplate();
    try {

        future = producerTemplate.asyncSend(route, exchange);
        exchange.getIn().setBody(future.get(
                timeout,
                TimeUnit.SECONDS));
        producerTemplate.stop();
        future.cancel(true);
    } catch (TimeoutException e) {
        producerTemplate.stop();
        future.cancel(true);
        throw new TimeoutException("a timeout problem occurred");
    }

}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Apache Camel超时同步路由 的相关文章

  • 使用camel cxfrs和jaxrs服务器之间的区别

    xmlns cxfrs http camel apache org schema cxf xmlns jaxrs http cxf apache org jaxrs 我试图理解 Apache Camel 中的 cxfrs server 和
  • 允许Camel上下文永远运行

    我正在为 springCamelContext 使用camel spring jar 当我启动camel context时 它运行5分钟 默认时间 我可以让我的线程休眠一段特定的时间 即 try camelContext start Thr
  • 使用骆驼的电源模拟时出现问题

    由于我必须模拟静态方法 所以我使用电源模拟测试我的应用程序 我的应用程序使用 骆驼2 1 2 我定义路线XML被读取的是骆驼泉语境 没有出现任何问题的时候Junit单独用于测试 使用电源模拟时 我收到帖子末尾列出的错误 我还列出了使用的 X
  • 为什么camel kafka Producer很慢?

    我使用 apache camel kafka 作为生成消息的客户端 我观察到 kafka 生产者需要 1 毫秒才能推送一条消息 如果我使用骆驼聚合将消息合并到批处理中 那么推送一条消息需要 100 毫秒 安装简述 3 kafka 集群 16
  • 如何使用 autoStartup=false 启动 Camel 路线

    我想使用以下命令来控制我的路线何时启动RoutePolicy 因此 我将其定义为autoStartup false
  • 有没有办法从 bean 设置消息头?

    我有一条简单的骆驼路线需要修改 路线如下 from source uri unmarshal bean TransformMessageBean class SomeMethod to destination uri 我想在解组之后添加另一
  • Camel 中的无限循环 - Rabbitmq

    我有一个小型服务器路由 它从queue in 获取消息并放入queue out 当我输入一条消息时queue in 服务器无限循环运行 我想知道我在配置方面缺少什么 这看起来是一条非常简单的路线 小服务器路由
  • Camel Apache:从接收到的 XML 中提取一些值的 xpath

    在我的 Camel 路由期间 我查询服务器 HTTP GET 结果 我收到一个 200 OK 其 XML 正文看起来类似如下
  • 从 Apache Camel 内的 JSON 主体访问数据

    我正在使用一个 API 它基本上允许文件系统的导航 我正在尝试通过 API 从返回的 JSON 中访问数据 以便对其执行功能 下面是我使用访问 API 的代码 我尝试使用 unmarshal 来 将返回的 JSON 转换为 Map from
  • 使用Java DSL的Camel CXF POJO模式

    我有一个预先存在的 Web 服务 连接 SOAP 如果可能的话 我想在不使用 Swing 框架的情况下进行调用 我遵循接触优先开发 使用 cxf wsdl2java 工具生成我的 java 文件 我希望从 java 对象中提取用户名和密码并
  • Camel中如何动态添加和启动路由?

    我正在尝试从 Camel 的路线中删除一些样板 例如 让我们考虑两条相似的路线 并且可以生成它们的大部分内部内容 我创建了一个组件 模板 它创建了TemplateEndpoint 并修改了 XML 配置以使用模板组件 自定义方法Templa
  • 从 HTTP 端点发送消息到 JMS

    我正在尝试使用骆驼路由 它将接受 http 端点上的有效负载 然后将该有效负载写入 JMS 队列 到目前为止我所拥有的路线如下 但是一条空消息被传递到 jms 队列 消息到达那里 但没有正文 路线如下
  • Apache Camel 同时处理两个 csv 文件

    我正在尝试处理两个 csv文件并将其数据保存到数据库中 我使用的是 java dsl 而不是 spring 为了更好地解释这个场景 我正在读两本 csv文件并处理它们以将数据上传到 sql 数据库中 我为此执行的步骤是 在 servlet
  • 如何在camel Rest中验证JSON请求

    我需要根据某种模式验证对骆驼休息服务的传入请求 例如 根据要求 如下所示 routeId fileBatchRoute action start sourceLocation sourceDirectory destinationLocat
  • Camel Rest URI 使用后缀

    所以我有一个使用 Camel 的 REST Web 服务 它工作得很好 只是如果我用后缀调用我的 URI 我会得到相同的响应 而不是 404 休息配置 restConfiguration component restlet bindingM
  • Apache Camel:如何存储变量以供以后使用

    在使用 Spring DSL 玩 Camel 时 我遇到了以下问题 假设预期的消息流如下所示 客户端将带有 XML 正文的 HTTP POST 消息发送给 CAMEL CAMEL 向服务器代理 HTTP POST 消息 并使用稍微调整的 U
  • Akka、SQS 和 Camel 的消费者投票率

    我正在做的一个项目需要从SQS读取消息 我决定使用Akka来分布式处理这些消息 由于 Camel 支持 SQS 并且在 Consumer 类中内置了 Akka 中使用的功能 因此我认为最好以这种方式实现端点并读取消息 尽管我还没有看到很多人
  • MQ 标头 - 标识符上下文 - ApplIdentityData

    我们想要从 MQ 标头上的 ApplIdentityData 中提取信息 但在消费者方面 我们没有看到 ApplIdentityData 相应的 JMS 标头 我确实跟踪了日志 但没有找到与 ApplIdentityData 相关的任何信息
  • 在apachecamel中处理大型压缩文件

    我正在尝试获取一个文件 zip从 ftp 服务器压缩并尝试将其存储在 S3 中 gzip使用骆驼压缩 以下是我目前的路线 from sftp username host file path password
  • Camel end 与 endChoice - 不是通常的查询

    首先 是的 我已经搜索过 是的 我已经阅读了每个人都指向的同一个 Apache 文档 我认为这有点混乱 我想我知道答案 所以让我举一个我认为正确的例子 然后是我认为的答案 谢谢 哦 我确实知道某些 endChoice 行并不是严格必要的 C

随机推荐