Padrão de subscritor do publicadorPublisher-Subscriber pattern

Permita que uma aplicação anuncie os eventos para vários consumidores interessados de forma assíncrona, sem acoplar os remetentes aos destinatários.Enable an application to announce events to multiple interested consumers aynchronously, without coupling the senders to the receivers.

Também denominado: Mensagens pub/subAlso called: Pub/sub messaging

Contexto e problemaContext and problem

Em aplicativos baseados na nuvem e distribuídos, componentes do sistema, muitas vezes, tem de fornecer informações para outros componentes, à medida que ocorrem eventos.In cloud-based and distributed applications, components of the system often need to provide information to other components as events happen.

As mensagens assíncronas são uma forma eficaz de desacoplar remetentes dos consumidores e evitar o bloqueio o remetente de aguardar uma resposta.Asynchronous messaging is an effective way to decouple senders from consumers, and avoid blocking the sender to wait for a response. No entanto, a utilização de uma fila de mensagens dedicada para cada consumidor efetivamente dimensiona para muitos consumidores.However, using a dedicated message queue for each consumer does not effectively scale to many consumers. Além disso, alguns dos consumidores podem se interessar em apenas um subconjunto das informações.Also, some of the consumers might be interested in only a subset of the information. Como pode o remetente anunciar eventos a todos os consumidores interessados sem saber suas identidades?How can the sender announce events to all interested consumers without knowing their identities?

SoluçãoSolution

Introduza um subsistema de mensagens assíncrono que inclui o seguinte:Introduce an asynchronous messaging subsystem that includes the following:

  • Um canal entrado de mensagens utilizado pelo remetente.An input messaging channel used by the sender. O remetente pacotes eventos em mensagens, usando um formato de mensagem conhecido e envia essas mensagens através do canal de entrada.The sender packages events into messages, using a known message format, and sends these messages via the input channel. O remetente neste padrão também é denominado o publicador.The sender in this pattern is also called the publisher.

    Nota

    R mensagem é um pacote de dados.A message is a packet of data. Uma evento é uma mensagem que notifica a outros componentes sobre uma alteração ou uma ação que foi tomada.An event is a message that notifies other components about a change or an action that has taken place.

  • Um canal de mensagens por consumidor de saída.One output messaging channel per consumer. Os consumidores são conhecidos como os assinantes.The consumers are known as subscribers.

  • Um mecanismo para copiar cada mensagem de canal de entrada para os canais de saída para todos os assinantes interessados em que a mensagem.A mechanism for copying each message from the input channel to the output channels for all subscribers interested in that message. Esta operação normalmente é manipulada por um intermediário, como um barramento de evento ou de Mediador de mensagem.This operation is typically handled by a intermediary such as a message broker or event bus.

O diagrama seguinte mostra os componentes lógicos deste padrão:The following diagram shows the logical components of this pattern:

Padrão de publicação-subscrição através de um mediador de mensagens

