1.使用消息队列
几种模式
从最简单的开始
添加完新的虚拟机可以看到,当前admin用户的主机访问权限中新增的刚添加的环境
1.1查看交换机
交换机列表中自动新增了刚创建好的虚拟主机相关的预设交换机。一共7个。前面两个 direct类型的交换机,一个是(AMQP default)还有一个是amq.direct,它们都是直连式的交换机。
先看第一个交换机:
第一个交换机是所有虚拟主机都会自带的一个默认交换机,并且此交换机不可删除,此交换机默认绑定到所有的消息队列,如果是通过默认交换机发送消息,那么会根据消息的 routingkey(相当于网络中的ip) (之后我们发消息都会指定)决定发送给哪个同名的消息队列,同时也不能显示地将消息队列绑定或解绑到此交换机。
我们可以看到,详细信息中,当前交换机特性是持久化(druable:true)的,也就是说就算机器重启,那么此交换机也会保留,如果不是持久化,那么旦重启就会消失。实际上我们在列表中看到 D 的字样,就表示此交换机是持久化的,包含一会我们要讲解的消息队列列表也是这样,所有自动生成的交换机都是持久化的。
然后查看第二个交换机,这个交换机是一个普通的直连交换机:
这个交换机和我们刚刚介绍的默认交换机类型一致,并且也是持久化的,但是我们可以看到它是具有绑定关系的,如果没有指定的消息队列绑定到此交换机上,那么这个交换机无法正常将信息存放到指定的消息队列中,也是根据 routingkey 寻找消息队列(但是可以自定义)
1.2 查看消息队列
1.2.1 创建队列
可以看到下方图中没有任何的消息队列,可以尝试在下方添加一个新的消息队列
第一行,选择刚刚创建好的虚拟主机,在这个虚拟主机下创建此消息队列,接着我们将其类型定义为 CLassic 类型,也就是经典类型(其他类型我们会在后面逐步介绍)名称随便起一个,然后持久化我们选择 Transient 暂时的(当然也可以持久化,看你自己)自动删除我们选择 No需要至少有一个消费者连接到这个队列,之后,一旦所有与这个队列连接的消费者都断开时,就会自动删除此队列)最下面的参数我们暂时不进行任何设置 (之后会用到)
创建好的队列
点击队列名称可查看详细信息,详细信息包括队列的当前负载状态、属性、消息队列占用的内存、消息数量等。
1.2.2 创建的队列绑定交换机
然后将当前消息队列绑定到上边的第二个直连交换机
,这样就可以通过此交换机向此消息队列发送信息了 (即给第二个交换机(amp.direct)发送消息,由它将消息给到yyds队列中:
绑定之后
1.2.3 模拟发送消息
再次点击yyds名称,发现队列多了一条数据
1.2.4 在消息队列这边直接获取队列的消息
找到下方的get message选项:
可以看到三个选项,首先是Ack Mode,这个是应答模式选择,共有四个选项
Nack message requeue true: 拒绝消息,也就是说不会将消息从消息队列取出,并且重新排队,一次可以拒绝多个消息。
Ack message requeue false: 确认应答,确认后消息会从消息队列中移除,一次可以确认多个消息。
Reject message requeue true/false: 也是拒绝此消息,但是可以指定是否重新排队。
可以查看取出的消息
此时消息队列还有一条消息
尝试使用第二个选项,然后点击get message
发现队列没有消息了
1.2.5 再去第一个默认交换机尝试发送消息
routing key 改为yyds进行发布
发布成功
进入消息队列查看消息
因此第一个交换机和第二个交互机发布消息时的区别:第一个交换机是根据队列的名称判断的,第二个交换机是根据队列指定的routing key判断的
点击名称进入详情查看routing key
1.2.6 删除或情况队列
点击队列名称进行详情