如何从Azure服务总线队列中删除/清除活动/死信消息?

5ktev3wc  于 2022-11-17  发布在  其他
关注(0)|答案(5)|浏览(255)

是否有任何方法可以从Azure门户中的Azure服务总线队列删除/清除活动/死信消息?目前我们已向队列发送了几条消息,而活动消息和一些死信消息都毫无意义地保留在那里,并且我们的服务总线订阅者没有以某种方式触发,因此,我们希望删除这些消息以再次清空队列。为了等到服务总线在过期后删除这些消息,我们是否可以自己手动删除它们?

oxcyiej7

oxcyiej71#

使用Service Bus Explorer,您可以连接到Azure Service Bus并管理消息传递实体。您可以下载工具here
下载该工具后,运行“ServiceBusExplorer.exe”。在服务总线浏览器中,转至“文件”“连接

输入连接字符串,您可以在 Jmeter 板--〉服务总线--〉--〉共享访问策略

中找到该字符串
成功连接后,您将能够看到已连接服务总线中的所有主题队列,选择您想要访问的队列

您可以随意接收和删除

aor9mmx1

aor9mmx12#

是否可以删除/清除Azure门户中Azure服务总线队列中的活动/死信消息?
目前不支援清除作业。有feature request要实作清除,但尚未实作。
您可以使用某些工具来执行类似清除的操作。ServiceBus Explorer可以清除常规队列和死信队列上的消息(“接收”和“删除”选项)。
或者,您也可以编写一个脚本来执行此操作。

t0ybt7op

t0ybt7op3#

您可以为此调用服务总线API。使用DELETE方法将从队列中检索和删除消息。正式文档为here。API为
邮件队列/消息/head
。然后
消息/head
您可以使用curl来接收和删除消息,如下所示,编写一个while循环来实现您的目标。SAS令牌可以通过以下官方文档来检索。

curl -X DELETE -H "Authorization: SharedAccessSignature sr=<NAMESPACE NAME>.servicebus.windows.net&sig=<SHARED ACCESS KEY>&se=<TOKEN EXPIRY INSTANT>&skn=<SHARED KEY NAME>" ${URL}

获取SAS令牌代码:

get_sas_token() {
    eval ${CONNECT_STRING}
    local EXPIRY=${EXPIRY:=$((60 * 60 * 1))} # Default token expiry is 1 hour
local ENCODED_URI=$(echo -n ${Endpoint} | jq -s -R -r @uri)
    local TTL=$(($(date +%s) + ${EXPIRY}))
    local UTF8_SIGNATURE=$(printf "%s\n%s" ${ENCODED_URI} ${TTL} | iconv -t utf8)
local HASH=$(echo -n "${UTF8_SIGNATURE}" | openssl sha256 -hmac ${SharedAccessKey} -binary | base64)
    local ENCODED_HASH=$(echo -n ${HASH} | jq -s -R -r @uri)
AUTH_HEADER="SharedAccessSignature sr=${ENCODED_URI}&sig=${ENCODED_HASH}&se=${TTL}&skn=${SharedAccessKeyName}"
}

删除死信队列(您可以更改URL以删除活动邮件):

purge_dlq_queue() {
    local DLQ_QUEUE_URL="https://${SERVICENAMESPACE}.servicebus.windows.net/${QUEUE_NAME}/\$DeadLetterQueue/messages/head"
    local count=1000
    echo "cleaning the dead letters messages from the message queue..."
while [[ ${count} -ge 0 ]]
    do
        local STATUS_CODE=$(curl -I -X DELETE -H "Authorization: ${AUTH_HEADER}" ${DLQ_QUEUE_URL} 2>/dev/null | head -n 1 | cut -d$' ' -f2)
        if [[ STATUS_CODE -ge 300 ]]; then
            echo "Exit dead letters message queue cleaning with code ${STATUS_CODE}"
            return 1
        elif [[ STATUS_CODE -eq 204 ]]; then
            echo "dead letters message queue has been cleaned"
            return 0
        fi
        let count--
    done
    echo "Exit with maxium number tries."
    return 1
}

可以从here检查脚本代码

4c8rllxm

4c8rllxm4#

您可以使用QueueExplorer删除消息,这是一个商业的Windows工具:

0mkxixxg

0mkxixxg5#

您可以转到联机存储资源管理器并“接收和删除”邮件。更多详细信息,请访问:https://github.com/Azure/azure-service-bus/issues/1#issuecomment-1261327751

相关问题