简体   繁体   中英

Azure Service Bus Error: Ensure RequiresSession is set to true when creating a Queue, with Databricks

When attempting to retrieve Queue messages from Azure Service via Databricks I get the following error:

Ensure RequiresSession is set to true when creating a Queue or Subscription to enable sessionful behavior

I have set the Message Queue using Azure's Service Bus Explorer, see below

在此处输入图像描述

As you can see I have set the sessionId to carlsession6

Therefore, I'm not sure why I'm getting the error message

The code in databricks is as follows:

session_id = "carlsession6"

connstr = "Endpoint=sb://carlsbus.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=myaccesskey"
queue_name = "carlsqueue"

prevTable = None
table = None
rows = []
msgs = []
run = True

batchMsgs = 0

totalMsgs = 0

with ServiceBusClient.from_connection_string(connstr) as client:
    # max_wait_time specifies how long the receiver should wait with no incoming messages before stopping receipt.
    # Default is None; to receive forever.
    
    while run:
      
      with client.get_queue_receiver(queue_name, session_id=session_id, max_wait_time=5) as receiver:
           
          logDebug(D_LEVEL[1], 'GOT QUEUE RECEIVER')
          rows = []
          msgs = []
    
          i = 0
          for msg in receiver: 
          
            receiver.session.renew_lock()
          
            logDebug(D_LEVEL[1], 'READ MESSAGE')
            msgs.append(msg)
          
            msgJSON = json.loads(str(msg))
          
            if 'table' in msgJSON['control']:
              table = msgJSON['control']['table']
          
            if prevTable is None:
              prevTable = table
                     
            if prevTable != table or batchMsgs >= MAX_BATCH_SIZE:
              writeData(prevTable, schema, rows, msgs)
              rows = []
              msgs = []
              batchMsgs = 0
            
            prevTable = table
          
            i += 1
            batchMsgs += 1
          
            if (i % 100 == 0):
              logInfo('Processed ' + str(i) + ' messages')
          
            if 'operation' in msgJSON['control']:
              if msgJSON['control']['operation'] == "stop_message_processor":
                logInfo('RECEIVED stop_message_processor...')
                run = False
                break
        
            schema, rows = processMsg(msgJSON, rows)    
                            
            logDebug(D_LEVEL[1], 'COMPLETED MESSAGE')
          
            if STOP_AFTER is not None:
              if i >= STOP_AFTER:
                run = False
                break
                
          if len(rows) > 0:  
            writeData(table, schema, rows, msgs)
          elif len(msgs) == 1:
            receiver.complete_message(msg)
     
      logInfo('PROCESSED ' + str(i) + ' MESSAGES FROM QUEUE')
      totalMsgs += i  
      
    logInfo('TOTAL MESSAGES PROCESSED ' + str(totalMsgs))

Any thoughts on how to resolve the error?

Problem resolved with the following code:

New-AzServiceBusQueue -ResourceGroup myresourcegroup -NamespaceName mynamespace -QueueName myqueue ` -RequiresSession $True

As described at the following link https://learn.microsoft.com/en-us/azure/service-bus-messaging/enable-message-sessions

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM