Dois padrões de integração corporativa são a mensagem de comando e a mensagem do evento . Estou trabalhando em um sistema no qual usamos mensagens não apenas para integração com outros sistemas, mas também para comunicação interna entre serviços. Deveria ser um sistema eventualmente consistente , e os serviços deveriam ser ignorantes um do outro (com exceção de alguns serviços para fins especiais). Dessa forma, tentamos evitar coisas que parecem chamadas de procedimento remoto (RPC ou RPI). Temos um sistema de middleware orientado a ônibus e mensagens, e todas as mensagens são transmitidas.
Nós tendemos a nomear nossas mensagens como eventos, ou seja, como uma frase no passado perfeita, por exemplo PurchaseOrderShipped
. No entanto, os eventos geralmente são adicionados apenas quando alguns outros serviços precisam saber sobre eles e, no início, geralmente apenas um serviço se importa. Além disso, às vezes esse serviço emite um evento como resultado, que é ouvido pelo primeiro serviço. Portanto, se eu fizesse um diagrama da interação, ele se pareceria muito mais com o diagrama da mensagem de comando no link acima (ou mesmo com o diagrama RPC) do que com a mensagem do evento, embora, mais uma vez, isso não seja realmente implementado com mensagens diretas, mas transmitidas em um ônibus. Acrescente a isso o fato de eu ter visto recentemente algumas mensagens nomeadas como comandos, ou seja, uma frase no imperativo, por exemplo BillShippedPurchaseOrder
.
O estranho é que os nomes das mensagens e a maneira como elas fluem não são alterados, seja ela nomeada como um evento ou como um comando. Então, como determinar se algo deve ser uma mensagem de comando ou um evento? Isso é apenas uma diferença de semântica e nomeação ou existe uma diferença real de implementação entre mensagens de comando e evento? Dado que todas as nossas mensagens são transmitidas, isso significa que nenhuma delas é realmente uma mensagem de comando?
request for information
funcionalidades? Parece natural usar algo como ogetUserInfo(uid)
que é uma mensagem de comando esperando uma resposta. Eu sei que as mensagens de comando introduzem acoplamento, mas, infelizmente, neste caso, não vejo como implementá-lo com mensagens de evento. Ou é bom ficar com mensagens de comando em ocasiões como essa?CancelPolicyRequest
mensagem que é um comando. A outra abordagem utiliza duas mensagens de evento, a saberInvoicePastDueNotification
ePolicyCancelledNotification
. Então, eu estou querendo saber se é possível alterar comandos como ogetUserInfo(uid)
estilo de mensagens de eventos e como devo fazer isso.Action
associado ao comando. Existem duas etapas associadas a um comando. 1) O comando é necessário (por exemplo, a política expirou) e 2) executa o comando (por exemplo, cancela a política). Se oActor
que determina se o comando é necessário E pode ser executado,Actor
é possível enviar mensagens de eventos. Caso contrário, o que determinar que o comando é necessário é necessário para enviar um evento de comando.Uma mensagem de evento é algo que acabou de acontecer. Você está notificando o evento que acabou de acontecer.
Uma mensagem de comando é uma mensagem que espera que algo seja feito. Pode ou não esperar uma resposta.
Quando usar o que se resume ao acoplamento e a diferença só emergirá ao longo do tempo à medida que os sistemas evoluírem. Favorecer eventos sobre comandos resulta em menos acoplamento. O emissor do evento não se importa com o consumidor. Em um padrão de comando, o responsável pela chamada conhece e, portanto, depende da existência do provedor.
Bill Poole sugere evitar todas as mensagens de comando: http://bill-poole.blogspot.com.au/2008/04/avoid-command-messages.html
http://bill-poole.blogspot.com.au/
fonte