Wir haben Code wie diesen, der die API im Rahmen des Abfragemechanismus dreimal wiederholt. Falls es nicht abgeschlossen wird, wird ein Fall erstellt, indem eine andere API aufgerufen wird. Was passiert, ist, dass ich in den Protokollen zwei Threads sehe – den Hauptthread und den Thread-Pool, der neue Fälle erstellt. Daher wird die Tracking-ID aus dem Thread-Pool thehead auf null gesetzt und somit doppelte Threads erstellt.
Hier ist ein relevanter Teil des Codes. LLM schlägt mir vor, eine Zeitüberschreitung unter dem Abbruch-Aufruf hinzuzufügen, aber eine andere API, bei der es keine Zeitüberschreitung gibt, ist damit konfrontiert. Hauptthread
// Add a small delay to ensure the polling thread has stopped
try {
Thread.sleep(100);
} catch (InterruptedException ie) {
Thread.currentThread().interrupt();
}
for (int i = 0; i < maxAttemptForCeaseLine; i++) {
// Check if thread has been interrupted/cancelled
if (Thread.currentThread().isInterrupted()) {
log.info("Polling cancelled for trackingId: {}", trackingId);
return null;
}
Wir haben Code wie diesen, der die API im Rahmen des Abfragemechanismus dreimal wiederholt. Falls es nicht abgeschlossen wird, wird ein Fall erstellt, indem eine andere API aufgerufen wird. Was passiert, ist, dass ich in den Protokollen zwei Threads sehe – den Hauptthread und den Thread-Pool, der neue Fälle erstellt. Daher wird die Tracking-ID aus dem Thread-Pool thehead auf null gesetzt und somit doppelte Threads erstellt. Hier ist ein relevanter Teil des Codes. LLM schlägt mir vor, eine Zeitüberschreitung unter dem Abbruch-Aufruf hinzuzufügen, aber eine andere API, bei der es keine Zeitüberschreitung gibt, ist damit konfrontiert. [b]Hauptthread[/b] [code]if (entity != null && entity.getId() != null) { Future future = null; try { log.info("Waiting for polling result for id : {} trackingId: {}", entity.getId(), trackingId); OrderRequest finalEntity = entity; String finalProductOrderId = productOrderId; Callable task = () -> checkGetStatusAPIForCeaseLine(customerId, finalProductOrderId, routeEnv, sc, trackingId, finalEntity, req); future = executor.submit(task); CeaseLineResponse result = future.get(futureTimeoutSecondsForCeaseLine, TimeUnit.SECONDS); return result; } catch (TimeoutException te) { log.warn("Polling did not complete in time for id: {} trackingId: {}", entity.getId(), trackingId); future.cancel(true); return handleAmaCaseForCeaseLineTimeout(customerId, entity, productOrderId, req, httpHeaders, trackingId); } catch (Exception e) { log.error("Error while waiting for poll result", e); return CeaseLineResponse.builder() .httpCode(500) .message("FAILED") .orderNo(entity.getBillerOrderNo()) .orderActionId(entity.getBillerOrderActionNo()) .build(); } } [/code] Executor-Aufruf [code]@Transactional public CeaseLineResponse checkGetStatusAPIForCeaseLine(String customerId, String productOrderId, String routeEnv, String sc, String trackingId, OrderRequest entity, CreateAndSubmitSuspendResumeCeaseOrderRequest req) {
entity.setRejectReason("Order created but still processing - case Number: " + caseNumber); entity.setStatus(OrderStatus.SUBMITTED); final OrderRequest save = ceaseOrderRepo.save(entity); log.info("SUBMITTED (polling finished) for cease line. Updated row: {} trackingId: {}", save, entity.getTrackingId());
return buildAcceptedOrderResponse202(entity.getBillerOrderNo(), entity.getBillerOrderActionNo(), "Order created but still processing", caseNumber); } [/code] Dies geschieht in der Anfrage und beim Erstellen eines neuen Falls mithilfe der API [code]u_correlation_id\":\"null:9001962483:9001962484[/code] Dies ist, was LLM mir vorgeschlagen hat, nach dem Abbruch-Aufruf hinzuzufügen: [code]// Add a small delay to ensure the polling thread has stopped try { Thread.sleep(100); } catch (InterruptedException ie) { Thread.currentThread().interrupt(); } [/code] und eine unterbrochene Prüfung hier" [code]for (int i = 0; i < maxAttemptForCeaseLine; i++) { // Check if thread has been interrupted/cancelled if (Thread.currentThread().isInterrupted()) { log.info("Polling cancelled for trackingId: {}", trackingId); return null; } [/code] Was läuft hier schief? Irgendwelche Gedanken?
Wir haben Code wie diesen, der die API im Rahmen des Abfragemechanismus dreimal wiederholt. Falls es nicht abgeschlossen wird, wird ein Fall erstellt, indem eine andere API aufgerufen wird. Was...
Ich möchte, dass der Django-Entwicklungsserver etwas tut, bevor er ausgeführt wird. Dazu habe ich eine neue App erstellt, sie oben zu INSTALLED_APPS hinzugefügt und dann in der App eine Datei...
traditionell war es nicht möglich, das volatile Schlüsselwort für Eigenschaften in C# zu verwenden. Mit anderen Worten, dies war nicht möglich:
// CS0106: The modifier 'volatile' is not valid for...
Ich arbeite an SharePoint 2016. Wenn ein Webdienst von Dynamics CRM aufgerufen wird (stellen Sie sich das durch einen Klick auf eine Schaltfläche vor), wird eine neue SharePoint-Site unter einer...
Ich habe versucht, Spracherkennung und Character.AI zu züchten (weil es eine schöne kostenlose API hat). Wenn ich versuche, eine Nachricht zu senden, bricht die Verbindung plötzlich ab.
Ich habe...