JustJordanT / pizza-planet

Pizza Planet Application 🍕 🛻 - A place for me to build a modular Monolith
2 stars 0 forks source link

RabbitMQ Integration #28

Open JustJordanT opened 1 year ago

JustJordanT commented 1 year ago

Need to finish the integration of Rabbit MQ using MassTransit

JustJordanT commented 1 year ago

Pizza API Messaging

using MassTransit;
using System;
using System.Threading.Tasks;

namespace PizzaAPI
{
    public class Program
    {
        static async Task Main(string[] args)
        {
            var bus = Bus.Factory.CreateUsingRabbitMq(cfg =>
            {
                cfg.Host("rabbitmq://localhost");

                cfg.ReceiveEndpoint("pizza_api_queue", ep =>
                {
                    ep.Handler<OrderMessage>(async context =>
                    {
                        Console.WriteLine($"Received order for Pizza ID: {context.Message.PizzaId}");

                        // send message to kitchen api queue
                        var kitchenEndpoint = await context.GetSendEndpoint(new Uri("rabbitmq://localhost/kitchen_api_queue"));
                        await kitchenEndpoint.Send<OrderMessage>(new
                        {
                            OrderId = context.Message.OrderId,
                            PizzaId = context.Message.PizzaId
                        });
                    });
                });
            });

            await bus.StartAsync();
            Console.WriteLine("Pizza API is ready to receive orders");
            Console.ReadLine();
        }
    }

    public class OrderMessage
    {
        public int OrderId { get; set; }
        public int PizzaId { get; set; }
    }
}
JustJordanT commented 1 year ago

Kitchen API

using MassTransit;
using System;
using System.Threading.Tasks;

namespace KitchenAPI
{
    public class Program
    {
        static async Task Main(string[] args)
        {
            var bus = Bus.Factory.CreateUsingRabbitMq(cfg =>
            {
                cfg.Host("rabbitmq://localhost");

                cfg.ReceiveEndpoint("kitchen_api_queue", ep =>
                {
                    ep.Handler<OrderMessage>(async context =>
                    {
                        Console.WriteLine($"Received order for Pizza ID: {context.Message.PizzaId}");

                        // simulate processing the order
                        await Task.Delay(1000);

                        // send order update message
                        var pizzaEndpoint = await context.GetSendEndpoint(new Uri("rabbitmq://localhost/pizza_api_queue"));
                        await pizzaEndpoint.Send<OrderUpdateMessage>(new
                        {
                            OrderId = context.Message.OrderId,
                            Status = "Processed"
                        });
                    });
                });
            });

            await bus.StartAsync();
            Console.WriteLine("Kitchen API is ready to process orders");
            Console.ReadLine();
        }
    }

    public class OrderMessage
    {
        public int OrderId { get; set; }
        public int PizzaId { get; set; }
    }

    public class OrderUpdateMessage
    {
        public int OrderId { get; set; }
        public string Status { get; set; }
    }
}