无法构建Bitfinex Java客户端-无法获得任何响应

问题描述

因此,这里的主要目标是通过构建WebSocket客户端来连接到Bitfinex WebSocket。我想开始接收信息流(价格,交易等)。问题在于,在这个阶段,我什至不能订阅特定的货币对。换句话说,我正在向WebSocket服务器发送信息请求,但没有收到任何响应,因此我无法弄清楚为什么这样做。我的代码在下面。

这是主要方法

    public class Main {
    public static void main(String[] args) throws ExecutionException,InterruptedException {
        String URL = "wss://api-pub.bitfinex.com/ws/2/";

        WebSocketClient client = new StandardWebSocketClient();
        WebSocketStompClient stompClient = new WebSocketStompClient(client);
        stompClient.setMessageConverter(new MappingJackson2MessageConverter());
        StompSessionHandler sessionHandler = new MyStompSessionHandler();
        stompClient.connect(URL,sessionHandler);


        new Scanner(system.in).nextLine(); // Don't close immediately.

    }
}

这是MyStompSessionHandler

    public class MyStompSessionHandler extends StompSessionHandlerAdapter{
    @Override
    public void afterConnected(
            StompSession session,StompHeaders connectedHeaders) {
        System.out.println("New session established : " + session.getSessionId());
        System.out.println("wss://api-pub.bitfinex.com/ws/2");
        session.send("wss://api-pub.bitfinex.com/ws/2/",getSampleMessage());
        System.out.println("Message sent to websocket server");
    }

    @Override
    public void handleException(StompSession session,StompCommand command,StompHeaders headers,byte[] payload,Throwable exception) {
        System.out.println("Got an exception:" + exception);
    }

    @Override
    public Type getPayloadType(StompHeaders headers) {
        return OutboundMessage.class;
    }

    private Object getSampleMessage() {
        InboundMessage inboundMessage = new InboundMessage();
        inboundMessage.setEvent("subscribe");
        inboundMessage.setChannel("ticker");
        inboundMessage.setSymbol("tBTCUSD");
        return inboundMessage;
    }

    @Override
    public void handleFrame(StompHeaders headers,Object payload) {
        InboundMessage msg = (InboundMessage) payload;
        System.out.println(msg.toString());
    }
}

这是InboundMessage类

public class InboundMessage {
    private String event;
    private String channel;
    private String symbol;

    public InboundMessage() {
    }

    public InboundMessage(String event,String channel,String symbol) {
        this.event = event;
        this.channel = channel;
        this.symbol = symbol;
    }

    public String getEvent() {
        return event;
    }

    public void setEvent(String event) {
        this.event = event;
    }

    public String getChannel() {
        return channel;
    }

    public void setChannel(String channel) {
        this.channel = channel;
    }

    public String getSymbol() {
        return symbol;
    }

    public void setSymbol(String symbol) {
        this.symbol = symbol;
    }

    @Override
    public String toString() {
        return "InboundMessage{" +
                "event='" + event + '\'' +
                ",channel='" + channel + '\'' +
                ",symbol='" + symbol + '\'' +
                '}';
    }

解决方法

我查看了Bitfinex website,但没有发现任何证据表明支持STOMP。他们只有一个REST和一个WebSocket API。因此,无法从客户端使用STOMP。