Kann jemand erklären, wie dieses Attribut self.keep_alive funktioniert und in ServiceBusSender angewendet wird?Python

Python-Programme
Guest
 Kann jemand erklären, wie dieses Attribut self.keep_alive funktioniert und in ServiceBusSender angewendet wird?

Post by Guest »

Ich versuche, die ServiceBusSender-Verbindung länger als 5 Minuten aufrechtzuerhalten, ohne den Absender anzupingen.
Grundsätzlich versuche ich, die Lebensdauer meiner ServiceBusSender-Verbindung zu verlängern. Im Moment wende ich die Ping-Technik an:

Code: Select all

if time.time()-last_ping_time >= 200:
logging.debug(f"trying to ping service bus {QUEUE_DATA['WorkersName']}")
trash_message = ServiceBusMessage(b"")
trash_message.application_properties = {b"SiteEnv":b"trash"}
sender.send_messages(trash_message)
last_ping_time=time.time()
logging.debug("pinged service bus")
Aber ich möchte es loswerden und suche nur nach Attributen, die ich in ServiceBusSender übergeben kann, damit die Verbindung länger als 5 Minuten bestehen bleibt. Kann also jemand erklären, ob die Übergabe des keep_alive-Attributs an ServiceBusSender (wird in die Klassenkonfiguration mit diesem Attribut eintauchen: self.keep_alive = kwargs.get("keep_alive", 30)) und die Festlegung auf beispielsweise 1 Stunde zur Lösung beitragen wird? Mein Problem?
UPD: Im Laufe des Tages habe ich verstanden, dass keep_alive eine Art Ping-Mechanismus unter der Haube ist, aber das Problem bleibt bestehen: Kann ich es so verwenden? und meinen Ping-Mechanismus entfernen, damit die Verbindung nicht unterbrochen wird?

Code: Select all

sender=ServiceBusSender._from_connection_string(topic_name="SOME_TOPIC_NAME",
conn_str="SOME_CONNECTION_STRING",
transport_type=TransportType.AmqpOverWebsocket,
keep_alive=200)
UPD 2: keep_alive wirkt sich nur auf AMQP und nicht auf TCP aus...
UPD 3: Ich habe die Protokolle meiner App untersucht. Wie Sie sehen können, wurden Empfänger und Absender initiiert. Basierend auf der Zeit der Protokolle stellt sich die Frage: Warum könnten Sender und Empfänger lange Zeit inaktiv sein, bevor die ersten Anfragen gestellt werden, aber nach der ersten Anfrage wird die Verbindung nach 15 Minuten mit dem ConnectionResetError geschlossen? Wie kann ich die Verbindung zwischen Sender und Empfänger über die gesamte Laufzeit des Programms aufrechterhalten, ohne es mit Nachrichten anzupingen?

Code: Select all

2025-01-02 22:07:20,523 - DEBUG - got bool_launch_service_bus True so launching service bus
2025-01-02 22:07:20,523 - DEBUG - Launch time: 02/01/2025 22:07:20
2025-01-02 22:07:21,388 - INFO - RECEIVER: initiation was successful
2025-01-02 22:07:21,400 - INFO - SENDER: initiation was successful
2025-01-02 22:34:30,996 - DEBUG - Received request
2025-01-02 22:34:30,997 - DEBUG - MessageId: id - CorrelationId id:
2025-01-02 22:34:30,997 - DEBUG - Trying to call for CorrelationId: id
2025-01-02 22:34:30,997 - INFO - executing func()
2025-01-02 22:34:31,204 - DEBUG - Finished with CorrelationId: id time: 0.2070004940032959
2025-01-02 22:34:31,694 - DEBUG - full response creation time for id: 0.6970000267028809
2025-01-02 22:34:32,626 - INFO - finished id
2025-01-02 22:35:30,591 - INFO - RECEIVER: message with id: id complete by distributive service
2025-01-02 22:50:38,572 - DEBUG - Transport read failed: ConnectionResetError(10054, 'An existing connection was forcibly closed by the remote host', None, 10054, None)

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post