Thread queue in Python enables communication between different threads, and process queue enables Python to communicate between different processes
RABBITMQ Message Queuing acts as a middleman, enabling communication between independent processes, and communicating in different programming languages
After the installation of Windows environment is completed RABBITMQ, enter the cmd command services.msc, then open the RABBITMQ service in the service, use RABBITMQ to install the Erlang locale
Installation of RABBITMQ in Ubuntu environment
[Email protected]:~$ sudo apt install rabbitmq-server[email protected]:~$ sudo rabbitmq-server start
RABBITMQ The default listening port is 5672
Send Message End
#-*-Coding:utf-8-*-__author__ = "MuT6 sch01ar" Import pikaconnection = Pika. Blockingconnection (Pika. Connectionparameters (' 127.0.0.1 ') # establishes a socketchannel = Connection.channel () # declares a pipe, Communicate in the pipeline Channel.queue_declare (queue= ' Q ') # Declare a name Q for Queuechannel.basic_publish in the pipeline ( # Send message exchange= ' , routing_key= ' Q ', # queue name body= ' Hello world! ', # message to send ) print (' data sent complete ') Connection.close () # Close Queue
Receive Message End
#-*-Coding:utf-8-*-__author__ = "MuT6 sch01ar" Import pikaconnection = Pika. Blockingconnection (Pika. Connectionparameters (' 127.0.0.1 ')) Channel = Connection.channel () # declares a pipe, communicates in the pipeline Channel.queue_declare (queue = ' Q ') # Multiple declaration of a queue to prevent when this program starts before sending the message end times wrong def callback (ch, method, properties, body): Print (ch, method, properties , body) # ch is the memory address of the pipe, method is some information about the queue, the body is the message content print (' Received data: ', body) channel.basic_consume ( # Basic_consume start consuming message callback, # Call the callback function to process the message queue= ' Q ' If the message is received , # receive the message from the Q queue no_ack=true , # does not confirm that the message is finished processing, default to False ) print (' Start waiting for message ') channel.start_consuming () # starts receiving messages, and if no message is stuck here, until there is a message
Open three Receive Message end
Send message end send a message, first open Receive message end first Receive message
Send the message end to send a message, the receiving message is the second open Receive message end, then the third receive message end, and then the first
RABBITMQ will poll for messages
RABBITMQ in the skin directory under the installation directory Rabbitmqctl.bat can view the current queue situation
Rabbitmqctl.bat list_queues
Receive message-side processing messages with the server-side acknowledgment of message processing to prevent the receiving message end when processing messages suddenly cause the message to be lost
Send Message End
#-*-Coding:utf-8-*-__author__ = "MuT6 sch01ar" Import pikaconnection = Pika. Blockingconnection (Pika. Connectionparameters (' 127.0.0.1 ') # establishes a socketchannel = Connection.channel () # declares a pipe, Communicate in the pipeline Channel.queue_declare (queue= ' Q ') # Declare a name Q for Queuechannel.basic_publish in the pipeline ( # Send message exchange= ' , routing_key= ' Q ', # queue name body= ' Hello world! ', # message to send ) print (' data sent complete ') Connection.close () # Close Queue
Receive Message End
#-*-Coding:utf-8-*-__author__ = "MuT6 sch01ar" import pikaimport timeconnection = Pika. Blockingconnection (Pika. Connectionparameters (' 127.0.0.1 ')) Channel = Connection.channel () # declares a pipe, communicates in the pipeline Channel.queue_declare (queue = ' Q ') # Multiple declaration of a queue to prevent when this program starts first times than the producer program Wrong DEF callback (ch, method, properties, body): Print (ch, method, properties , body) # ch is the memory address of the pipe, method is some information about the queue, the body is the message content Time.sleep (() print (' Received data: ', body) Ch.basic _ack (Delivery_tag=method.delivery_tag) # with the server-side acknowledgment message has been processed to finish print (' Message processing complete ') Channel.basic_consume ( # Basic_consume starts consuming message callback, # Call the callback function to process the message queue= ' Q ', # receive the message from the Q queue If the message is received ) print ( ' Start waiting for message ') channel.start_consuming () # starts receiving messages, and if no message is stuck here, until there is a message
Open 3 message receiving end, 1 send message end
Open 3 Receive Message end, waiting to receive message
Send message side send message, first start Receive message end Receive Message
Then turn off the first receive message end, and the second initiated receive message side receives the message
Then the third, and then the first after the third one, unless the message processing is complete
Message persistence
If the message is received properly when the server side (RabbitMQ) is broken, the receiving end of the message will be error, the message will be lost
If you do not want the server side to suddenly disconnect and cause the message to be lost, you can persist the message
Send Message End
#-*-Coding:utf-8-*-__author__ = "MuT6 sch01ar" Import pikaconnection = Pika. Blockingconnection (Pika. Connectionparameters (' 127.0.0.1 ') # establishes a socketchannel = Connection.channel () # declares a pipe, Communicate in the pipeline Channel.queue_declare (queue= ' Q ', durable=true) # in the pipeline declare a name Q for queue,durable for queue persistence channel.basic_publish ( # Send Message exchange= ', routing_key= ' Q ', # queue name body= ' Hello world! ', # message to send Properties=pika. Basicproperties (delivery_mode=2) # make the message persist ) print (' Data send Complete ') connection.close () # Close Queue
Receive Message End
#-*-Coding:utf-8-*-__author__ = "MuT6 sch01ar" import pikaimport timeconnection = Pika. Blockingconnection (Pika. Connectionparameters (' 127.0.0.1 ')) Channel = Connection.channel () # declares a pipe, communicates in the pipeline Channel.queue_declare (queue = ' Q ', durable=true) # Durable for queue Persistence def callback (ch, method, properties, body): Print (ch, method, properties, body) # ch is the memory address of the pipe, the method is some information about the queue, body is the message content Time.sleep (() print (' Received data: ', body) Ch.basic_ ACK (Delivery_tag=method.delivery_tag) # with the server-side acknowledgment message has been processed to finish print (' Message processing completed ') Channel.basic_consume ( # Basic_consume starts consuming message callback, # Call the callback function to process the message queue= ' Q ', # receive the message from the Q queue If the message is received ) print ( ' Start waiting for message ') channel.start_consuming () # starts receiving messages, and if no message is stuck here, until there is a message
This way, even if the server is disconnected, the queues and messages are
If the queue and message are not persisted, the queue and message will not be end multiplicity after the server is restarted.
PYTHON-RABBITMQ Message Queuing