Deux modèles d'intégration d'entreprise sont le message de commande et le message d'événement . Je travaille sur un système dans lequel nous utilisons la messagerie non seulement pour l'intégration avec d'autres systèmes, mais pour la communication interne entre les services. Il est censé être un système cohérent à terme , et les services sont censés s'ignorer les uns les autres (à l'exception de quelques services spécialisés). En tant que tel, nous essayons d'éviter les choses qui ressemblent à des appels de procédure à distance (RPC ou RPI). Nous avons un système de bus et de middleware orienté message, et tous les messages sont diffusés.
Nous avons tendance à nommer nos messages comme des événements, c'est-à-dire comme une phrase parfaite dans le passé, par exemple PurchaseOrderShipped
. Cependant, les événements ne sont souvent ajoutés que lorsque certains autres services ont besoin de les connaître, et au début, souvent un seul service s'en soucie. De plus, parfois ce service émet un événement en conséquence, qui est écouté par le premier service. Ainsi, si je schématisais l'interaction, cela ressemblerait beaucoup plus au diagramme du message de commande dans le lien ci-dessus (ou même au diagramme RPC) qu'à celui du message d'événement, mais encore une fois, cela n'est pas réellement implémenté avec messagerie directe mais diffusée sur un bus. Ajoutez à cela le fait que j'ai récemment vu certains messages ajoutés qui sont nommés comme des commandes, c'est-à-dire une phrase dans l'impératif, par exemple BillShippedPurchaseOrder
.
La chose étrange est que les noms des messages et la façon dont ils circulent ne sont pas modifiés selon qu'ils sont nommés en tant qu'événement ou en tant que commande. Alors, comment déterminer si quelque chose doit être un message de commande ou un événement? S'agit-il simplement d'une différence de sémantique et de dénomination, ou existe-t-il une réelle différence d'implémentation entre les messages de commande et d'événement? Étant donné que tous nos messages sont diffusés, cela signifie-t-il qu'aucun d'eux n'est vraiment un message de commande?
request for information
fonctionnalités? Il semble naturel d'utiliser quelque chose commegetUserInfo(uid)
qui est un message de commande attendant une réponse. Je sais que les messages de commande introduisent le couplage, mais malheureusement dans ce cas, je ne vois pas comment l'implémenter avec des messages d'événement. Ou est-ce bien de s'en tenir aux messages de commande dans certaines occasions comme celle-ci?