首页 文章

如何在WSO2 ESB中调解纯TCP消息

提问于
浏览
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>

可能我仍然对解决方案的体系结构感到困惑,但我认为像这个TcpApp这样的经纪人,或像WSO2这样的ESB应该可以工作 . 我更喜欢先解析解决方案,以获得真正的配置以使其工作 . 所有评论,欢迎!

2 回答

  • 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>
    
  • 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

相关问题