- [Stub] one pager
- The content created in the workshop is designed to be delivered in of the following formats:
- MTC Envisioning Session - 3-4 hour functionality overview and demo
- MTC Hands on Lab - Full day content created by customer
- MTC 1:Many Presentation - 3 hour functionality overview and demo to a 1:many audience
-
Resources group - Contains all workshop resources.
-
CosmosDB - Stores Pre/Post processed order documents.
-
API Management service - Serves as a request proxy and gateway.
-
Service Bus - Serves as an integration point between the order processing system and the enterprise email system. In practice this messaging bus could also serve as abstraction point between any inter process communication or integration.
-
Function app - Recieves Cosmos change events and acts as an integration point with other external services (address services, inventory service, etc.)
-
Logic apps - Provides the business workflows
- Incoming order receiver
- Complete order processor
- Service Bus notification queue producer
- Service Bus notification consumer / email producer
-
Office 365 tenant - Email provider / integration user account provider Order Notifier - Notifier service integration Orders - Email notification account
The overall process flow for this architectute is:
-
The theoretical UI submits an order request via REST interface to the Order API.
-
An HTTP triggered Logic App recieves the order document and persists it to the CosmosDB pending orders container.
-
CosmosDB generates a change feed event.
-
The order processing Function App is triggered by the CosmosDB change feed event.
-
The Function aApp calls a (mocked) customer address service to obtain customer information. The Function App then creates an aggregated document representing the order that contains original order information (product, quantity, email) as well customer information.
-
The Function App then calls the order processor HTTP Logic App, which receives the aggregated order document, persists a new complete order document to the processed orders CosmosDB container and deletes the original order received document from the pending order container.
-
The order processor Logic App then calls the notifification producer Logic App with the finalized order document.
a) (Optionaly) The order processor Logic App may then use the Office 365 Logic App Connector to produce a teams notification, notifying a theoretical distrobution team that an order is ready to be shipped.
-
The Notifier producer Logic App takes the finalized order document and puts it onto a Service Bus.
-
A notification consumer Logic App retrieves the processed order from the Service Bus, uses the O365 connector to generate an email that is sent to the email address of the customer that created order, notifying them that their order has been processed.
NOTES:
- Service Bus is utilized in the demo as a means to demonstrate how to integrate service bus. Realistically and in practice SB could sit between any of the Fx/LA API calls to make the architecture more event driven.
- It's implied in the reference architecture and implemented such that all calls to HTTP triggers go through APIM.
- The facilitator supplies the credentials to the O365 connector in order to create the email / Instant message. It's helpful to have a demo tenant set up that can be used to provision a service user on a per demo basis.
- In terms of extensibility, again all HTTP triggers can be converted to SB events making more of event driven architecture.
- All deployment can be automated and full CI/CD with ARM / Bicep and GH actions.
This exercise contains the necessary prequisite setup required for completing the workshop as described.
In this exercise you will set up the related logical infrastructure and supporting PaaS services including:
- Resource Group
- Log Analytics Workspace
- Application Insights
- API Management Service
- CosmosDB and needed containers
In this exercise you will create the Logic App responsible for recieving the initial order and persisting it to the pre processed cosmos container. You will also integrate the Logic App with APIM.
In this exercise you will create the Logic App responsible for proccessing the finalized order, persisting it to the completed orders cosmos container. You will also integrate the Logic App with APIM.
This exercise will create the CosmosDB trigger functiona app responsible for processing persisted unprocessed orders.
In this exercise you will create the Service Bus instance that will provide the queue for completed order that will be service by a Logic App resulting in customer order complete notifications.
Here you will create the Logic App responsible for producing the order complete message that will be placed onto the service bus for customer notification.
This exercise will create the Logic app responsible for notifiy the customer their order has been processed.
Here you will setup a teams notification process to notify our theoretical warehouse team that an order is ready to ship.
This exercise will tie everything together deomonstrating and executing end to end functionality.
In the final exercise you'll demonstrate end-to-end monitoring by utilizing distributed tracing across all involved services.
stub
This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit https://cla.opensource.microsoft.com.
When you submit a pull request, a CLA bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions provided by the bot. You will only need to do this once across all repos using our CLA.
This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact opencode@microsoft.com with any additional questions or comments.
This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft trademarks or logos is subject to and must follow Microsoft's Trademark & Brand Guidelines. Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship. Any use of third-party trademarks or logos are subject to those third-party's policies.
