Em um ambiente onde vários aplicativos de servidor de alta transação precisam se comunicar entre si, é importante encontrar o melhor canal de comunicação para eles. Um modelo de editor/assinante (PubSub) é uma das formas mais populares quando se trata de fornecer uma plataforma de comunicação para seus aplicativos. Todos sabemos o que estes médiuns têm em comum; vários clientes publicam mensagens e vários clientes podem assiná-las. Tudo isso acontece de forma extremamente dissociada, o que significa que o editor não envia as mensagens diretamente aos clientes assinantes. Em vez disso, um barramento de mensagens é usado como canal intermediário através do qual todos os clientes se comunicam.
Resumindo, as mensagens PubSub são um método em que nem o editor nem o assinante sabem nada sobre a identidade um do outro.
Vamos parar um momento para pensar sobre o que acontece quando o número de editores e assinantes aumenta. Quanto maior for esse número, maior será a carga de mensagens. Essa situação faz com que sua plataforma PubSub induza gargalos de escalabilidade, o que anula o objetivo principal de introduzir uma interface de mensagens desacoplada.
Vejamos uma solução que não apenas herda o funcionamento geral do pub/sub, mas também adiciona várias outras funcionalidades para sua facilidade; um método que é rápido e extremamente escalável.
NCache Adicionar ao carrinho NCache Pub/Subdocumentos Escala Pub/Sub Messaging-Webinar
utilização NCache PubSub na memória
NCache fornece caches distribuídos rápidos, flexíveis e mais linearmente escaláveis para seu aplicativo .NET.
utilização NCache já que sua plataforma PubSub orientada a eventos pode ser extremamente benéfica se você planeja dimensionar seu aplicativo em qualquer lugar. Ele evita a ocorrência de gargalos em seu sistema.
Veja como NCache atua como um barramento de mensagens para seu aplicativo:
NCache atua como uma interface intermediária para sua implementação do Pub/Sub. A figura ilustra que não apenas um, mas vários clientes podem se inscrever em um ou vários tópicos por vez.
Qualquer número de aplicativos pode se conectar ao cache e começar a publicar mensagens no NCache servidores. Essas mensagens são então assinadas por vários clientes de acordo com seus requisitos. Através NCache, você decide se todos ou apenas um assinante recebe as mensagens publicadas. Ao fazê-lo, NCache atua como um barramento de mensagens para seus aplicativos de servidor .NET.
NCache Adicionar ao carrinho Pub / Sub NCache Eventos do Pub/Sub
Exemplo rápido do PubSub com NCache
Vamos supor que eu tenha um aplicativo de jogos online que está sendo usado por jogadores de todo o mundo. Em meu aplicativo, tenho um recurso que incorpora não apenas comunicações de áudio, mas também mensagens de tempo de execução. Vários jogadores enviam mensagens contra um canal e para os jogadores de sua própria equipe ao mesmo tempo.
Considerando o número de jogadores que jogam o jogo, a carga de mensagens será enorme. O que eu preciso aqui é uma interface de comunicação que aumente o desempenho do meu jogo. E para isso, prefiro NCache como o barramento de mensagens do meu jogo.
A seguir está o trecho que eu uso para implementar um cenário em que aplicativos de servidor podem publicar e receber mensagens. Este código mostra como você obtém um tópico e publica uma mensagem sobre ele.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// Precondition: Cache is already connected // Get the topic ITopic teamChat = cache.MessagingService.GetTopic("RuntimePlayerComms"); // Create the object to be sent in message // Get information of the player through player ID Player teamLeader = FetchInfo(1); // Create the message var newChatMessage = new Message(teamLeader); // Set the expiration time of the message newChatMessage.ExpirationTime = TimeSpan.FromSeconds(60); // Publish the message with delivery option set to All subscribers teamChat.Publish(newChatMessage, DeliveryOption.All, true); |
Depois que uma mensagem é publicada em um tópico, os assinantes criam assinaturas nesse tópico para receber mensagens. O código a seguir demonstra como os aplicativos de assinatura se inscrevem em um determinado tópico para receber as mensagens desejadas.
1 2 3 4 5 6 7 8 9 |
// Precondition: Cache is already connected // Get the topic ITopic teamChat = cache.MessagingService.GetTopic("RuntimePlayerComms"); // Create and register subscribers for the topic // MessageReceived is the callback through which the message is delivered ITopicSubscription subscriber = teamChat.CreateSubscription(MessageReceived); |
NCache Adicionar ao carrinho Publicar mensagens Assinar mensagens
Até agora, tudo o que falei foi sobre o funcionamento geral do pub/sub, mas o que você realmente precisa saber são os comprimentos extras que NCache vai ao encontro das suas necessidades.
Você está se perguntando quais são essas “outras funcionalidades” que eu exclamei anteriormente? Vamos direto aos recursos oferecidos exclusivamente por NCache.
Assinaturas duráveis exclusivas
Normalmente, quando um cliente assina um tópico, essa assinatura é conhecida como assinatura não durável, o que significa que, se o cliente se desconectar do servidor, todas as suas assinaturas serão perdidas.
NCache fornece assinaturas duráveis. Nesse caso, mesmo que a conexão entre o servidor e o cliente seja interrompida, todas as assinaturas desse cliente permanecerão intactas. Assim, quando o cliente é reconectado, ele recebe todas as mensagens que foram publicadas enquanto o assinante estava desconectado.
A maneira como você executa esse cenário em seu aplicativo é simples. Você adiciona a seguinte linha de código em seu aplicativo para implementar uma assinatura durável exclusiva.
1 2 3 4 5 6 7 8 |
// Create and register subscribers for the topic // MessageReceived callback is specified // The subscription policy is Exclusive IDurableTopicSubscription subscriber = teamChat.CreateDurableSubscription("RuntimePlayerComms", SubscriptionPolicy.Exclusive, MessageReceived, TimeSpan.FromMinutes(20)); |
Enquanto a conexão estiver ativa, nenhum novo cliente poderá assinar essa assinatura. Caso esta conexão seja interrompida, as mensagens são mantidas e quando a conexão é restabelecida, elas são enviadas ao cliente. Isso é feito para que nenhuma mensagem seja perdida.
NCache Adicionar ao carrinho Pub / Sub NCache Assinaturas duráveis
Assinaturas duráveis compartilhadas
Além das assinaturas exclusivas, a durabilidade também pode ser alcançada por meio de assinaturas compartilhadas. Nesse tipo de assinatura, mais de um cliente pode assinar uma única assinatura. Isso serve ao propósito de compartilhamento de carga.
As assinaturas compartilhadas usam o método Round Robin para enviar mensagens a todos os clientes conectados. Assim, mesmo que um cliente seja desconectado, as mensagens continuam sendo distribuídas entre os demais assinantes.
Uma assinatura permanece ativa enquanto houver um único cliente conectado a ela. O código a seguir é como meu aplicativo de jogos online implementa assinaturas duráveis compartilhadas.
1 2 3 4 5 6 7 8 9 |
// Create and register subscribers for the topic // MessageReceived callback is specified // The subscription policy is Shared IDurableTopicSubscription subscriber = teamChat.CreateDurableSubscription("RuntimePlayerComms", SubscriptionPolicy.Shared, MessageReceived, TimeSpan.FromMinutes(20)); |
Por padrão, essas assinaturas são exclusivas que permitem exatamente um assinante por assinatura.
Assinaturas baseadas em padrões
Às vezes, em vez de assinar assinaturas nomeadas uma a uma, é fornecido um padrão sob o qual todos os tópicos, presentes e futuros, são assinados de uma só vez. Para acomodar isso, NCache facilita seus clientes fornecendo assinaturas baseadas em padrões. Por meio desse método, um tópico ou vários tópicos que se enquadram no padrão fornecido podem ser inscritos facilmente.
Para conhecer os tipos de curingas suportados por NCacheassinaturas do PubSub, consulte NCache documentação sobre Assinaturas baseadas em padrões.
A seguir está um trecho de exemplo de como uso curingas baseados em padrões em meu aplicativo de jogo.
1 2 3 4 5 6 |
// Only ? * [] wildcards supported string topicName = "team*"; string subscriptionName = "TeamPlayersComms"; // Get the topic ITopic teamChat = cache.MessagingService.GetTopic(topicName, TopicSearchOptions.ByPattern); |
Sua marca NCache para PubSub?
Por que favorecer NCache, você pode perguntar? Nós vamos… NCache is
- rápido porque é uma solução na memória.
- linearmente escalável porque você pode adicionar servidores adicionais em tempo de execução; a qualquer momento.
- flexível, pois reequilibra automaticamente os dados dinamicamente sem qualquer intervenção do cliente.
Do jeito que eu vejo, NCache fornece a melhor, mais escalável e mais rápida maneira de acomodar a comunicação de mensagens em seu aplicativo. O fato de que NCache é uma solução de cache distribuído na memória é suficiente para combater quaisquer gargalos que possam surgir devido ao carregamento de mensagens. Agora, esta é a situação ganha-ganha que você precisa em seu aplicativo .NET.
NCache Adicionar ao carrinho Comparação de edições NCache Baixar