Mensagens pub/sub tem as seguintes vantagens:Pub/sub messaging has the following benefits:

  • Dissocia subsistemas que precisarem de comunicar.It decouples subsystems that still need to communicate. Subsistemas podem ser geridos de forma independente e mensagens podem ser adequadamente gerenciadas, mesmo se um ou mais recetores estão offline.Subsystems can be managed independently, and messages can be properly managed even if one or more receivers are offline.

  • Ele aumenta a escalabilidade e melhora a capacidade de resposta do remetente.It increases scalability and improves responsiveness of the sender. O remetente pode rapidamente enviar uma única mensagem para o canal de entrada, em seguida, regresse ao seu núcleo responsabilidades de processamento.The sender can quickly send a single message to the input channel, then return to its core processing responsibilities. A infraestrutura de mensagens é responsável por garantir que as mensagens são entregues para os assinantes interessados.The messaging infrastructure is responsible for ensuring messages are delivered to interested subscribers.

  • Melhora a fiabilidade.It improves reliability. Mensagens assíncronas, ajuda a aplicativos que continuam a funcionar sem problemas com maior cargas e com mais eficiência a lidar com falhas intermitentes.Asynchronous messaging helps applications continue to run smoothly under increased loads and handle intermittent failures more effectively.

  • Ele permite processamento diferido ou agendado.It allows for deferred or scheduled processing. Os assinantes podem esperar de retirada de mensagens até das horas de ponta, ou mensagens podem ser encaminhadas ou processadas de acordo com uma agenda específica.Subscribers can wait to pick up messages until off-peak hours, or messages can be routed or processed according to a specific schedule.

  • Ele permite a integração mais simples entre sistemas usando diferentes plataformas, de programação idiomas ou protocolos de comunicação, bem como entre sistemas no local e aplicações em execução na cloud.It enables simpler integration between systems using different platforms, programming languages, or communication protocols, as well as between on-premises systems and applications running in the cloud.

  • Isso facilita a fluxos de trabalho assíncronos de uma empresa.It facilitates asynchronous workflows across an enterprise.

  • Melhora a capacidade de teste.It improves testability. Canais podem ser monitorizados e as mensagens podem ser inspecionadas ou com sessão iniciadas como parte de uma estratégia de teste de integração geral.Channels can be monitored and messages can be inspected or logged as part of an overall integration test strategy.

  • Ele fornece separação de problemas para as suas aplicações.It provides separation of concerns for your applications. Cada aplicativo pode se concentrar em suas principais funcionalidades, enquanto a infraestrutura de mensagens lida com tudo, necessário para fiável rotear mensagens para vários consumidores.Each application can focus on its core capabilities, while the messaging infrastructure handles everything required to reliably route messages to multiple consumers.

Problemas e consideraçõesIssues and considerations

Na altura de decidir como implementar este padrão, considere os seguintes pontos:Consider the following points when deciding how to implement this pattern:

  • Tecnologias existentes.Existing technologies. Recomenda-se vivamente a utilizar produtos disponíveis do sistema de mensagens e serviços que suportam um publicar-subscrever o modelo, em vez de criar seu próprio.It is strongly recommended to use available messaging products and services that support a publish-subscribe model, rather than building your own. No Azure, considere a utilização do Service Bus ou Event Grid.In Azure, consider using Service Bus or Event Grid. Outras tecnologias que podem ser utilizadas para mensagens pub/sub incluem Redis, o RabbitMQ e o Apache Kafka.Other technologies that can be used for pub/sub messaging include Redis, RabbitMQ, and Apache Kafka.

  • Manipulação de subscrição.Subscription handling. A infraestrutura de mensagens deve fornecer mecanismos que os consumidores podem utilizar ao subscrever ou anular a subscrição de canais disponíveis.The messaging infrastructure must provide mechanisms that consumers can use to subscribe to or unsubscribe from available channels.

  • Segurança.Security. Ligar a qualquer canal de mensagem deve ser restritos pela política de segurança para impedir a espionagem por utilizadores não autorizados ou aplicativos.Connecting to any message channel must be restricted by security policy to prevent eavesdropping by unauthorized users or applications.

  • Subconjuntos de mensagens.Subsets of messages. Subscritores normalmente só estão interessados em subconjunto das mensagens distribuídas por um fabricante.Subscribers are usually only interested in subset of the messages distributed by a publisher. Serviços de mensagens, muitas vezes, permitir que os subscritores de restringir o conjunto de mensagens recebidas pelo:Messaging services often allow subscribers to narrow the set of messages received by:

    • Tópicos.Topics. Cada tópico tem um canal de saída dedicada e cada consumidor pode subscrever todos os tópicos relevantes.Each topic has a dedicated output channel, and each consumer can subscribe to all relevant topics.
    • Filtragem de conteúdo.Content filtering. As mensagens são inspecionadas e distribuídas com base no conteúdo de cada mensagem.Messages are inspected and distributed based on the content of each message. Cada subscritor pode especificar o conteúdo que está interessada em.Each subscriber can specify the content it is interested in.
  • Assinantes de caráter universal.Wildcard subscribers. Considere o que permite que os subscritores de subscrever vários tópicos por meio de carateres universais.Consider allowing subscribers to subscribe to multiple topics via wildcards.

  • Comunicação bidirecional.Bi-directional communication. Os canais num publicar-subscrever sistema são tratados como unidirecionais.The channels in a publish-subscribe system are treated as unidirectional. Se um assinante específico tem de enviar confirmação ou comunicar o estado de volta para o publicador, considere utilizar o padrão de solicitação/resposta.If a specific subscriber needs to send acknowledgement or communicate status back to the publisher, consider using the Request/Reply Pattern. Este padrão utiliza um canal para enviar uma mensagem para o subscritor e um canal de resposta separado para se comunicar com o publicador.This pattern uses one channel to send a message to the subscriber, and a separate reply channel for communicating back to the publisher.

  • Ordenação de mensagens.Message ordering. A ordem na qual instâncias de consumidor recebem mensagens não é garantida e não reflete necessariamente a ordem na qual as mensagens foram criadas.The order in which consumer instances receive messages isn't guaranteed, and doesn't necessarily reflect the order in which the messages were created. Crie o sistema para garantir que o processamento de mensagens é idempotente para ajudar a eliminar qualquer dependência na ordem de processamento de mensagens.Design the system to ensure that message processing is idempotent to help eliminate any dependency on the order of message handling.

  • Prioridade da mensagem.Message priority. Algumas soluções podem exigir que as mensagens são processadas por uma ordem específica.Some solutions may require that messages are processed in a specific order. O padrão de fila de prioridade fornece um mecanismo para garantir que mensagens específicas são entregues antes de outras pessoas.The Priority Queue pattern provides a mechanism for ensuring specific messages are delivered before others.

  • Mensagens não processáveis.Poison messages. Uma mensagem incorretamente formada ou uma tarefa que requer acesso a recursos indisponíveis pode fazer com que uma instância de serviço falhe.A malformed message, or a task that requires access to resources that aren't available, can cause a service instance to fail. O sistema deve impedir que estas mensagens sejam devolvidas à fila.The system should prevent such messages being returned to the queue. Em vez disso, capturar e armazenar os detalhes destas mensagens noutro local, para que possam ser analisadas, se necessário.Instead, capture and store the details of these messages elsewhere so that they can be analyzed if necessary.

  • Mensagens repetidas.Repeated messages. A mesma mensagem poderá ser enviada mais do que uma vez.The same message might be sent more than once. Por exemplo, o remetente poderá falhar depois de publicar uma mensagem.For example, the sender might fail after posting a message. Em seguida, uma nova instância do remetente poderá iniciar e repetir a mensagem.Then a new instance of the sender might start up and repeat the message. A infraestrutura de mensagens deve implementar mensagem duplicada detecção e remoção (duping também conhecido como anular) com base em IDs de mensagem para fornecer a maior parte-uma entrega de mensagens.The messaging infrastructure should implement duplicate message detection and removal (also known as de-duping) based on message IDs in order to provide at-most-once delivery of messages.

  • Expiração de mensagem.Message expiration. Uma mensagem pode ter uma duração limitada.A message might have a limited lifetime. Se ele não é processado dentro deste período, ele já não pode ser relevante e deverá ser eliminado.If it isn't processed within this period, it might no longer be relevant and should be discarded. Um remetente pode especificar um período de tempo experiation como parte dos dados na mensagem.A sender can specify an experiation time as part of the data in the message. Um recetor pode examinar estas informações antes de decidir se pretende efetuar a lógica de negócios associada à mensagem.A receiver can examine this information before deciding whether to perform the business logic associated with the message.

  • Agendamento da mensagem.Message scheduling. Uma mensagem poderá ser temporariamente embargoed e não deve ser processada até uma data e hora específicas.A message might be temporarily embargoed and should not be processed until a specific date and time. A mensagem não deve estar disponível para um recetor até este momento.The message should not be available to a receiver until this time.

