【问题标题】:Apache Camel for TCP based streamer基于 TCP 的流媒体的 Apache Camel
【发布时间】:2013-08-12 10:54:20
【问题描述】:

需要有一个基于 Camel (Mina/Netty) 的 TCP 服务器在特定端口上运行,它允许多个 TCP 客户端连接到它。要流式传输的内容在文件中可用,并且 TCP 服务器必须将文本文件中的每一行发送到连接的客户端之一(循环)。

有人可以帮我勾勒出实现这一目标的骆驼路线的轮廓吗?

还可以限制流传输速度,例如每个连接的客户端 100 msg/sec?

提前致谢。

MK

【问题讨论】:

    标签: apache-camel mina


    【解决方案1】:

    我做过类似的事情。好吧,不完全符合您的要求,但我可以就如何开始提出一些建议。

    让我们在这条路线上使用 MINA 组件,因为我在 Netty 组件上遇到了一些问题,请参阅此链接 Exception thrown from Apache Camel Netty Consumer When more than one client sends data。显然这个问题已经解决了,但是由于我的项目被取消了,我再也没有测试过它。

    所以根据你的描述,这将是一个基于文本行的协议,一个简单的路由在 DSL 中看起来像这样

    <route>
       <from uri="mina2:tcp://localhost:5555?textline=true"/>
       <to uri="bean:fileProcessing"/>
    </route>
    

    此路由将在 localhost 端口 5555 上打开一个侦听套接字。该路由还设置为使用文本行编解码器。文本行编解码器本质上是一行文本终止的行尾字符,即\n。如果您要使用其他协议,则需要查看以下项目:

    • ProtocolEncoder - ProtocolEncoder 处理获取输入的任务 有效载荷并将字节放入 TCP 通道。
    • ProtocolDecoder - ProtocolDecoder 解释自定义 二进制协议消息到您的应用程序可以理解的内容。
    • ProtocolCodecFactory - 这将创建编码器和解码器。

    您可以在fileProcessing bean 中实现一些逻辑来发送回复。有一个问题,但是当客户准备好获得新线路时,他们必须提出请求。据我了解,这遵循请求回复场景。但是据我所见,只有当有消息从客户端传入服务器时,该路由才处于活动状态。

    可能有一种方法可以从服务器启动发送,但您需要自己试验才能完成它我自己没有做过类似的事情。

    批判性阅读如下。

    我的建议是从这样的基本路线开始,然后扩展您的逻辑,然后再返回您可能遇到的问题。

    更新:

    所以我对此进行了一些研究,如果不遵循以下 InOnly 和 InOut 模式之一,似乎不可能将事件从服务器发送到客户端。

    然后尝试只使用 MINA 或 Netty。

    【讨论】:

      猜你喜欢
      • 2018-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多