Dos patrones de integración empresarial son el mensaje de comando y el mensaje de evento . Estoy trabajando en un sistema en el que utilizamos la mensajería no solo para la integración con otros sistemas, sino también para la comunicación interna entre servicios. Se supone que es un sistema eventualmente consistente , y se supone que los servicios se ignoran entre sí (con la excepción de un par de servicios de propósito especial). Como tal, tratamos de evitar cosas que parecen llamadas a procedimientos remotos (RPC o RPI). Tenemos un bus y un sistema de middleware orientado a mensajes, y todos los mensajes se transmiten.
Tendemos a nombrar nuestros mensajes como eventos, es decir, como una frase en el pasado perfecto, por ejemplo PurchaseOrderShipped
. Sin embargo, los eventos a menudo se agregan solo cuando algunos otros servicios necesitan saber sobre ellos, y al principio, a menudo solo un servicio se preocupa. Además, a veces ese servicio emite un evento como resultado, que es escuchado por el primer servicio. Por lo tanto, si tuviera que diagramar la interacción, se parecería mucho más al diagrama para el mensaje de comando en el enlace anterior (o incluso al diagrama RPC) que al del mensaje de evento, aunque una vez más, esto no se implementa realmente con mensajería directa pero transmitida en un autobús. Agregue a eso el hecho de que recientemente he visto algunos mensajes que se nombran como comandos, es decir, una frase en el imperativo, por ejemplo BillShippedPurchaseOrder
.
Lo extraño es que los nombres de los mensajes y la forma en que fluyen no cambian si se nombra como un evento o como un comando. Entonces, ¿cómo se determina si algo debería ser un mensaje de comando o un evento? ¿Es esto solo una diferencia de semántica y denominación, o hay una diferencia de implementación real entre los comandos y los mensajes de eventos? Dado que todos nuestros mensajes se transmiten, ¿eso significa que ninguno de ellos son realmente mensajes de comando?
request for information
funcionalidades? Parece natural usar algo como logetUserInfo(uid)
que es un mensaje de comando que espera una respuesta. Sé que los mensajes de comando introducen el acoplamiento, pero lamentablemente en este caso, no veo cómo implementarlo con mensajes de eventos. ¿O está bien atenerse a los mensajes de comando en algunas ocasiones como esta?