AMcoder - javascript, python, java, html, php, sql

Գարնանային STOMP WebSocket նիստի անջատման կարգավորիչը / վերամիացման բեռնաթափումը

Իմ հավելվածում ես օգտագործում եմ STOMP-ը WebSocket-ի միջոցով միկրոսերվիսների միջև հաղորդակցության համար, ես փորձում եմ ներդնել սեսիայի անջատման իրադարձությունների լսիչը՝ միկրոծառայությունների միջև կապը վերականգնելու համար: Ըստ Spring-ի փաստաթղթերի՝ SessionDisconnectEvent պետք է հրապարակվի, երբ ավարտվի STOMP նիստը: Ահա թե ինչպես ես փորձել եմ որսալ իրադարձությունը.

@Component
public class SessionDisconnectListener implements ApplicationListener<SessionDisconnectEvent> {
    @EventListener
    @Override
    public void onApplicationEvent(SessionDisconnectEvent  applicationEvent) {
        System.out.println("SESSION " + applicationEvent.getSessionId() + " DISCONNECTED");
    }
}

Ես իմ դիմումում տեսնում եմ, որ նստաշրջանի կարգավիճակը փոխվում է միացվածից անջատվածի, բայց, ցավոք, այս մեթոդը ավելի նոր է օգտագործվում: Ինչպե՞ս կարող եմ պատշաճ կերպով որսալ նիստի անջատման իրադարձությունը:


Պատասխանները:


1

Դուք կարող եք տեղադրել անջատման կարգավորիչ ձեր StompSessionHandlerAdapter-ում: Ադապտորում դուք պետք է իրականացնեք handleTransportError(session, exception)-ը, կապի ձախողման բոլոր իրադարձությունները կանցնեն այս մեթոդով, և դուք պետք է այնտեղ ներդնեք ձեր անջատման կարգավորիչը: Դուք կարող եք որոշել, թե արդյոք կապը կորել է անցած բացառության հիման վրա, թե ստուգելով ձեր նստաշրջանի կապի կարգավիճակը, ես անձամբ նախընտրում եմ վերջինը:

AtomicBoolean reconnecting = new AtomicBoolean();

@public void handleTransportError(StompSession session, Throwable exception) {
    If (!session.isConnected()) {
        If (reconnecting.compareAndSet(false, true)) {  //Ensures that only one thread tries to reconnect
            try {
                reestablishConnection();
            } finally {
                reconnecting.set(false);
            }
        }
    } else {} //Log exception here
} 
private void reestablishConnection() {
    boolean disconnected = true;
    while (disconnected) {
        try {
            TimeUnit.SECONDS.sleep(sleepTime); //Specify here for how long do you want to wait between each reconnect attempt
        } catch (Exception e) {}  //If an exception happens here then the service is most likely being shut down
        try {
            stompClient.connect(url, this).get();
            disconnected = false;
        } catch (Exception e) {} //Add logging etc. here    
    }
} 
13.05.2020
Նոր նյութեր

Օգտագործելով Fetch Vs Axios.Js-ը՝ HTTP հարցումներ կատարելու համար
JavaScript-ը կարող է ցանցային հարցումներ ուղարկել սերվեր և բեռնել նոր տեղեկատվություն, երբ դա անհրաժեշտ լինի: Օրինակ, մենք կարող ենք օգտագործել ցանցային հարցումը պատվեր ներկայացնելու,..

Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար
Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար Ինչպե՞ս հանգստացնել ձեր միտքը և աշխատեցնել ձեր պրոցեսորը: Ինչպես մնալ հանգիստ և զարգանալ ճնշման տակ...

Մեքենայի ուսուցում բանկային և ֆինանսների ոլորտում
Բարդ, խելացի անվտանգության համակարգերը և հաճախորդների սպասարկման պարզեցված ծառայությունները բիզնեսի հաջողության բանալին են: Ֆինանսական հաստատությունները, մասնավորապես, պետք է առաջ մնան կորի..

Ես AI-ին հարցրի կյանքի իմաստը, այն ինչ ասում էր, ցնցող էր:
Այն պահից ի վեր, երբ ես իմացա Արհեստական ​​ինտելեկտի մասին, ես հիացած էի այն բանով, թե ինչպես է այն կարողանում հասկանալ մարդկային նորմալ տեքստը, և այն կարող է առաջացնել իր սեփական արձագանքը դրա..

Ինչպես սովորել կոդավորումը Python-ում վագրի պես:
Սովորելու համար ծրագրավորման նոր լեզու ընտրելը բարդ է: Անկախ նրանից, թե դուք սկսնակ եք, թե առաջադեմ, դա օգնում է իմանալ, թե ինչ թեմաներ պետք է սովորել: Ծրագրավորման լեզվի հիմունքները, դրա..

C++-ի օրական բիթ(ե) | Ամենաերկար պալինդրոմային ենթաշարը
C++ #198-ի ամենօրյա բիթ(ե), Ընդհանուր հարցազրույցի խնդիր. Ամենաերկար պալինդրոմային ենթատող: Այսօր մենք կանդրադառնանք հարցազրույցի ընդհանուր խնդրին. Ամենաերկար palindromic substring...

Kydavra ICAReducer՝ ձեր տվյալների ծավալայինությունը նվազեցնելու համար
Ի՞նչ է ICAReducer-ը: ICAReducer-ն աշխատում է հետևյալ կերպ. այն նվազեցնում է նրանց միջև բարձր փոխկապակցված հատկանիշները մինչև մեկ սյունակ: Բավականին նման է PCAreducer-ին, չնայած այն..