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

如何在Camel-Scala中构建从文件到websocket客户端的路由?

长孙鸿波
2023-03-14

我需要读取/files目录下的文件,然后在websocket客户端上显示该文件的内容。这就是我在MyRouteBuilder.scala中所做的工作:

import org.apache.camel.component.websocket.WebsocketComponent
import org.apache.camel.{LoggingLevel, CamelContext, Exchange}
import org.apache.camel.scala.dsl.builder.ScalaRouteBuilder

/**
 * A Camel Router using the Scala DSL
 */
class MyRouteBuilder(override val context : CamelContext) extends ScalaRouteBuilder(context) {

  // an example of a Processor method
  val myProcessorMethod = (exchange: Exchange) => {
    exchange.getIn.setBody("block test")
  }

  val ws = context.getComponent("websocket", classOf[WebsocketComponent]);
  ws.setPort(8444);
  ws.setHost("127.0.0.1")
  // we can serve static resources from the classpath: or file: system
  ws.setStaticResources("classpath:.");

  "file://files?noop=true" ==> {
    setBody(convertBodyTo(classOf[String]))
    to("websocket://127.0.0.1:8444/")
  }
}

但是,当我运行它时,会给出以下stacktrace:

RouteId ProcessorId处理器运行时间(ms)[route1][route1][File://Files?noop=true][2][route1][convertBodyTo1][ConvertBodyTo[java.lang.String]][1][route1][SetBody[{org.apache.camel.scala.ScalaExpression@F736069}]][0][route1][to1][WebSocket://127.0.0.1:8444/][1]

Exchange[Id ID-vaisakh-ubuntu-45785-1455531433908-1-12 ExchangePattern InOnly标头{breadcrumbid=id-vaisakh-ubuntu-45785-1455531433908-1-11,CamelFileAbsolute=false,CamelFileAbsolutePath=/Home/Sagar/IDeaProjects/SampleIntegrationService/Files/paudies.json,CamelFileContentType=text/plain,CamelFileLastModified=1455526488000,

共有1个答案

越扬
2023-03-14

通过从标头设置connection key属性解决了此问题。

 from(websocketUrl) ==> {

     setProperty("wsConnKey", header("websocket.connectionkey"))
     to("file://files?noop=true")
 }

 "file://files?noop=true" ==> {

     setBody(convertBodyTo(classOf[String]))
     to(WEBSOCKET_RESPONSE_ENDPOINT)
 }

 from(WEBSOCKET_REPONSE_ENDPOINT) ==> {

     process(new Processor() {
         void process(Exchange exchange) {
             Object connectionKey = exchange.getproperty("wsConnKey");
             Object exchangeBody = exchange.getIn().getBody();
             exchange.getOut().setHeader("wsConnKey", connectionKey);
             exchange.getOut().setBody(exchangeBody);
         }
     })
    to(websocketUrl)
 }
 类似资料:
  • 客户端路由-从(“websocket://localhost:9999/camel/chat“”) 其中websocket server应用程序的jetty server正在9999上运行。。当尝试通过jetty websocket客户端应用程序进行连接时,它会在上述路由中的同一端口上启动另一个jetty,并给出已在使用的地址异常。。如何通过camel客户端建立连接。。

  • 问题内容: 我正在计划使用Scala的Redis实例进行一些工作,并且正在寻找有关要使用的客户端库的建议。理想的情况是,如果有一个好的库,我想为Scala(而不是Java)设计一个库,但是如果现在使用Java客户机,那不是更好的选择。 在官方客户端列表显示斯卡拉- Redis的作为唯一的斯卡拉特定选项,但它是相当过时,它有许多与各种改进和提高叉…所以现在还不清楚哪些(如果有的话)是一个使用。 目前

  • 我的Python secure websocket客户端代码给出了以下异常: [SSL:CERTIFICATE_VERIFY_FAILED]证书验证失败(_SSL.C:748) 我已经创建了我的私有证书和签名证书,但我无法使用Python脚本连接到它,如下所示: 我的HTTPS/WSS服务器脚本用tornado用python编写,如下所示: 用于创建SSL签名证书的步骤:

  • 我试图在CXFRS骆驼路由中创建对REST web服务调用的响应,但无论我做什么,对客户端的响应总是相同的200,而不是201。以下是我的路线: 返回正文,但忽略响应代码和内容类型。我做错了什么? 谢谢,马特

  • 我已经设置了一个WebSocket服务器使用超文本传输协议-kit,应该接受Web套接字连接。它是超文本传输协议-kit留档中显示的基本示例。 问题是:如何创建连接到它的Clojure客户端? 客户端可以是任何Clojure超文本传输协议库,我真的不介意。我已经了解了Javascript客户端,我相信Java有一个可以从Clojure中使用的API。但是我要找的是一个Clojure库,它支持客户端

  • 问题内容: 我有一个PyQt Gui应用程序。此应用程序有一个主窗口,应在启动后打开。 此应用程序应监听websocket。 我试着解决它是这样的: 但是,启动应用程序后,主窗口没有打开。 如果没有“ ws.run_forever()”行,则打开主窗口,但应用程序不侦听websocket。 我需要在“背景”中收听网络套接字吗?你能帮助我吗? PS :(对不起,我的英语) 问题答案: 感谢engin