Skip to content

qpid笔记

Published: at 10:57 AM | 3 min read

查看所有队列包括消息的信息

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