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

代理wso2 esb中的TCP传输

呼延升
2023-03-14

当使用此代码发送soap xml时,我希望通过TCP传输向代理服务发送请求

Socket clientSocket = new Socket("host", port);

DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());

outToServer.writeBytes("soap xml instance");

clientSocket.close();

它工作得很好,我的生意还在继续。

但是当我发送两个xml而不关闭套接字时,如下所示:

Socket clientSocket = new Socket("host", port);

DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());

outToServer.writeBytes("soap xml instance");

outToServer.writeBytes("another soap instance");

clientSocket.close();

共有1个答案

鞠宏恺
2023-03-14

我能够使用示例客户机向ESB发送TCP消息,但您必须确保发送的是XML元素。

首先,确保您已经在Axis2.xml中启用了tcp传输累西弗(repository/conf/Axis2/Axis2.xml)

<transportReceiver name="tcp" class="org.apache.axis2.transport.tcp.TCPTransportListener" >

===========================================================

<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
       name="TCPProxy"
       transports="https,http"
       statistics="disable"
       trace="disable"
       startOnLoad="true">
   <target>
      <inSequence>
         <log level="full"/>
      </inSequence>
      <outSequence>
         <send/>
      </outSequence>
   </target>
   <parameter name="transport.tcp.port">6789</parameter>
   <parameter name="transport.tcp.contentType">application/xml</parameter>
   <description/>
</proxy>
import java.io.*;
import java.net.*;

class TCPClient {
    String host = "localhost";
    int port = 6789;
    Socket socket = null;
    public static void main(String args[]) throws Exception{
        String name ="Amani";
        TCPClient client = new TCPClient();
        String message = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n" +  
        "<soapenv:Header/>\n" +
        "<soapenv:Body>\n" +
        "  <p:greet xmlns:p=\"http://greet.service.amani.org\">\n" + 
        "     <in>" + name + "</in>\n" +
        "  </p:greet>\n" +
        "</soapenv:Body>\n" +
        "</soapenv:Envelope>";
        client.SendToServer("<test></test>");
        client.close();
    }

    TCPClient(String _host, int _port) throws Exception{
        host = _host;
        port = _port;
        socket = new Socket(host, port);
    }
    TCPClient() throws Exception{
        socket = new Socket(host, port);
    }
    void SendToServer(String msg) throws Exception{
        //create output stream attached to socket
        PrintWriter outToServer = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
        //send msg to server
        outToServer.print(msg + '\n');
        outToServer.flush();
    }
    String RecieveFromServer() throws Exception{
        //create input stream attached to socket
        BufferedReader inFromServer = new BufferedReader(new InputStreamReader (socket.getInputStream()));
        //read line from server
        String res = inFromServer.readLine(); // if connection closes on server end, this throws java.net.SocketException 
        return res;
    }
    void close() throws IOException{
        socket.close();
    }
}
 类似资料:
  • TCP代理配置概述。 filter.network.TcpProxy filter.network.TcpProxy.DeprecatedV1 filter.network.TcpProxy.DeprecatedV1.TCPRoute filter.network.TcpProxy filter.network.TcpProxy proto { "stat_prefix": "...",

  • TCP代理配置参考 { "name": "tcp_proxy", "config": { "stat_prefix": "...", "route_config": "{...}", "access_log": [] } } route_config (required, object) 过滤器的路由表。所有的过滤器实例都必须有一个路由表,即使它是空的。 st

  • TCP代理架构概述 v1 API 参考 v2 API 参考 统计 TCP代理过滤器同时包括下游统计信息以及适用与多集群上游统计信息。下游统计信息的根为tcp.<stat_prefix>.统计如下: 名称 类型 描述 downstream_cx_total Counter 过滤器处理的连接总数 downstream_cx_no_route Counter 没有找到匹配路由的连接数 downstrea

  • 由于Envoy基本上是作为L3/L4服务器编写的,因此很容易实现基本的L3/L4代理。TCP代理过滤器在下游客户端和上游群集之间执行基本的1:1网络连接代理。它本身可以用作替代通道,或与其他过滤器(如MongoDB过滤器或速率限制过滤器)结合使用。 TCP代理过滤器将遵守每个上游集群的全局资源管理器施加的连接限制。TCP代理过滤器检查上游集群的资源管理器是否可以创建连接,而不会超过该集群的最大连接

  • 我有个奇怪的问题。 我有http流量进入端口80,由我的vhosts文件管理,代理到内部web服务器,但我也有tcp非http流量进入端口80,需要代理到端口80上的另一个内部服务器。 我已经尝试了mod重写规则来尝试隔离非http通信的源ip地址,并创建一个规则来代理它到我的其他内部主机,但这也不起作用。 我将windows与apache一起使用,如果可能的话,我更愿意使用apache来实现这一

  • 以下是我对这些的理解,我看到了很少的差距;特别是何时何地使用 HTTP(s)代理: 可用作TLS终止代理 可用于修改HTTP标头 可用作DMZ前面的负载均衡器或公共IP提供程序,以屏蔽后端服务器 TCP代理 可以用作TCP连接的反向代理,不仅支持HTTP而且支持其他应用层协议,如FTP 我的问题 如果我只接受HTTP web流量,我们应该使用TCP代理而不是HTTP代理的用例是什么 这种理解是连接