Azure storage account queue get new messages arrived (Ideally Logic App) - azure

I am trying to design a logic app where when a message arrives or is received by poison queue(located in azure storage account) it posts to slack channel.
I know how to do the slack part and I can get the trigger to fire on queues located in my service bus resource because azure logic apps includes triggers for that.
However, I don't see azure logic app triggers for queues in the storage account for when a message arrives or is received in a queue.
My question is: Is there a trigger or other process that I can tap into when messages arrives in those storage account queues? If not, what is the best way to achieve being able to get this data (Message and Message Content) when it arrives in my poison queue in the storage account then take that info and throw that info into the slack channel?
Is there a trigger (for logic app) on the “storage account” queues that can be fired when a message is received?(I see length, and scan all messages in queue)
I have found triggers for this on the “service bus” queues.
These are the trigger options I have found for "service bus queues": https://i.stack.imgur.com/nS0nu.png
These are the trigger options I have found for "storage account queues": https://i.stack.imgur.com/AqxB4.png
Ideally, I just want to configure a simple logic app for when queue messages arrive in poison queue in storage account then take info to slack, i know how to put info in slack via logic app in service bus queue but haven't been able to figure out how to set up the action to pass the message to slack because I can't figure out how to do it when a message is recieved, i can set it as a job and grab length of queue and all items in queue, but not fire on arrival because I can't find a trigger for that.
If I can't figure this out or if at can't be done, I am probably just going to initiate the logic app with and Azure Queue storage trigger on an Azure function, this seems to be how MS wants us to do it anyway.
https://learn.microsoft.com/en-us/azure/app-service/webjobs-sdk-how-to
ctrl+f "Binding reference information" then see sub heading "Usage: The types you can bind to and information about how the binding works. For example: polling algorithm, poison queue processing."
thanks again for the input folks, appreciate ya!

According to some test, it works fine in my side with "When a specified number of messages are in a given queue" trigger. When I add a message to my queue which named myqueue-items-poison, the logic app was triggered success.
So please check if you have configured the trigger correctly.
Please check if you set the interval of the trigger too long, I set it with 1 minute.

Related

How can you set up an alert when a message arrives in the Dead letter Queue in Azure Servicebus

I want to create an alert in Azure when a message hits the dead letter queue in azure servicebus , I checked the monitoring and cant see an option for when a "NEW" message arrives in the queue. Also is there any way of viewing the DeadLetterQueues via Azure itself or via the Azure CLI and NOT using a 3rd Party application?
I want to create an alert in Azure when a message hits the dead letter
queue in azure servicebus , I checked the monitoring and cant see an
option for when a "NEW" message arrives in the queue.
Currently it is not possible to create an alert when a message is dead-lettered. What you can do is either make use of Azure Function with Service Bus Trigger or a Logic App which gets triggered when a message is dead-lettered. There you could take a custom action (like sending an email).
Also is there any way of viewing the DeadLetterQueues via Azure itself
or via the Azure CLI and NOT using a 3rd Party application?
You can view deadletter messages in Azure Portal using Service Bus Explorer (currently in preview). Please see the screenshot below.
While you cannot create an alert when a message is dead lettered, you can create one that fires when you have messages in your Dead letter queue. You should then remove the message from the DLQ which will resolve the alert.
For anyone coming here interested in creating an alert when you have messages in your DLQ you can configure this on your Service Bus resource. Select Alerts and Alert rules in the Azure portal:
Then click Create and select Count of dead-lettered messages in a Queue/Topic as your signal.

How to manually send message to service bus dead letter queue in Azure Function?

The Azure Service Bus Queue triggered function would perform a default policy for sending message into the dead letter queue if message is poisoned. However, is there anyway that we could manually send the message to dead letter queue? There are couple of times that we wouldn't want Azure Function to perform its default policy due to some kind of internal or business exception, we would like to bind additional information to our message and manually send it to our Azure Service Bus Deadletter Queue.
In a previous version where it's using BrokeredMessage object, there is a method called
BrokeredMessage msg;
msg.DeadLetter();
However, in the most recent Functino 2.X, where it's using the Message object, that doesn't have this method somehow...
With Functions 2.0 you use the .NET Standard Service Bus client. Message no longer has operations such as dead-lettering. Instead, you need to add an additional parameter of MessageReceiver type to be able to use DeadletterAsync() method it provides. You can find an example of how to use message receiver in my post.
From my understanding there is no straight forward way but the following steps could help:
Go to the queues overview in the Azure portal and enable dead-lettering on message expiration on your subscription/queue.
Set TimeToLive on your message to say few seconds. (I did while creating a test queue, in the creation it is simple)
Push the message to your subscription.
Within few seconds you will have all your messages in dead-letter queue.
//(Provided no app is reading from the subscription during those seconds)
Finished

