rabbitmq基本應用
先看下代碼,再來分析其基本的應用。
https://blog.csdn.net/zyz511919766/article/details/41946521
https://www.cnblogs.com/zcqdream/p/6220973.html
發送端:
#!usr/bin/env python # -*- coding: utf-8 -*- __author__ = 'pliu' import pika import sys import pika #远程连接时,需要通过用户和密码认证后,才能连上 credentials = pika.PlainCredentials('pliu', '123') #设置需要远程连接的IP、用户认证信息、端口,然后创建连接 connection = pika.BlockingConnection(pika.ConnectionParameters( '192.168.31.30', 5672, '/', credentials))
#创建信道 channel = connection.channel() # 声明队列 channel.queue_declare(queue='hello') # 发布消息 channel.basic_publish(exchange='', routing_key='hello', body='Hello World!') print(" [x] Sent 'Hello World!'")
#关闭信道 connection.close()
接收端:
#!usr/bin/env python # -*- coding: utf-8 -*- __author__ = 'pliu' import pika import sys
#创建连接 connection =pika.BlockingConnection(pika.ConnectionParameters( 'localhost'))
#创建信道 channel = connection.channel() #声明队列 channel.queue_declare(queue='hello') #创建回调函数
#ch包含该连接中信道数量以及连接的参数(ip、port等)
#method 包含交换器、队列、重发机制等
#properties 表示消息持久化机制,如果delivery_mode=2则持久化 def callback(ch, method, properties, body): print(" [x] Received %r" % body) #订阅消费者,一旦接受到消息,就会执行回调函数 channel.basic_consume(callback, queue='hello', no_ack=True) print(' [*] Waiting for messages. To exit press CTRL+C')
#开始消费 channel.start_consuming()
上面这种方法是最简单的一种模式,如果有多个消费者,生产者循环的将消息发给每一个消费者。
遠程鏈接rabbitmq server 的話,需要配置權限:
1 在rabbitmq server 上創建一個用戶 sudo rabbitmqctl add_user pliu 123
2 再給該用戶配置權限,允許從外面訪問 sudo rabbitmqctl set_permissions -p / pliu ".*" ".*" ".*"
上面是最简单的模式,一个生产者对多个消费者,生产者轮训的将消息发送给消费者。
看到这里了,我们先来搞清楚几个概念性的问题:
1 信道是生产消费者与rabbimt通信的渠道,生产者publish或是消费者subscribe一个队列都是通过信道来通信的。信道是建立在TCP连接上的虚拟连接,也就是说rabbitmq在一条TCP上建立成千上万个信道来达到多个线程处理,这个TCP连接被多个线程共享,每个线程对应一个信道,信道在rabbitmq上都有唯一的ID,保证了信道私有性,对应唯一的线程使用。由于创建多个TCP连接,会消耗系统,降低性能,所以只创建一个TCP。
2 队列
3 交换器的作用,类似于路由器的路由功能,服务器会将消息从交换器上分配到队列中
稍微复杂点的模式,生产者将消息,公平的分发到每一个消费者上(生产者同时会收到消息)
事事有回音
凡事有交代
件件有着落

浙公网安备 33010602011771号