当前位置: 首页 > 知识库问答 >
问题:

骆驼交换通过码头延续到期

司马念
2023-03-14

在Apache Camel中是否有可能注册一个处理程序来管理由于已达到延续超时而无法写入jettyendpointhttp响应的交换?

共有2个答案

穆宾白
2023-03-14

不,这是不可能的。如果有一些处理速度较慢的交换,可能需要设置更高的超时。

欢迎您深入了解Jetty API,看看您是否可以为这样的onTimeout事件找到一个钩子,并看看在camel-jetty中需要什么来支持它。

窦夜洛
2023-03-14

我只想添加我的注释,因为我在我的项目中通过如下方式修改if(continuation.isExpired())块中的CamelContinuationServlet使其可用

if (continuation.isExpired()) {
  String id = (String) continuation.getAttribute(EXCHANGE_ATTRIBUTE_ID);
  // remember this id as expired
  expiredExchanges.put(id, id);
  log.warn("Continuation expired of exchangeId: {}", id);

  consumer.getBinding().doWriteExceptionResponse(new TimeoutException(), response);

  return;
}

结合我的代码中名为ErrorHandlingHttpBinding的定制HttpBinding,如下所示

public class ErrorHandlingHttpBinding extends DefaultHttpBinding {

  @Override
  public void doWriteExceptionResponse(Throwable exception, HttpServletResponse response) throws IOException {
    if (exception instanceof TimeoutException) {
        response.setStatus(HttpServletResponse.SC_GATEWAY_TIMEOUT);
        response.getWriter().write("Continuation timed out...");            
    } else {
      super.doWriteExceptionResponse(exception, response);
    }
  }
}

注册为spring bean,并在组件字符串中称为jetty:http://localhost:21010/?useContinuation=true

 类似资料:
  • 我是第一次使用Camel。我的试验项目是编写一个应用程序,该应用程序接收HTTP GET请求(使用Jetty)并通过Thrift将请求传递到另一台服务器。然后将收到的答案传递回客户端。(即,如果您愿意,我正在编写超文本传输协议-get请求和Thrift支持的服务器之间的数据交换机或中间件应用程序。) 我有一个完美的非驼峰版本,现在我正在尝试将驼峰等效物组合在一起。目前,我只想将jetty请求写入一

  • 我使用以下路线: endpoint: 如果文件大小超过2 MB,则会发生以下异常:(Camel-Jetty超文本传输协议代理大响应数据原因问题:超出缓冲容量) 问题: 有没有办法避免这种缓冲问题?(可能使用另一个组件代替jetty?) 由于码头endpoint中的主体没有改变,我想知道是否有可能将主体直接“绕过”到下一个endpoint。

  • 我需要在Exchange对象的属性上传递一些参数。据我所知和阅读,最好在交换属性上创建我的参数,因为消息的标头可以在路由期间更改。Camel正在从一个路由到另一个路由创建新的交换,但不保留我的任何参数的历史记录。 现在一些上下文:我正在使用部署在WebLogic 12C上的Camel(2.16.1) 相关的Maven部分: 骆驼上下文: 如您所见,我使用了一个名为TestProcess的类来影响E

  • 我想在Camel环境中使用Jetty组件。这是我的spring配置的摘录。xml: 下面是用于返回字符串的代码: 本地地址有效(http://127.0.0.1/enc)但是浏览器没有正确显示字符串(显示为“abcÃö¼ÃŸ”–äääääŒääää‰)。我假设问题是一些编码。如何设置像“utf-8”这样的编码? 我在这里找不到任何提示(http://camel.apache.org/jetty.

  • 希望你有时间回答我的问题。在过去的几天里,我一直在阅读关于Camel的文章,并设法将一切都设置好并运行起来。现在,我碰到了一个棘手的部分:)。基本上,我在运行时使用Java定义一个路由,并将路由配置放在DB中。路线是可行的,信息从一边流向另一边。但是,当异常发生时,我想知道异常发生在哪里(在哪个路由endpoint之间),在DB中存储当前的交换主体(对进一步处理有用的进行中的消息),由用户更新消息

  • 我已经创建了一个服务代理。 代理(请求类型为)和实际服务(请求类型。)之间有一个处理器。 进入< code > process(Exchange Exchange)方法的交换体属于< code>TypeA。 我能够使用下面的代码行访问数据 现在,我想将此信息更改为。 我使用下面的代码添加主体。 我得到了 现在,我想使用调用真正的服务,它来自。 我尝试进入处理器,但出现以下异常 真正的Web服务没有