рдкреНрд░рд┐рдп рд╕рд╛рдерд┐рдпреЛ,
рд▓рдЧрд╛рддрд╛рд░ рд╕рддреНрд░ рдХреЗ рд╕рд╛рде рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдЖрдИрдУрдЯреА рдПрдордХреНрдпреВрдЯреАрдЯреА рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдмреНрд░реЛрдХрд░ рдХрдиреЗрдХреНрд╢рди рдЕрдиреБрд░реЛрдз рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ 'рд╕реЗрд╢рди_рдкреНрд░реЗрдЬреЗрдВрдЯ = рдЯреНрд░реВ' рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ 'рдХреНрд▓реАрди_рд╕реЗрд╢рди = рдЧрд▓рдд' рд╣реЛрддрд╛ рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ AWS рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ 60 рдорд┐рдирдЯ рдХреЗ рднреАрддрд░ рдлрд┐рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИ (рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдпрд╣ 5 рдорд┐рдирдЯ рд╕реЗ рдХрдо рдерд╛)
рдореБрджреНрджрд╛ :
рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдпрджрд┐ 'session_present = True' рд╣реИ рддреЛ рдмреНрд░реЛрдХрд░ рдкрд┐рдЫрд▓реЗ рд╕рддреНрд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рддрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рд╡рд┐рд╖рдпреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ рд╡рд┐рд╖рдп рдХреА рд╕рджрд╕реНрдпрддрд╛ рдХреЗ рдЪрд░рдг рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реВрдВ рддреЛ рдХреЛрдИ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
рдХреНрдпрд╛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ? рдХреНрдпрд╛ рдореБрдЭреЗ 'session_present = True' рдХреЗ рдмрд╛рд╡рдЬреВрдж рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?
рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ aws-iot-рдбрд┐рд╡рд╛рдЗрд╕-sdk-рдЕрдЬрдЧрд░-v2
def conenct_mqtt(mqtt_connection):
connect_future = mqtt_connection.connect()
excep_count = 0
while True:
print(f"[{datetime.now()}]Connecting......")
try:
# Future.result() waits until a result is available
result = connect_future.result(timeout=30)
print(f"Connected! session persistent = {result['session_present']}")
return result['session_present']
except Exception as exc:
print(f"[{datetime.now()}]Error while connecting {exc}")
time.sleep(10)
excep_count=excep_count+1
if excep_count > 5 :
print(f"[{datetime.now()}]Exiting Script.....")
quit()
рдирдорд╕реНрддреЗ,
рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рд▓рдЧрд╛рддрд╛рд░ рд╕рддреНрд░ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
pubsub.py рдирдореВрдиреЗ рдореЗрдВ, рдпрджрд┐ рдХрдиреЗрдХреНрд╢рди рдЦреЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ mqtt_conneciton рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП _Connection_ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдХреЙрд▓рдмреИрдХ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдХрдиреЗрдХреНрд╢рди рдкрд░рд┐рдгрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ 'session_present = True' рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ _Connection_ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдХреЙрд▓рдмреИрдХ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП on_message рдкрд░ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдлрд┐рд░ рдЖрдк рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрджреЗрд╢ рдХреЛ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕реЗрдЯ рдХрд┐рдП рдЧрдП рдХреЙрд▓рдмреИрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╢реБрдХреНрд░рд┐рдпрд╛!
рдирдорд╕реНрддреЗ @TingDaoK
рдЖрдкрдХреА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рд▓реЗрдХрд┐рди рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдлрд┐рд░ рднреА, рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реВрдБред
рдХреНрдпрд╛ рдЖрдк рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреГрдкрдпрд╛ рдирд┐рдореНрди рдХреЛрдб рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ?
рдореЗрд░реЗ рдХрджрдо:
рд╕рджрд╕реНрдпрддрд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдПрдБ
рдкреНрд░рдХрд╛рд╢рд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдПрдБ
// рд╕рджрд╕реНрдпрддрд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рдкреНрд░рд╛рдкреНрдд рд╕рдВрджреЗрд╢
рдЕрдм рджреЛрдиреЛрдВ рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВ
рдПрдХ рдорд┐рдирдЯ рдпрд╛ рдЕрдзрд┐рдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ
рд╕рджрд╕реНрдпрддрд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдПрдБ
// рдХрдиреЗрдХреНрд╢рди рднрд╡рд┐рд╖реНрдп рдХрд╛ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ .... рдкрд░рд┐рдгрд╛рдо ['session_present'] = рд╕рдЪред рдЗрд╕рд▓рд┐рдП рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рд▓реВрдк рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдкреНрд░рдХрд╛рд╢рд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдПрдБ
// рдореБрджреНрджрд╛: рд╕рджрд╕реНрдпрддрд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рдХреЛрдИ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реБрдЖ
def conenct_mqtt(mqtt_connection):
connect_future = mqtt_connection.connect()
excep_count = 0
while True:
print(f"[{datetime.now()}]Connecting......")
try:
# Future.result() waits until a result is available
result = connect_future.result(timeout=30)
print(f"[{datetime.now()}]Connected! session persistent = {result['session_present']}")
return result['session_present']
except Exception as exc:
print(f"[{datetime.now()}]Error while connecting {exc}")
time.sleep(10)
excep_count=excep_count+1
if excep_count > 5 :
print(f"[{datetime.now()}]Exiting Script.....")
quit()
if __name__ == '__main__':
# Spin up resources
event_loop_group = io.EventLoopGroup(1)
host_resolver = io.DefaultHostResolver(event_loop_group)
client_bootstrap = io.ClientBootstrap(event_loop_group, host_resolver)
mqtt_connection = mqtt_connection_builder.mtls_from_path(
endpoint=host,
cert_filepath=certificatePath,
pri_key_filepath=privateKeyPath,
client_bootstrap=client_bootstrap,
ca_filepath=rootCAPath,
on_connection_interrupted=on_connection_interrupted,
on_connection_resumed=on_connection_resumed,
client_id=clientId,
clean_session=False, # set as persistent sessions
keep_alive_secs=60, # 1 min as any data communication or PINGREQ . x1.5 to detect disconenct
reconnect_min_timeout_secs=2,
reconnect_max_timeout_secs =300,
ping_timeout_ms = 10000, # wait for 6 secs for ping response
)
print(f"[{datetime.now()}]Connecting with client ID '{clientId}'...")
is_session_persistent = conenct_mqtt(mqtt_connection)
# subscribe to topics only if previous session was lost
if not is_session_persistent:
topic_index = 0
excep_count = 0
while topic_index < 2:
# Subscribe
topic = topic_list[topic_index]
print(f"[{datetime.now()}]Subscribing to topic '{topic}'...")
subscribe_future, packet_id = mqtt_connection.subscribe(
topic=topic,
qos=mqtt.QoS.AT_LEAST_ONCE,
callback=on_message_received)
try:
subscribe_result = subscribe_future.result()
print(f"[{datetime.now()}]Subscribed with {str(subscribe_result['qos'])}")
topic_index+=1
excep_count = 0
except Exception as exc:
print(f"Error:Subscribe: {exc}")
excep_count+=1
if excep_count > 3 :
print(f"[{datetime.now()}]Exiting Script.....")
quit()
time.sleep(10)
else:
print("-----------Session is Persistent---------")
# Wait for all messages to be received.
# This waits forever if count was set to 0.
if max_count != 0 and not received_all_event.is_set():
print("Waiting for all messages to be received...")
received_all_event.wait()
print("{} message(s) received.".format(received_count))
рдирдорд╕реНрддреЗ @GauravPatni
рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:
if not is_session_persistent:
XXX
else:
mqtt_connection.on_message(on_message_received) #register your callback
print("-----------Session is Persistent---------")
рдЖрдкрдХрд╛ рдХрдиреЗрдХреНрд╢рди рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЕрднреА рднреА on_message рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП _Connection_ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдЕрдкрдирд╛ рдХреЙрд▓рдмреИрдХ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдзрдиреНрдпрд╡рд╛рдж
рдирдорд╕реНрддреЗ @GauravPatni
рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:
if not is_session_persistent: XXX else: mqtt_connection.on_message(on_message_received) #register your callback print("-----------Session is Persistent---------")
рдЖрдкрдХрд╛ рдХрдиреЗрдХреНрд╢рди рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЕрднреА рднреА on_message рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП _Connection_ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдЕрдкрдирд╛ рдХреЙрд▓рдмреИрдХ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдзрдиреНрдпрд╡рд╛рдж @TingDaoK
рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж
mqtt_connection.on_message(on_message_received) #рдЕрдкрдирд╛ рдХреЙрд▓рдмреИрдХ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░реЗрдВ
рдорд╕рд▓рд╛ рд╣рд▓ рд╣реЛ рдЧрдпрд╛ !!
рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рддреНрд╡рд░рд┐рдд рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж !!
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдирдорд╕реНрддреЗ @GauravPatni
рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:
рдЖрдкрдХрд╛ рдХрдиреЗрдХреНрд╢рди рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЕрднреА рднреА on_message рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП _Connection_ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдЕрдкрдирд╛ рдХреЙрд▓рдмреИрдХ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред