Hacktoberfest 2026: die Issues, die Maintainer für den Oktober markiert haben – offen und einsteigerfreundlich. Hacktoberfest-Issues durchsuchen

调用三方时负载均衡失败导致业务代码获取contextMgr为空

Offen
#3,956 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Anfängerfreundlichkeit
35/100
Issue-Typ
Bug
Klarheit
Muss geklärt werden
Aktivitätsstatus
Veraltet
Tech-Stack
java
Bereich
api, backend

Rechercherichtung

Beginne damit, den fehlgeschlagenen LoadBalancer.chooseServer-Pfad über InvokerUtils.reactiveInvoke und den in der Issue gezeigten AsyncResponse-Callback nachzuverfolgen. Untersuche, wie ContextUtils den Invocation-Kontext rund um invocation.next verwaltet, und vergleiche dies mit dem Aufrufer von CompletableFuture.get. Erledigt ist die Aufgabe, wenn der fehlgeschlagene Aufruf eines Drittanbieters den Business-Code nicht mehr mit einem null contextMgr zurücklässt; füge eine Regressionstestabdeckung für diesen Fehlerpfad hinzu oder führe sie aus.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

need discussion

版本:1.3.10
代码实现:业务为REST接口,非Reactive模式,业务调用三方接口为Reactive模式,调用三方结束后,通过CompletableFuture的get方法获取三方调用结果后返回。
问题场景:压测的过程中,因三方未扩容,压测一段时间后负载均衡失败,LoadBalancer.chooseServer返回null,导致了InvokerUtils的reactiveInvoke方法传给invocation.next的AsyncResponse被调用:

invocation.next(ar -> {
        ContextUtils.setInvocationContext(invocation.getParentContext());
        try {
          invocation.getInvocationStageTrace().finishHandlersResponse();
          invocation.onFinish(ar);
          asyncResp.handle(ar);
        } finally {
          ContextUtils.removeInvocationContext();
        }
      });

以上的ContextUtils.removeInvocationContext()语句执行,导致ContextUtils中的contextMgr被清理,如下业务代码执行触发空指针异常:
ContextUtils.getInvocationContext().getLocalContext().put(CommonConstant.RETURN_CODE,0)

Vorherrschende Sprache
Java
Sterne
1.9k
Forks
813
Ø Merge
8 T. 23 Std.
Gemergte PRs (30 T.)
1

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus apache/servicecomb-java-chassis

Alle Issues in apache/servicecomb-java-chassis

Ähnliche Issues

Weitere Issues zu Java

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.