查看所有队列包括消息的信息
qpid-stat -q
查看指定队列信息
qpid-stat -q | grep pingpong
查看连接信息,连接数、时间、消息数等
qpid-stat -b
删除指定队列
qpid-config del queue pingpong
如果队列不为空删除会失败,但是可以强制删除
qpid-config del queue --force pingpong
qpid-tool
主要用来监控qpidd
用法:
进入qpid tool工具
# qpid-tool
查看帮助信息
qpid: help
列出所有可以查看的className
qpid: list
列出所有队列
qpid: list queue
查看指定队列详细信息
qpid: show ID
session.acknowledge
如果fetch到消息后没有调用session.acknowledge消息不会从队列中删除,下次从队列fetch消息的时候还会收到
session.sync(true)
请求与服务端同步,这个操作会阻塞直到服务端确认所有挂起的操作(如:缓存中没有发送完成的数据)都已完成
delete:always
Connection正常关闭(调用close)才能删除队列,否则不起作用。
exchange
如果没有指定exchange会通过默认exchange(名字是空,类型是direct)来转发到队列,通过qpid-tool工具中的list exchange可以看到第一个就是默认的
type为queue(direct模式)
点对点通信,一方发送一方接收,接收方不在时消息会保留在broker上。当sender的地址为ningto;{create:always, node:{type:queue}}时,qpid会创建一个名字为ningto的队列,同时receiver必须以相同的队列名才能收到消息且只一个receiver才能消费此消息。
type为topic(topic模式)
订阅模式,一方发送多方接收,接收方不在时直接丢弃。当sender的地址为ningtotopic;{create:always, node: {type: topic}}时,qpid会创建一个名字为ningtotopic的exchange。
发送消息到此exchange:
1> 如果没有receiver消息将直接丢弃,这样不会造成消息堆积;
2> 如果有一个receiver的地址为ningtotopic,那么说明它订阅了这个topic,此时会在queue上创建一个已ningtotopic为起始字符串的临时队列(如下所示,它是自动删除的),exchange会将消息路由一份到这个队列;
3> 如果有多个receiver的地址为ningtotopic,将创建多个临时队列,同一个消息每个订阅者都会收到,订阅者收到的都是实时消息收不到历史消息;
ningtotopic_e29210bb-b44b-42b2-be3e-b4b535bec517