Apache Camel for TCP based streamer

时间:2013-08-12 10:54:21

标签: apache-camel mina

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

有人可以用骆驼路线的轮廓来帮助我实现这个目标吗?

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

提前致谢。

MK

1 个答案:

答案 0 :(得分:2)

我做过类似的事情。不完全是你想要的,但我可以就如何开始提出一些建议。

让我们将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>

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

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

您可以在fileProcessing bean中实现一些逻辑来发回回复。但是有一个问题,当客户准备好换新线时,他们必须要求。根据我的理解,这遵循请求回复场景。但是,根据我所看到的,只有当有消息从客户端进入服务器时,路由才会处于活动状态。

可能有一种方法可以从服务器发起发送,但是你需要自己试验完成它我自己没有做过这样的事情。

批判性阅读将如下。

我的建议是从这样的基本路线开始,然后扩展你的逻辑,然后回过头来看看你可能会遇到的问题。

更新:

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

然后尝试使用MINA或Netty。