这个玩意儿在实际生产环境中可以深刻学习,比如OpenStack集群,并发量也有,真实环境。
但假如是单机,那...就玩玩吧,学习一下基本过程。Here we go!
1、安装单机集群模式
(单机模式就是玩玩,什么都做不了):
前面已经记录过了,很简单
https://blog.csdn.net/cd_yourheart/article/details/108258317
2、熟悉一下Web界面
[root@compute ~]# rabbitmqctl list_queues
Listing queues
# 这里什么队列都没有
[root@compute ~]# rabbitmqctl list_exchanges
Listing exchanges
amq.direct direct
amq.headers headers
amq.rabbitmq.trace topic
direct
amq.topic topic
amq.match headers
amq.fanout fanout
amq.rabbitmq.log topic
# 这里是交换机
上面是在终端查看队列和交换机,也可以在Web界面查看,比如,下面是交换机
3、发布一条消息
编辑文件send.py如下
#!/usr/bin/env python
import pika
connection = pika.BlockingConnection(
pika.ConnectionParameters(host='localhost'))
channel = connection.channel()
channel.queue_declare(queue='hello')
# 特别注意:当未定义exchange时,routing_key需和queue的值保持一致
channel.basic_publish(exchange='', routing_key='hello', body='Hello World!RabbitMQ,lzb.')
print(" [x] Sent 'Hello World!'")
connection.close()
执行一下send.py
可以看到有一个消息已经ready了,但它此时并没有被消费,下图Queues显示1,因为channel.queue_declare(queue='hello')这句就是声明一个名为hello的队列
点进Queues看一下,可以发现显示的就是发送的名称为hello的队列
查看一下所有的队列list如下:
[root@compute ~]# rabbitmqctl list_queues
Listing queues
hello 1
我们修改一下send.py中的队列名称为yueyue,然后再发送,可以看到有两个Ready队列了
#!/usr/bin/env python
import pika
connection = pika.BlockingConnection(
pika.ConnectionParameters(host='localhost'))
channel = connection.channel()
channel.queue_declare(queue='yueyue')
channel.basic_publish(exchange='', routing_key='hello', body='Hello World!RabbitMQ,lzb.')
print(" [x] Sent 'Hello World!'")
connection.close()
下图所示,两个队列名字不同,在同一个节点
再次在终端查看一下当前存在的队列列表,多了yueyue队列
[root@compute ~]# rabbitmqctl list_queues
Listing queues
yueyue 0
hello 2
但是从上面看到,第二次发送的yueyue,没有携带消息?hello两条消息?
这是怎么回事?可能是第二次修改的时候只修改了queue,没有改routing_key?
验证一下,这次把routing_key也改为yueyue,试一下
可以看到,Ready增到3,Queues仍为2,因为只是增加了一条消息,没有新增队列
[root@compute ~]# rabbitmqctl list_queues
Listing queues
yueyue 1
hello 2
现在就对了,就是因为,第二次的时候虽然新增了yueyue队列,但是消息绑定的routing_key却是hello队列
现在再测试一次,将routing_key改为yueyue2,然后执行
可以看到,有消息发布,0.40/s,但是Ready没有增加,说明什么?说明没有队列绑定到yueyue2,没有消费者,这里还不清楚是怎么处理的,是不是直接删除,还是持久化,后面再回头研究,Flag!
我又试了一下这样
结果是队列增加了一个yueyue3,但是消息还是没有增加,应该是被删除了
又试了一下这样,注释掉创建队列那行,然后用了yueyue*,也不行
再试一次
不行,不写routing_key的话,也是找不到
那暂时也就是先这样了,现在有四个队列,两个空的
现在把两个空队列删除,点击对应name,下拉找到删除即可
好,刚好在下班之前写好这些。明天继续!奥里给!