Skip to content

Commit afa52fa

Browse files
author
Sabrina Juarez Garcia
committed
Add handlers for single processing messages for Service Bus functions
1 parent e00db77 commit afa52fa

File tree

2 files changed

+115
-0
lines changed

2 files changed

+115
-0
lines changed
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package com.genexus.cloud.serverless.azure.handler;
2+
3+
import com.azure.messaging.servicebus.ServiceBusReceivedMessage;
4+
import com.genexus.cloud.serverless.Helper;
5+
import com.genexus.cloud.serverless.helpers.ServiceBusMessagesSetup;
6+
import com.genexus.cloud.serverless.model.EventMessageResponse;
7+
import com.genexus.cloud.serverless.model.EventMessages;
8+
import com.microsoft.azure.functions.ExecutionContext;
9+
import com.microsoft.azure.functions.annotation.Cardinality;
10+
import com.microsoft.azure.functions.annotation.ServiceBusQueueTrigger;
11+
12+
import java.util.ArrayList;
13+
import java.util.List;
14+
15+
public class AzureServiceBusQueueSingleMsgHandler extends AzureEventHandler {
16+
17+
EventMessages msgs = new EventMessages();
18+
String rawMessage = "";
19+
20+
public AzureServiceBusQueueSingleMsgHandler() throws Exception {
21+
super();
22+
}
23+
24+
public void run(
25+
@ServiceBusQueueTrigger(name = "messages", queueName = "%queue_name%", connection = "%queue_connection%", cardinality = Cardinality.ONE)
26+
ServiceBusReceivedMessage message,
27+
final ExecutionContext context
28+
) throws Exception {
29+
30+
context.getLogger().info("GeneXus Service Bus Queue trigger single message process handler. Function processed: " + context.getFunctionName() + " Invocation Id: " + context.getInvocationId());
31+
List<ServiceBusReceivedMessage> messages = new ArrayList<>();
32+
messages.add(message);
33+
setupServerlessMappings(context.getFunctionName());
34+
35+
setupServiceBusMessages(messages);
36+
try {
37+
EventMessageResponse response = dispatchEvent(msgs, rawMessage);
38+
if (response.hasFailed()) {
39+
logger.error(String.format("Messages were not handled. Error: %s", response.getErrorMessage()));
40+
throw new RuntimeException(response.getErrorMessage()); //Throw the exception so the runtime can Retry the operation.
41+
}
42+
} catch (Exception e) {
43+
logger.error("HandleRequest execution error", e);
44+
throw e; //Throw the exception so the runtime can Retry the operation.
45+
}
46+
}
47+
48+
protected void setupServiceBusMessages(List<ServiceBusReceivedMessage> messages) {
49+
switch (executor.getMethodSignatureIdx()) {
50+
case 0:
51+
msgs = ServiceBusMessagesSetup.setupservicebuslistmsgs(messages);
52+
break;
53+
case 1:
54+
case 2:
55+
rawMessage = Helper.toJSONString(messages);
56+
}
57+
}
58+
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package com.genexus.cloud.serverless.azure.handler;
2+
3+
import com.azure.messaging.servicebus.ServiceBusReceivedMessage;
4+
import com.genexus.cloud.serverless.Helper;
5+
import com.genexus.cloud.serverless.helpers.ServiceBusMessagesSetup;
6+
import com.genexus.cloud.serverless.model.EventMessageResponse;
7+
import com.genexus.cloud.serverless.model.EventMessages;
8+
import com.microsoft.azure.functions.ExecutionContext;
9+
import com.microsoft.azure.functions.annotation.Cardinality;
10+
import com.microsoft.azure.functions.annotation.ServiceBusTopicTrigger;
11+
12+
import java.util.ArrayList;
13+
import java.util.List;
14+
15+
public class AzureServiceBusTopicSingleMsgHandler extends AzureEventHandler {
16+
17+
EventMessages msgs = new EventMessages();
18+
String rawMessage = "";
19+
20+
public AzureServiceBusTopicSingleMsgHandler() throws Exception {
21+
super();
22+
}
23+
24+
public void run(
25+
@ServiceBusTopicTrigger(name = "messages", topicName = "%topic_name%", subscriptionName = "%subscriptionName%", connection = "%queue_connection%", cardinality = Cardinality.ONE)
26+
ServiceBusReceivedMessage message,
27+
final ExecutionContext context
28+
) throws Exception {
29+
30+
context.getLogger().info("GeneXus Service Bus Topic trigger handler. Function processed: " + context.getFunctionName() + " Invocation Id: " + context.getInvocationId());
31+
32+
setupServerlessMappings(context.getFunctionName());
33+
List<ServiceBusReceivedMessage> messages = new ArrayList<>();
34+
messages.add(message);
35+
try {
36+
EventMessageResponse response = dispatchEvent(msgs,rawMessage);
37+
if (response.hasFailed()) {
38+
logger.error(String.format("Messages were not handled. Error: %s", response.getErrorMessage()));
39+
throw new RuntimeException(response.getErrorMessage()); //Throw the exception so the runtime can Retry the operation.
40+
}
41+
} catch (Exception e) {
42+
logger.error("HandleRequest execution error", e);
43+
throw e; //Throw the exception so the runtime can Retry the operation.
44+
}
45+
}
46+
47+
protected void setupServiceBusMessages(List<ServiceBusReceivedMessage> messages) {
48+
switch (executor.getMethodSignatureIdx()) {
49+
case 0:
50+
msgs = ServiceBusMessagesSetup.setupservicebuslistmsgs(messages);
51+
break;
52+
case 1:
53+
case 2:
54+
rawMessage = Helper.toJSONString(messages);
55+
}
56+
}
57+
}

0 commit comments

Comments
 (0)