Die Lösung für das Schließen der Bestellung ohne Zahlung aufgrund einer Zeitüberschreitung bei der Bestellung

Die Lösung für das Schließen der Bestellung ohne Zahlung aufgrund einer Zeitüberschreitung bei der Bestellung

Fügen Sie hier eine Bildbeschreibung ein

Angenommen, ein Kunde gibt eine Bestellung auf, hat sie aber nicht bezahlt, welche Art von Problemen werden auftreten? Denken wir an Jingdong Taobao Pinduoduo, denken wir darüber nach, wie Menschen in der Szene, in der alle einkaufen, einkaufen, und schauen wir uns dann unseren Artikel an ! ! !

Es können Probleme auftreten, wenn das Zahlungs-Timeout nicht geschlossen wird

Wenn das Zeitlimit für die Bestellungszahlung nicht geschlossen wird, kann dies zu folgenden Problemen führen:

  1. Probleme mit dem Lagerbestand : Wenn ein Artikel bestellt, aber nicht bezahlt wird, ist der Lagerbestand gesperrt und kann nicht von anderen Kunden gekauft werden. Dies kann zu Verwirrung in der Bestandsverwaltung führen und zu Unter- oder Überbeständen führen.

  2. Unordnung bei der Auftragsverwaltung : Nicht abgeschlossene überfällige Bestellungen können ein Auftragsverwaltungssystem überladen, da das System den Überblick über eine große Anzahl unbezahlter Bestellungen behalten muss, die sich im Laufe der Zeit anhäufen können.

  3. Verminderte Kundenerfahrung : Wenn ein Kunde nach dem Aufgeben einer Bestellung Schwierigkeiten beim Bezahlen hat und dann feststellt, dass die Bestellung lange Zeit gehalten wurde, ohne dass sie abgeschlossen wurde, kann es sein, dass er frustriert ist und eine negative Wahrnehmung Ihres Services hat, was sich auf die Kundenzufriedenheit und -treue auswirkt .

    Über die anderen verraten wir nicht mehr, wir stellen vor allem Fragen und lösen sie!

Zahlungszeitüberschreitung nicht geschlossen. Lösung – Standalone-Modus

Um im Standalone-Modus das Problem zu lösen, dass die Zahlungszeitüberschreitung nicht geschlossen wird, können verschiedene Technologien und Datenstrukturen verwendet werden, um die Zahlungsfrist der Bestellung zu verwalten und die nicht bezahlte Überstundenbestellung automatisch zu schließen. Hier sind einige Lösungen einschließlich Verzögerungswarteschlangen und Takträdern in Java:

  1. Verzögerungswarteschlange (Verzögerungswarteschlange) :
    Fügen Sie hier eine Bildbeschreibung ein

    Eine Verzögerungswarteschlange ist eine Prioritätswarteschlange, in der Elemente eine Verzögerungszeit haben. In Java können Sie java.util.concurrent.DelayQueueeine Verzögerungswarteschlange implementieren. Sie können die Bestellung in die Verzögerungswarteschlange stellen und die Zahlungsfrist der Bestellung als Verzögerungszeit festlegen. Ein Hintergrundthread überprüft regelmäßig die Elemente in der Warteschlange. Sobald die Verzögerungszeit für das Element erreicht ist, wird es aus der Warteschlange entnommen und entsprechend verarbeitet, z. B. durch Schließen der Bestellung.

  2. Uhrenrad :
    Fügen Sie hier eine Bildbeschreibung ein

    Das Uhrenrad ist ein auf Timing-Triggern basierender Zeitverwaltungsmechanismus, der Timing-Aufgaben in einer eigenständigen Umgebung bewältigen kann. In Java können Sie eine Drittanbieterbibliothek wie „HashedWheelTimer“ verwenden, um ein Uhrenrad zu implementieren. Sie können Bestellungen zum Clock Wheel hinzufügen, die Annahmeschlusszeit für die Auftragszahlung festlegen und wenn das Clock Wheel ausgelöst wird, kann der Überstundenauftrag bearbeitet werden.

  3. Zeitgesteuerter Aufgabenplaner :
    Der zeitgesteuerte Aufgabenplaner in Java, z. B. java.util.Timerund java.util.concurrent.ScheduledExecutorService, kann zum Implementieren zeitgesteuerter Aufgaben verwendet werden. Sie können eine geplante Aufgabe erstellen, den Auslösezeitpunkt der Aufgabe entsprechend der Zahlungsfrist der Bestellung festlegen, den Bestellstatus überprüfen und die überfällige, unbezahlte Bestellung schließen, wenn die Aufgabe ausgelöst wird.

  4. Datenbank-Timing-Bereinigung :
    Eine andere Methode besteht darin, die Zahlungsfrist und den Status der Bestellung in der Datenbank zu speichern und dann eine geplante Aufgabe zu verwenden, um die Datenbank abzufragen, um Bestellungen zu finden und zu schließen, die nach der Zeitüberschreitung nicht bezahlt wurden. Sie können den geplanten Aufgabenplaner oder @ScheduledAnmerkungen im Spring-Framework verwenden, um diesen geplanten Reinigungsprozess zu implementieren.

