[尝试连接以建立STOMPClient连接时出现错误,这里可能是什么问题?

问题描述 投票:1回答:1

下面是我的代码,它会引发错误:

java.io.EOFException: at java.io.DataInputStream.readByte(Unknown Source)

PythonJava使用相同的凭据和主机/端口,并且可以使用。

此代码失败:

public static void main(String args[]) throws Exception {
    String host = "***********.mq.us-west-2.amazonaws.com";
    Integer port = 61614; String userId="******", password="*****";

    StompConnection connection = new StompConnection();
    connection.open(host, port);
    connection.connect(userId, password);
    connection.disconnect();
}

错误:

Exception in thread "main" java.io.EOFException
    at java.io.DataInputStream.readByte(Unknown Source)
    at org.apache.activemq.transport.stomp.StompWireFormat.readHeaderLine(StompWireFormat.java:155)
    at org.apache.activemq.transport.stomp.StompWireFormat.readLine(StompWireFormat.java:148)
    at org.apache.activemq.transport.stomp.StompWireFormat.parseAction(StompWireFormat.java:181)
    at org.apache.activemq.transport.stomp.StompWireFormat.unmarshal(StompWireFormat.java:98)
    at org.apache.activemq.transport.stomp.StompConnection.receive(StompConnection.java:77)
    at org.apache.activemq.transport.stomp.StompConnection.receive(StompConnection.java:68)
    at org.apache.activemq.transport.stomp.StompConnection.connect(StompConnection.java:139)
    at org.apache.activemq.transport.stomp.StompConnection.connect(StompConnection.java:132)
    at org.apache.activemq.transport.stomp.StompConnection.connect(StompConnection.java:122)
    at com.springboot.nfl.streams.StompListn2.main(StompListn2.java:15)
java stomp
1个回答
0
投票

这里的问题是您的脚踏客户端正在not在开始连接时正在执行所需的WebSocket handshake

此初始握手用于将HTTP连接升级为WebSocket连接,当您直接尝试连接到主机时,将使用Java在安全的WebSocket上进行通信。请注意,您正在使用的STOMP客户端实现在发送CONNECTED时期望CONNECT帧,但是由于它不执行WebSocket握手,因此不会接收它,因此EOFException。从official code example

private StompSession connect() throws Exception {
    // Create a client.
    final WebSocketClient client = new StandardWebSocketClient();
    final WebSocketStompClient stompClient = new WebSocketStompClient(client);
    stompClient.setMessageConverter(new StringMessageConverter());

    final WebSocketHttpHeaders headers = new WebSocketHttpHeaders();

    // Create headers with authentication parameters.
    final StompHeaders head = new StompHeaders();
    head.add(StompHeaders.LOGIN, ACTIVE_MQ_USERNAME);
    head.add(StompHeaders.PASSCODE, ACTIVE_MQ_PASSWORD);

    final StompSessionHandler sessionHandler = new MySessionHandler();

    // Create a connection.
    return stompClient.connect(<wss_endpoint>, headers, head, sessionHandler).get();
}

正如您在这里看到的,connect包含一些headerssession handler,并且它们与WSS uri连接。您可以使用您的凭证替换标头,也可以从AWSMQTT服务器获取wss端点,有关wss uri的外观,请参见我上面共享的链接。

© www.soinside.com 2019 - 2024. All rights reserved.