Работа с наблюдателями Minishift в приложениях Java - PullRequest
0 голосов
/ 24 марта 2020

Я работал над приложением Java, которое использует API openshift. В частности, Конфигурация развертывания OpenShift

Я пытался настроить наблюдателя, но мое тело ответа никогда не вызывалось. Я уже могу получить ответ от API-вызовов «не наблюдателя». Я использую библиотеку groovy httpbuilder для выполнения моего запроса

def http = new HTTPBuilder(<<URL TO OPENSHIFT>>)
try {
    http.get(path: '/oapi/v1/watch/namespaces/myproject/deploymentconfigs', contentType: "application/json") { resp, reader ->
        println(resp)
        return reader
    }
} catch (HttpResponseException e) {
    System.out.println(e)
}

. Пожалуйста, проконсультируйте дальнейший путь для настройки наблюдателей OpenShift в моем приложении. Сообщение об ошибке никогда не выдается. Журналы minishift -f также не предоставляют никакой обратной связи. Также обратите внимание, что я получил это для работы с командой curl, описанной в API

1 Ответ

0 голосов
/ 02 апреля 2020

Вы можете использовать OKHttpClient для обработки протокола обновления websocket http. Обратите внимание, что устаревшие версии minishift требуют параметра запроса "access_token" при попытке сделать запрос подключения через веб-сокет

        OkHttpClient client = new OkHttpClient();
        def token = token
        Request request = new Request.Builder()
                .get()
                .url("https://<<IP>>/oapi/v1/watch/namespaces/<<namespace>>/deploymentconfigs?watch=true&access_token=<<token>>")
                .addHeader("Accept", "application/json")
                .addHeader("Connection", "close")
                .addHeader("Sec-WebSocket-Protocol",'base64url.bearer.authorization.k8s.io.' + Base64.getEncoder().encodeToString(token.getBytes()))
                .addHeader('Origin', 'https://<<IP>>')
                .build()
        WebSocketListener websocketListener= new WebSocketListenerImpl()
        client.newWebSocket(request, websocketListener)

WebSocketListenerImpl Class

import okhttp3.Response;
import okhttp3.WebSocket;
import okhttp3.WebSocketListener;
import okio.ByteString;

public class WebSocketListenerImpl extends WebSocketListener {

    public WebSocketListenerImpl() {
        super();
    }

    @Override
    public void onOpen(WebSocket webSocket, Response response) {
        super.onOpen(webSocket, response);
        print "WEBSOCKET OPEN"
    }

    @Override
    public void onMessage(WebSocket webSocket, String text) {
        super.onMessage(webSocket, text);
        print "WEBSOCKET RECEIVED"

    }

    @Override
    public void onMessage(WebSocket webSocket, ByteString bytes) {
        super.onMessage(webSocket, bytes);
        print "WEBSOCKET OPEN"

    }

    @Override
    public void onClosing(WebSocket webSocket, int code, String reason) {
        super.onClosing(webSocket, code, reason);
        print "WEBSOCKET CLOSING"

    }

    @Override
    public void onClosed(WebSocket webSocket, int code, String reason) {
        super.onClosed(webSocket, code, reason);
        print "WEBSOCKET CLOSED"

    }

    @Override
    public void onFailure(WebSocket webSocket, Throwable t, @javax.annotation.Nullable Response response) {
        super.onFailure(webSocket, t, response);
        println "WEBSOCKET FAILED"

    }
}
...