Azure Function app - Python SDK - How to read Service Bus Message body

Viewed 590

I completed Azure solution: Azure Function, Service Bus, Python SDK code. My Function is triggered by Service Bus message. Function is triggered as expected. Function code below

import logging
import json
import requests
import azure.functions as func


def main(msg: func.ServiceBusMessage):
    logging.info('Python ServiceBus queue trigger processed message: %s',
                 msg.get_body().decode('utf-8'))


    url = 'WebHookURL'
    payload = {"keyA": "valueA"}
    requests.post(url, data=json.dumps(payload), headers={'Content-Type': 'application/json'}) 

Question is how can I get Service bus message nested values. In Ms documentation I found an example, below, but how to get message body details ('body': msg.get_body().decode('utf-8')). Message body is the core of the solution because in this message body there are a lot of key:value properties delivered by external service.

def main(msg: func.ServiceBusMessage):
    logging.info('Python ServiceBus queue trigger processed message.')

    result = json.dumps({
        'message_id': msg.message_id,
        'body': msg.get_body().decode('utf-8'),
        'content_type': msg.content_type,
        'expiration_time': msg.expiration_time,
        'label': msg.label,
        'partition_key': msg.partition_key,
        'reply_to': msg.reply_to,
        'reply_to_session_id': msg.reply_to_session_id,
        'scheduled_enqueue_time': msg.scheduled_enqueue_time,
        'session_id': msg.session_id,
        'time_to_live': msg.time_to_live,
        'to': msg.to,
        'user_properties': msg.user_properties,
        'metadata' : msg.metadata
    }, default=str)
1 Answers

I completed Function App Python code, it looks like below, works as expected, verified and tested.

import logging
import json
import azure.functions as func


def main(msg: func.ServiceBusMessage):

    result = ({
        'body': json.loads(msg.get_body().decode('utf-8')) 
    })

    try:
        resource_name = result.get('body', {}).get('resourceName')

        logging.info('resourceName: %s', resource_name)

    except Exception as e:
        logging.info(e)

input json content:

{
   "resourceName":"testVM",
   "resourceVnet": "Vnet01"
}
Related