Bitfinex api v2 не возвращает свечи

Я использую bitfinex websockets v2 API в приложении Java, чтобы получить свечи с рынка. Но я не получаю никакого сообщения из сокета (даже ошибки). Интересно, что я делаю неправильно? Также я заметил, что не могу подписаться на тикер.

v1 API работает нормально для меня, я могу подписаться на сообщения без проблем. Но в версии 2 у меня работает только пинг-понг, но я не могу подписаться на такие сообщения, как тикер или свечи.

Позвольте мне показать вам код, который у меня есть, может быть, я что-то забыл:

Здесь я создаю клиент и открываю веб-сокет на новый адрес API:

@SpringBootApplication(scanBasePackages = "application")
public class Application {

    private static Object waitLock = new Object();

    public static void main(String[] args) {
        ApplicationContext applicationContext = SpringApplication.run(Application.class, args);

        WebSocketClient webSocketClient = new WebSocketClient();
        webSocketClient.startWebSocketClient("wss://api.bitfinex.com/ws/2");
    }
}

Это клиент, который управляет подключением к сокету.

   public class WebSocketClient {

        final static CountDownLatch messageLatch = new CountDownLatch(1);

        public void startWebSocketClient(String address) {
            try {
                WebSocketContainer container = ContainerProvider.getWebSocketContainer();
                System.out.println("Connecting to " + address);
                container.connectToServer(WebSocketEndpoint.class, URI.create(address));
                messageLatch.await();
            } catch (DeploymentException | InterruptedException | IOException ex) {
                Logger.getLogger(WebSocketClient.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

    }

Это конечная точка, которую я создаю для обработки ответов.

@ClientEndpoint
public class WebSocketEndpoint {

    private Session session;

    @OnOpen
    public void onOpen(Session session) {
        this.session = session;
        System.out.println("Connected to endpoint: " + session.getBasicRemote());
        RemoteEndpoint.Async asyncRemote = session.getAsyncRemote();
        asyncRemote.sendText("{event:\"subscribe\",channel:\"candles\",key:\"trade:1m:tBTCUSD\"}");
    }

    @OnMessage
    public void processMessage(String message) {
        System.out.println("Received message: " + message);
    }

    @OnError
    public void processError(Throwable t) {
        t.printStackTrace();
    }

}

Ответы (1)

Проблема может заключаться в том, что данные JSON не содержат разрывов строк. Я столкнулся с той же проблемой. Мой вызов «подписаться» не имел никакого эффекта, пока я не добавил разрывы строк в данные JSON. Я даже не получил сообщение об ошибке от API.

Вы можете использовать библиотеку JSON для Java, которая будет обрабатывать правильное форматирование для вас.

Обратите внимание, что существует несколько существующих библиотек для Bitfinex и Java. Вам не нужно реализовывать вызовы API самостоятельно.