Quando utilizar este padrãoWhen to use this pattern

Utilize este padrão quando:Use this pattern when:

  • Um aplicativo precisa difundir informações para um número significativo de consumidores.An application needs to broadcast information to a significant number of consumers.

  • Um aplicativo precisa para comunicar com um ou mais aplicações desenvolvidas de forma independente ou em serviços, que podem utilizar diferentes plataformas, linguagens de programação e protocolos de comunicação.An application needs to communicate with one or more independently-developed applications or services, which may use different platforms, programming languages, and communication protocols.

  • Uma aplicação pode enviar informações para os consumidores sem a necessidade de respostas em tempo real dos consumidores.An application can send information to consumers without requiring real-time responses from the consumers.

  • Os sistemas que está a ser integrados foram concebidos para suportar um modelo de consistência eventual para seus dados.The systems being integrated are designed to support an eventual consistency model for their data.

  • Um aplicativo precisa para comunicar informações para vários consumidores, que pode ter requisitos de disponibilidade diferente ou agendas de tempo de atividade que o remetente.An application needs to communicate information to multiple consumers, which may have different availability requirements or uptime schedules than the sender.

Este padrão poderá não ser prático quando:This pattern might not be useful when:

  • Um aplicativo tem apenas alguns consumidores que precisam significativamente diferentes informações da aplicação de produção.An application has only a few consumers who need significantly different information from the producing application.

  • Um aplicativo exigir quase em tempo real interação com os consumidores.An application requires near real-time interaction with consumers.

ExemploExample

O diagrama seguinte mostra uma arquitetura de integração do enterprise que utiliza o Service Bus para coordenar fluxos de trabalho e notificar o Event Grid subsistemas de eventos que ocorrem.The following diagram shows an enterprise integration architecture that uses Service Bus to coordinate workflows, and Event Grid notify subsystems of events that occur. Para obter mais informações, consulte integração empresarial no Azure ao utilizar mensagens de filas e os eventos.For more information, see Enterprise integration on Azure using message queues and events.

Arquitetura de integração do Enterprise

Os padrões e as orientações que se seguem podem ser relevantes ao implementar este padrão:The following patterns and guidance might be relevant when implementing this pattern:

  • Escolha entre os serviços do Azure que entregam mensagens.Choose between Azure services that deliver messages.

  • O estilo de arquitetura condicionada por eventos é um estilo de arquitetura que utiliza mensagens pub/sub.The Event-driven architecture style is an architecture style that uses pub/sub messaging.

  • Asynchronous Messaging Primer (Manual Básico de Mensagens Assíncronas).Asynchronous Messaging Primer. As Filas de mensagens são um mecanismo de comunicação assíncrono.Message queues are an asynchronous communications mechanism. Se um serviço de consumidor precisar de enviar uma resposta para uma aplicação, poderá ser necessário implementar alguma forma de mensagem de resposta.If a consumer service needs to send a reply to an application, it might be necessary to implement some form of response messaging. O Manual Básico de Mensagens Assíncronas fornece informações sobre como implementar mensagens de pedido/resposta com filas de mensagens.The Asynchronous Messaging Primer provides information on how to implement request/reply messaging using message queues.

  • Padrão observador.Observer Pattern. O padrão de publicação-subscrição tem por base o padrão Observer ao desassociar assuntos de observadores por meio de mensagens assíncronas.The Publish-Subscribe pattern builds on the Observer pattern by decoupling subjects from observers via asynchronous messaging.

  • Padrão de Mediador de mensagens.Message Broker Pattern. Vários subsistemas de mensagens que suportam um publicar-subscrever modek são implementadas através de um mediador de mensagens.Many messaging subsystems that support a publish-subscribe modek are implemented via a message broker.