4

我有一个应用程序(例如,TcpApp)发送纯 TCP 消息(即,没有 SOAP,没有信封......只是一个原始字符串甚至字节)。我需要连接 ESB 以通过特定端口(例如 3333)侦听这些消息,并进行一些调解(目前,只做日志记录就足够了)。我认为从 TcpApp 创建一个 ActiveMQ 队列,然后从 ESB 中的 JMS 创建一个代理服务是一个好主意(而不是直接将 ESB 连接到 TcpApp)。我阅读了几个示例和答案,但始终是 XML,而 TCP 只是传输。有时会发生的是应用程序不通过 TCP 发送特殊格式(有时称为电报)。我尝试更改内容类型,但 ESB 仍然拒绝读取 TCP 端口。

<parameter name="transport.tcp.contentType">text/plain</parameter>

可能我仍然对解决方案的体系结构感到困惑,但我认为代理或像 WSO2 这样的 ESB 应该可以在这种情况下作为这个 TcpApp 的中介。我更喜欢在获得真正的配置以使其工作之前讨论解决方案。所有评论,欢迎!

4

2 回答 2

0

您需要使用正确的消息格式化程序和构建器来处理任何内容。在axis2.xml 文件中使用以下格式化程序。

<messageFormatter contentType="application/binary" class="org.wso2.carbon.relay.ExpandingMessageFormatter"/>
<messageBuilder contentType="application/binary" class="org.wso2.carbon.relay.BinaryRelayBuilder"/>

只需更改您喜欢的内容类型,并在代理服务配置中使用相同的内容。实际上,我也有一篇关于此的博文 [1] :)

[1] - http://soatechflicks.blogspot.com/2017/05/processing-binary-data-from-tcp.html

于 2017-11-10T05:04:25.823 回答
0

在 WSO2 EI 6.1.1 中,我发现如果我还指定了 recordDelimiter 和 recordDelimiterType,我可以成功处理纯文本 TCP 消息。来自工作代理的示例(以换行符作为分隔符):

<parameter name="transport.tcp.responseClient">true</parameter>
<parameter name="transport.tcp.inputType">binary</parameter>
<parameter name="transport.tcp.recordDelimiter">0x0A</parameter>
<parameter name="transport.tcp.contentType">text/plain</parameter>
<parameter name="transport.tcp.port">50001</parameter>
<parameter name="transport.tcp.recordDelimiterType">byte</parameter>

输入序列中的消息正文如下所示:

<text xmlns="http://ws.apache.org/commons/ns/payload">this_is_the_message</text>
于 2017-11-08T16:34:26.133 回答