When to use EventGrid and when to use ServiceBus / Storage Queue?

In Azure, we have two separate messaging technologies and it's not very well documented when to use what? While EventGrid is really cool, I did not come across when to use EventGrid(scenarios) vs the Storage/ServiceBus queue? Can someone help?
E.g. if I have the following scenario :
A status of a flag changes and based on that, I want to trigger an algorithm that would do recalculations, few inserts/updates etc. in the database.
For implementing this - I can either use EventGrid or Storage Queue. How do we figure what to use in such scenario? I was looking for some kind of guidance.
Basically, Azure Event Grid handles events and Azure ServiceBus handles messages.A message is raw data produced by a service to be consumed or stored. Events are also messages (lightweigth), but they don’t generally convey a publisher intent, other than to inform.
1) If the purpose is to just to store the information ServiceBus can be used.
2) If the information received is used to trigger another service Azure Event Grid can be used.
Find more info here
https://learn.microsoft.com/en-us/azure/event-grid/compare-messaging-services
https://azure.microsoft.com/en-us/blog/events-data-points-and-messages-choosing-the-right-azure-messaging-service-for-your-data/
Events are like notifications from a service to inform the world that something happened in the domain of the publisher (similar to an email notification). There is no expectations from the publisher to have any actions taken. A message is a command you send to a specific receiver with the expectation of the message to be processed (like an asynchronous post request).
Events will work in pub/sub pattern and multiple subscribers could be configured to the events. The service that needs to react to an event will get notified by the event grid when an event occurs (http call from event grid to the receiver). The event will remain in the event grid until deletion (cleanup) and there is no garantie of keeping the original order (no FIFO).
In the other hand, messages will be added to a queue and will be deleted once the “message processor” is done with it. The messages in the queue will keep the original order (FIFO). The message processor has to pull messages from the queue.
In your scenario, you could use a combination of both. Service A sends an event “StatusChanged”, then you can configure a subscription to that event and send a message to a queue, then have your logic to process that message. This will end up with a fully async communication pattern. This is ideal to support scenarios where you processor is down or too busy. The incoming messages will simply get accumulated in the queue and eventually being processed once the service is back up and running. And without affecting the original service that sent the “StatusChanged” event..

How to ensure the messages has been processed by all subscriptions in azure service bus

Since azure service bus has limitation in message size(256 kb), I am storing a long message in blob and when function app received a message, i am downloading the content from blob storage and converting it to message format.
Once the service bus processed the message successfully, I need to delete the file from blob storage since it is no longer needed.
But the problem here is, Same messages have been sent to two subscriptions under the same topic, One is processed by function app and another one is processed by web job. If i delete the file from blob in function app, then it will not available to webjob and vice versa.
So is there any way to identify that the message has been processed successfully by all the subscribers?
Azure Servicebus messaging provides us a way of adding custom or user properties to the servicebus message.So
1.You can add a custom property like messageReceptionCount to your message with initial value as 0 and send it to your topic.
2.While receiving the message in your topic subscription, you can increment the messageReceptionCount by 1.
3.When the messageReceptionCount has reached the number of subscriptions in the topic you can delete it from your blob storage.
I hope this will work fine for you.

Azure Queue - how to implement

First service adds messages to queue if user does not exist in DB, second service gets message from queue and create user. Possible situation, when first service adds 2 messages for create users before second gets it. How to resolve it? As I understand, no way to review queue...
I use Azure Storage queues
Azure Queue message doesn't support peek-lock to be processed. Once it is read, it becomes invisible. You need to look into Azure Service Bus as it allows you to control message one by one and in order if required.

Resources