Ho il compito di creare una guida allo sviluppo, alla progettazione e all'architettura per un grande progetto pluriennale. Devo dettare le migliori pratiche di progettazione per un certo numero di prospettive architettoniche. Vedi il seguente diagramma per dimostrare come vedo questo aspetto.
Pertanto,sullabasedialtrirequisitiarchitetturali,iserviziasincronibasatisuMQsonopreferitiacausadellaconsegnagarantitadeimessaggieperchénontuttiicomponentibusiness-criticalgarantisconoladisponibilitàelevata.LamiaesperienzanellosvilupporispettoalleinterfacceMQerapiuttostobassaenoninun
Quando si considera un'architettura in stile COA con un livello di accesso ai dati chiaramente definito e un livello Business Logic, in che modo le origini dati asincrone vengono rappresentate o implementate qui in genere? In genere, è logico che un livello di accesso ai dati fornisca un'interfaccia a Business Logic in cui l'origine dati è un servizio Web basato su REST o SOAP. Questi servizi sono sincroni, ricevono una richiesta e la elaborano immediatamente, quindi restituiscono una risposta mentre il client attende un tempo prestabilito per riceverlo.
Le richieste asincrone potrebbero non essere elaborate immediatamente, inoltre potrebbero non restituire una risposta soddisfacente. MQ garantisce solo che il componente target alla fine riceverà il messaggio di richiesta, non garantisce che restituirà una risposta.
Mi sembra che il modo migliore per gestire questo è avere due interfacce separate richieste dal livello di accesso ai dati, interfaccia di richiesta e interfaccia di risposta. Un lavoro batch pianificato che utilizza quindi il componente Business Logic potrebbe essere in grado di gestirlo efficacemente utilizzando più thread, tuttavia potrebbe esserci un altro componente che richiede un'interfaccia sincrona in tempo reale del nostro componente Business Logic in cui ci viene richiesto di interfacciare tramite MQ non è in tempo reale.
Sono confuso su come conciliare i due. È questo il modello di design giusto qui? Come posso fornire efficacemente un'interfaccia a un componente che richiede tempo reale quando il mio componente richiede un'interfaccia asincrona?
Note:
Alcuni articoli pertinenti che ho letto:
Sembra che questa situazione sia già definita come un Anti-Motivo architettonico chiamato Sincronizzazione su Asincrona . Per me è chiaro che leggere questa gente sta dicendo che è un'idea straordinariamente cattiva. Poi altri notano che a volte non abbiamo scelta e dobbiamo fare ciò in cui mi sto trovando. Non sono in grado di chiedere un'interfaccia sincrona per cercare e cercare i servizi per questo unico sistema, e non ho voce in capitolo con gli altri componenti richiesti per un servizio di ricerca e ricerca sincrona.