Azure / azure-functions-java-library

Contains annotations for writing Azure Functions in Java
MIT License
43 stars 43 forks source link

Local deployment of Azure Service Bus Queue Trigger getting message as null #142

Open mlakshminara opened 3 years ago

mlakshminara commented 3 years ago

When I deploy an Azure Function locally using Spring Boot and spring-cloud-function-adapter-azure library. I was able to build, package and deploy the Function Application locally. I have installed: 1) Azure CLI version 2.16 2) Azure Function CLI (func) version 3.0.31 3) .NET SDK 3.1.404 4) Also installed Azurite V3 Visual Studio Code extension for local blob storage connection string

I have executed func settings add AzureWebJobsStorage "useDevelopmentStorage=$true" to utilize local blob storage, AzureServiceBusConnection connecction string as "Endpoint-sb://my-service-bus-server.servicebus.windows.net/;SharedAccessKeyName=Root;SharedAccessKey=xyz;, FUNCTIONS_EXTENSION_VERSION as 2, FUNCTIONS_WORKER_RUNTIME as java, MAIN_CLASS as Spring Boot Application Main Classname.

The Function Application starts properly I have deployed 2 functions (1) HttpTrigger and (2) ServiceBusQueueTrigger. HttpTrigger works properly but when I publish a message to the Queue to which I have configured ServiceBusQueueTrigger the trigger gets executed properly but the message is always null. This is the stack-trace as given below:

[2021-01-08T08:04:33.326Z] 2021-01-08 13:34:33.308 INFO 4764 --- [pool-2-thread-3] AbstractSpringFunctionAdapterInitializer : Initializing: class com.bestminds.azurefunction.AzureServiceBusSampleAzureFunction [2021-01-08T08:04:33.328Z] Handler processing a request for: orders [2021-01-08T08:04:33.351Z] =========|_|==============|__/=//// [2021-01-08T08:04:33.352Z] :: Spring Boot :: (v2.2.9.RELEASE) [2021-01-08T08:04:33.354Z] 2021-01-08 13:34:33.340 INFO 4764 --- [pool-2-thread-3] o.s.boot.SpringApplication : Starting application on XYZIND115914 with PID 4764 (C:\spring-boot-azure-function-showcase\target\azure-functions\bestminds\azure-functions-0.0.1-SNAPSHOT.jar started by JohnDoe in C:\spring-boot-azure-function-showcase\target\azure-functions\AzureServiceBusSampleAzureFunction) [2021-01-08T08:04:33.360Z] 2021-01-08 13:34:33.340 INFO 4764 --- [pool-2-thread-3] o.s.boot.SpringApplication : No active profile set, falling back to default profiles: default [2021-01-08T08:04:33.697Z] 2021-01-08 13:34:33.689 INFO 4764 --- [pool-2-thread-3] o.s.boot.SpringApplication : Started application in 0.369 seconds (JVM running for 287.696) [2021-01-08T08:14:58.013Z] Executing 'Functions.orders' (Reason='(null)', Id=0ad0ec7c-917c-4d07-9700-5ff5376a89f4) [2021-01-08T08:14:58.015Z] Trigger Details: MessageId: ID:7aada22d-6fd4-4a8b-b802-65738b39ef6f:1:1:1-1, SequenceNumber: 2, DeliveryCount: 1, EnqueuedTimeUtc: 2021-01-08T08:14:57.7860000Z, LockedUntilUtc: 2021-01-08T08:15:27.9730000Z, SessionId: (null) [2021-01-08T08:14:58.027Z] 2021-01-08 13:44:58.022 INFO 4764 --- [pool-2-thread-4] o.s.c.function.utils.FunctionClassUtils : Main class: class com.bestminds.azurefunction.AzureServiceBusSampleAzureFunction [2021-01-08T08:14:58.029Z] Message is received: null [2021-01-08T08:14:58.032Z] Handler processing a request for: orders [2021-01-08T08:14:58.034Z] Function "orders" (Id: 0ad0ec7c-917c-4d07-9700-5ff5376a89f4) invoked by Java Worker [2021-01-08T08:14:58.036Z] Executed 'Functions.orders' (Succeeded, Id=0ad0ec7c-917c-4d07-9700-5ff5376a89f4, Duration=25ms)

See line #18 which logs the JMS message as received by Function and it show null all the time. The actual Java Class is as given below

public class ServiceBusQueueHandler extends AzureSpringBootRequestHandler<String, Void> { @FunctionName("orders") public Void execute(@ServiceBusQueueTrigger(name = "orders", queueName = "eas_queue", connection = "AzureServiceBusConnection") final String message, final ExecutionContext context) { context.getLogger().info("Message is received: " + message); return handleRequest(message, context); } }

Do we have a solution to execute Service Bus Queue Triggers locally ?

mlakshminara commented 3 years ago

I used Apache Qpid libraries to publish messages to Queue using AMQPS protocol. I wanted to know whether publishing text message (Json text) to queue using AMQPS does it provide a null data in Azure Function trigger.

If I publish it as Bytes Message (same Json text as bytes) then am able to get the data in Azure Function properly. Is this a constraint while using AMQPS protocol

Paizo commented 3 years ago

I can confirm from personal experience: I was publishing a string containing xml by using spring jms template, that leads to a message with extra prefix chars being stored in the queue. When the function get triggered the message in this case is always null. For the publishing I switched to com.azure:azure-messaging-servicebus; when the message is correct the trigger works.