Zahlungszeitüberschreitung Nicht geschlossene Lösung – Verteilte Bereitstellung

In einer verteilten Bereitstellungsumgebung erfordert die Lösung des Problems der Zeitüberschreitung bei nicht geschlossenen Zahlungen eine komplexere Lösung. Im Folgenden sind einige Lösungen aufgeführt, einschließlich der Anwendung von Scan-Table-Round-Robin, verzögertem Löschen, Nachrichtenwarteschlange und Redis, die mit dem oben genannten Standalone-Modus verglichen werden können:

  1. Sweep-Tisch-Round-Robin :
    Fügen Sie hier eine Bildbeschreibung ein

    In einer verteilten Umgebung können Sie geplante Aufgaben verwenden, um die Bestelltabelle in der Datenbank zu scannen, um die Bestellungen herauszufinden, die im Laufe der Zeit nicht bezahlt wurden, und entsprechende Verarbeitungen durchzuführen, z. B. das Schließen der Bestellung. Dieser Ansatz ist für relativ einfache Systeme in Ordnung, kann jedoch die Datenbank stark belasten, insbesondere wenn das Auftragsvolumen hoch ist. Die Leistung kann durch angemessenes Paging-Abfrage- und Indexdesign optimiert werden.

  2. Faules Löschen :
    Fügen Sie hier eine Bildbeschreibung ein

    Lazy Deletion bedeutet, dass beim Erstellen einer Bestellung die Zahlungsfrist der Bestellung aufgezeichnet wird und im Zahlungssystem eine geplante Aufgabe festgelegt wird, um zu überprüfen, ob diese Bestellungen abgelaufen sind. Erfolgt die Zahlung nicht innerhalb des Timeouts, wird der Abschlussvorgang durchgeführt. Diese Methode kann die Belastung der Datenbank verringern, muss jedoch die Genauigkeit und Stabilität der geplanten Aufgaben gewährleisten.

  3. Nachrichtenwarteschlange :
    Fügen Sie hier eine Bildbeschreibung ein

    Durch die Verwendung von Nachrichtenwarteschlangen (wie Kafka, RabbitMQ usw.) kann das Zahlungszeitüberschreitungsproblem in einer verteilten Umgebung effektiv gelöst werden. Wenn eine Bestellung erstellt wird, werden die Bestellinformationen an die Nachrichtenwarteschlange gesendet und die Zahlungsfrist für die Bestellung festgelegt. Das Zahlungssystem abonniert die Nachrichtenwarteschlange. Sobald das Zeitlimit überschritten ist, empfängt das Zahlungssystem die Nachricht und führt einen Vorgang zum Herunterfahren durch. Mit dieser Methode können Entkopplung und asynchrone Verarbeitung realisiert und die Skalierbarkeit und Stabilität des Systems verbessert werden.

  4. Redis-Implementierung :
    Fügen Sie hier eine Bildbeschreibung ein

    Redis ist eine Hochleistungsspeicherdatenbank, mit der Probleme mit Zahlungszeitüberschreitungen gelöst werden können. Sie können die Bestellinformationen in Redis speichern und die Ablaufzeit von Redis nutzen, um die Zahlungsfrist der Bestellung zu simulieren. Sobald die Bestellung überfällig und unbezahlt ist, löscht Redis automatisch die Bestellinformationen und Sie können eine geplante Aufgabe festlegen, um die gelöschte Bestellung zu überprüfen und den Abschlussvorgang auszuführen. Diese Methode kann die Belastung der Datenbank verringern, Sie müssen jedoch auf die Datenkonsistenz und die Speicherbegrenzung von Redis achten.

  5. Verteilte Zeitsteuerungsaufgaben :
    In einer verteilten Umgebung können Sie ein Framework für verteilte Zeitsteuerungsaufgaben (z. B. Quartz, Elastic Job usw.) verwenden, um den Abschlussvorgang von Überstundenaufträgen zu verwalten. Jeder Knoten kann geplante Aufgaben ausführen, es muss jedoch die Einzigartigkeit und Konsistenz der Aufgaben sichergestellt werden, um wiederholte Abschlussbefehle oder fehlende Abschlussbefehle zu vermeiden.

Überblick

Für welche Option Sie sich auch entscheiden, es gibt ein paar Dinge, die Sie beachten sollten:

  • Thread-Sicherheit : Stellen Sie sicher, dass die Thread-Sicherheit gewahrt bleibt, wenn Sie diese Datenstrukturen in einer Multithread-Umgebung verwenden.
  • Datenkonsistenz : Stellen Sie sicher, dass die Änderung des Auftragsstatus mit dem Timeout-Abschluss übereinstimmt, um wiederholte oder verpasste Abschlüsse zu vermeiden.
  • Leistung und Latenz : Wählen Sie eine geeignete Datenstruktur und Timing-Strategie, um ein Gleichgewicht zwischen Leistung und Echtzeit zu finden.

Passen Sie sich der Situation an und treffen Sie eine Entscheidung entsprechend den Bedürfnissen aller. Es gibt verschiedene Lösungen, also lernen und nutzen Sie! ! !

Supongo que te gusta

Origin blog.csdn.net/weixin_53742691/article/details/132240426
Recomendado
Clasificación