Bitfinex api v2 no devuelve velas

Estoy usando bitfinex websockets v2 api en una aplicación Java para obtener las velas de un mercado. Pero no recibo ningún mensaje del socket (ni siquiera un error). Me pregunto qué estoy haciendo mal. También noté que no puedo suscribirme al teletipo.

v1 de la API funciona bien para mí, puedo suscribirme a los mensajes sin ningún problema. Pero en v2, solo hago que funcione el ping pong, pero no puedo suscribirme a mensajes como ticker o velas.

Déjame mostrarte el código que tengo, tal vez me estoy olvidando de algo:

Aquí creo un cliente y abro un websocket a la nueva dirección 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");
    }
}

Este es el cliente que gestiona la conexión al socket.

   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);
            }
        }

    }

Este es el punto final que creo para manejar las respuestas.

@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();
    }

}

Respuestas (1)

El problema podría ser que los datos JSON no contengan saltos de línea. Estaba enfrentando el mismo problema. Mi llamada de 'suscripción' no tuvo efecto hasta que agregué saltos de línea a los datos JSON. Ni siquiera he recibido un mensaje de error de la API.

Puede usar la biblioteca JSON para Java, que manejará el formato correcto por usted.

Tenga en cuenta que existen algunas bibliotecas para Bitfinex y Java. No es necesario que implemente las llamadas a la API por su cuenta.