Gestire l'enumerazione nell'architettura Microservices

3

Recentemente ho avuto un problema quando ho progettato l'architettura dei microservizi del nostro nuovo sistema. Per dare più contesto su questo, supponiamo di avere due diversi servizi.

  • Un servizio è responsabile di effettuare pagamenti e l'altro

  • Il servizio B è responsabile di tenere traccia degli ordini.

Abbiamo un caso d'uso che dobbiamo aggiornare uno stato dell'ordine dal servizio A.

Abbiamo questi stati in una lista di enumerazione all'interno del servizio B.

Come posso evitare la condivisione di questa enumerazione tra due servizi? Devo avere servizi disaccoppiati.

Non esitate a chiedere chiarimenti.

    
posta pik4 11.05.2018 - 12:04
fonte

2 risposte

3

Non c'è modo. Se entrambi i tuoi servizi hanno una logica aziendale relativa allo stato dell'ordine, entrambi i servizi dovranno conoscere i diversi stati possibili.

Non puoi avere una conversazione significativa con qualcuno, ad es. giocare a calcio, se non entrambi sapete qualcosa del gioco. Stesso scenario.

    
risposta data 11.05.2018 - 12:15
fonte
1

Per disaccoppiare completamente i tuoi servizi hai bisogno di un livello di messaggistica come RabbitMQ

Servizio pagamenti

public void TakePayment(Payment p)
{
    //payment taking logic
    messageQueueClient.Publish(new PaymentTakenMessage() { orderId = p.orderId });
}

Quindi possiamo attivare B da quei messaggi

Ordina il servizio

public void main()
{
    messageQueueClient.ListenFor<PaymentTakenMessage>(paymentTaken);
}

public void paymentTaken(PaymentTakenMessage m)
{
    var order = orderRepo.GetOrder(m.OrderId);
    order.State = OrderState.Processing;
    orderRepo.Save(order);
}
    
risposta data 11.05.2018 - 12:27
fonte

Leggi altre domande sui tag