使用CLI从Azure Service Bus队列获取消息?

3

是否可以使用 az CLI 从 Azure Service Bus 队列中读取消息?

最初的回答:

Yes, it is possible to read messages from an Azure Service Bus queue using the az CLI. You can use the command "az servicebus queue receive" to receive a message from a queue.


不,为什么你想要这样做呢? - Peter Bons
为什么不呢?我的应用程序完全依赖于Azure服务主体(https://learn.microsoft.com/en-us/azure/active-directory/develop/howto-create-service-principal-portal)使用CLI与Azure进行交互。 - Foo Bar
1
@foo-bar 我会和Peter问同样的问题。你为什么要这样做呢?在生产系统中,被放入死信队列(DLQ)的消息是需要处理的消息。如果使用CLI来检查这些消息并进行处理,那将是不合适的工具。有更好的工具可以使用,比如ServiceBus Explorer或者Queue Explorer,它们允许你查看、检查、修复/重新提交消息。 - Sean Feldman
如果你想要的话,实现自己的peek功能应该相对简单。 - Brendan Green
3
能够通过CLI进行调试查看是很有用的,我也很惊讶这不是CLI的一个功能。 - cdimitroulas
我认为可以使用 REST API 以及 az rest 来完成这个任务。 - Palec
1个回答

0
我觉得AWS在其CLI中有比Azure的az-cli更多的选项和访问数据平面的方式。我查阅了各种文档、az-cli参考资料,但没有找到直接处理它的方法。
我认为处理它的方式是通过REST接口进行访问,这里是一个我刚刚测试过的工作示例```:

https://gist.github.com/wkaczurba/cd1f22df3bec19f0d1ce61965bcaba5f

#!/bin/bash
set -e

# Execute az login first.

# Replace these ones with correct ones:
SERVICE_BUS_NAME_SPACE=sapps-eventdriven-servicebus # Name of service bus name space (not the queue)
RESOURCE_GROUP=sapps-eventdriven
QUEUE_NAME="upper-case"
SERVICE_BUS_QUEUE_URL=https://sapps-eventdriven-servicebus.servicebus.windows.net/upper-case

# Maybe not a good practice but should work without creating new Shared Access Policies... - using (RootManageSharedAccessKey)
SHARED_ACCESS_KEY=$(az servicebus namespace authorization-rule keys list \
        --resource-group ${RESOURCE_GROUP} \
        --namespace-name ${SERVICE_BUS_NAME_SPACE} \
        --name RootManageSharedAccessKey \
        --query primaryKey \
        --output tsv)

SHARED_ACCESS_KEY_NAME=RootManageSharedAccessKey
SHARED_ACCESS_KEY=$PRIMARY_KEY

# Generate SAS key - based on https://learn.microsoft.com/en-us/rest/api/eventhub/generate-sas-token 
EXPIRY=${EXPIRY:=$((60 * 60 * 24))} # Default token expiry is 1 day
ENCODED_URI=$(echo -n $SERVICE_BUS_QUEUE_URL | jq -s -R -r @uri)
TTL=$(($(date +%s) + $EXPIRY))
UTF8_SIGNATURE=$(printf "%s\n%s" $ENCODED_URI $TTL | iconv -t utf8)
HASH=$(echo -n "$UTF8_SIGNATURE" | openssl sha256 -hmac $SHARED_ACCESS_KEY -binary | base64)
ENCODED_HASH=$(echo -n $HASH | jq -s -R -r @uri)
SAS_TOKEN=$(echo -n "SharedAccessSignature sr=$ENCODED_URI&sig=$ENCODED_HASH&se=$TTL&skn=$SHARED_ACCESS_KEY_NAME")

# Execute CALL to REST-API
curl --location --request POST 'https://sapps-eventdriven-servicebus.servicebus.windows.net/upper-case/messages/head' \
    --header "Authorization: $SAS_TOKEN" \
    --header 'Content-Type: application/json' \
    -d ''

希望能有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接