Push INBOX contagens não lidas sobre NATS/WebSocket em vez de votação

FeatureEmailService
Navios
6 de agosto de 2026 às 11:58 UTC
Autor
Kamo
Enviar
145fb64

O crachá de e- mail do topo do navegador no kamo- interno atualizou- se chamando /api/email/pastas a cada 30 segundos, por guia do navegador. Esse endpoint caminha o toda a árvore de pastas e abre todas as pastas somente para responder, então o custo de um inteiro foi um resumo completo da caixa postal, repetido indefinidamente. O WebSocket que já existia apenas anunciou que o correio tinha chegado e não tinha conta, Então o seu único trabalho era acionar outra sondagem. Publicar a própria contagem: - EmailUnreadSnapshot on NATS email.unread.<addr>, retransmitido para STOMP /tópico/email/não lido/<memberId>. NATS está no caminho porque o pod que observa uma mudança rotineiramente não é o pod segurando WebSocket do membro. - EmailUnreadEditor coalesces por caixa de correio, então uma entrega IDLE de dez mensagens ou uma página de correio marcado lido é uma viagem de ida e volta IMAP e uma publicação, fora do Linha de chamada. - MailReader.getUnreadCount lê uma pasta. O gráfico responde da pasta lista já retorna; provedores com suporte de IMAP sobrepõem-no com um único Status (UNSEEN). - Um snapshot é publicado em subscrição, em mensagens IDLEAdded/mensagensRemovidas, na bandeira IMAP muda, e a partir da marca-leitura / bandeiras / mover / excluir / spam endpoints. Três lacunas que também encerram: - As mudanças na bandeira eram invisíveis. Lendo e- mail em Roundcube ou em um conjunto de telefone \Viu sem adicionar ou remover uma mensagem, então o crachá só caiu quando O navegador seguinte foi pesquisado. IDLE agora carrega uma mensagemChangedListener. - Caixas de correio sem sinal. EmailWebSocketController resolvido credenciais através da tabela kamoMail virtual users, que não tem linha para membro no Microsoft 365 ou Google Workspace, então subscreva () registrou um aviso e voltou. Agora ele resolve através do MailProviderResolver, e IDLE conecta com a especificação de credencial (host/port/TLS/XOAUTH2) através de uma ImapStorefactory.connect em vez de assumir a máquina KamoMail e uma Senha. - As sessões vazaram. Uma aba fechada nunca envia /email/unsubscribe, então caixas de correio são agora referência contada por sessão STOMP e lançada em SessionDesconnectEvent. Caixas de correio sem ouvinte IDLE ao vivo — Gráfico, depois da tampa de ligação 50 ou thread IDLE morto — são varridos para servidor a cada 60s e publicados para o mesmo tópico. Isso substitui a votação per-tab em vez de empurrar: uma varredura serve cada tab um membro tem aberto, a associação é re-testado cada passe para que um ouvinte morto é captado, e o navegador ainda recebe a contagem sobre o WebSocket. MessageIndexerr vincula email.> e deserializou tudo nele como uma mensagem, então ele agora ignora assuntos fora do email.inbox. — filtrado no manipulador em vez do que por estreitar a assinatura, porque email-metadata-indexer é um durável o consumidor e a alteração do seu assunto de filtro rejeitariam a assinatura em cada pod até que o durável foi excluído à mão.

Todas as alterações

Como o que vês no transporte?

Cada uma dessas atualizações pousa automaticamente em seu espaço de trabalho. Comece grátis e veja crescer semana após semana.

Começar Livre Para SempreVer Preços