Skip to content

mcawalsh/functionapp-purchase-processor

Repository files navigation

🧾 Purchase Processing Pipeline (Azure Functions + Azurite)

A simple event-driven sample demonstrating how to process queue messages locally using Azure Functions and the Azurite Storage Emulator.

This project simulates a lightweight purchase processing flow entirely on your local machine — perfect for experimenting with queue triggers and output bindings.


🧱 Architecture Overview

Azurite Queue (purchases)
        ↓
Azure Function (ProcessPurchase)
        ↓
Azurite Queue (purchases-processed)
  • QueueMessageSender – Console app that sends purchase messages to the purchases queue.

  • PurchaseProcessor – Azure Function project that processes messages and writes results to the purchases-processed queue.

⚙️ Prerequisites

  • .NET 8 SDK
  • Azurite
    (VS Code extension or Docker)
  • Azure Functions Core Tools v4
  • Azure Storage Explorer
    (optional, for viewing queues)

🚀 Getting Started

1. Start Azurite: VS Code extension

Press Ctrl+Shift+P → Azurite: Start

2. Run the QueueMessageSender

This console app creates and sends mock purchase messages to Azurite.

cd QueueMessageSender
dotnet build
dotnet run

You’ll be prompted for:

  • Customer name
  • Number of items
  • Name, quantity, and price for each item

A message is then sent to the purchases queue.

3. Start the Function App

The function listens for new messages on the purchases queue, processes them, and outputs to purchases-processed.

cd PurchaseProcessor
func start

If you’re running plain JSON (not Base64), make sure your host.json includes:

{
  "version": "2.0",
  "extensions": {
    "queues": {
      "messageEncoding": "none"
    }
  }
}

4. View Messages

Use Azure Storage Explorer to connect to your local Azurite instance and inspect both queues:

  • purchases – input queue
  • purchases-processed – processed output messages

🧩 How It Works

  1. QueueMessageSender sends a JSON message like:
{
  "PurchaseId": "43ecd0e5-7f2d-4c5a-a5bc-9877783a61bf",
  "CustomerId": "Customer-Id-01",
  "Items": [
    { "Name": "Book", "Quantity": 1, "Price": 9.99 }
  ],
  "Timestamp": "2025-11-06T14:27:47.4503265Z"
}
  1. The Function App:
  • Logs receipt of the message
  • Deserializes the JSON
  • Adds a processed timestamp
  • Writes the updated record to purchases-processed

⚠️ Notes

  • If message processing fails more than 5 times, it’s automatically moved to a poison queue named purchases-poison.
  • Both input and output queues are fully emulated in Azurite — no Azure resources required.

🧰 Project Structure

.
├── QueueMessageSender/      # Console app to send queue messages
├── PurchaseProcessor/       # Azure Function project
│   ├── ProcessPurchase.cs   # Queue trigger function
│   └── host.json            # Function host configuration
└── README.md

🏁 Summary

This project demonstrates a local-first, event-driven workflow using:

  • Azurite for queue emulation
  • Azure Functions (in-process model)
  • A simple console producer and consumer pattern

It’s a great foundation for experimenting with Azure Functions, message processing, and building local prototypes before deploying to the cloud.

About

Local Azure Function pipeline demo using Azurite queues to process purchase messages.

Topics

Resources

Stars

Watchers

Forks

Languages