
O que é uma fila de mensagens?
Uma fila de mensagens é um contêiner que salva mensagens durante o processo de transmissão de mensagens. É essencialmente uma fila (primeiro a entrar, primeiro a sair).

消息refere-se aos dados que precisam ser transmitidos, que podem ser algum texto, string ou objeto e outras informações.
消息队列é um serviço de comunicação entre duas aplicações.产生者da mensagem pode devolvê-la imediatamente após armazenar os dados na fila de mensagens, sem esperar接收者da mensagem. Ou seja:生产者garante que os dados sejam inseridos na fila, e não importa quem recebe a mensagem.接收者da mensagem se concentra apenas em recebê-la e processá-la.

Que
desacoplamento a fila de mensagens pode fazer Conforme apresentado acima, a fila de mensagens separa o produtor da mensagem e o receptor da mensagem, e nenhum deles é afetado pelo outro.
Assíncrono Assíncrono visa reduzir o tempo de resposta das solicitações. O produtor da mensagem só precisa processar a lógica simples e colocar os dados na fila de mensagens para retornar. Lógica complexa, como operações de banco de dados e operações de IO, são tratadas pelo receptor. a mensagem.
Redução de pico Quando o aplicativo de fila de mensagens está atendendo, ele pode salvar o fluxo instantâneo de informações de solicitação na fila de mensagens e devolvê-lo imediatamente. A solicitação é então processada com base nos dados do destinatário da mensagem.
Cenários de aplicação: atividades de jogos, atividades de venda relâmpago, realização de pedidos, etc., que causarão aumento instantâneo de tráfego.
Depois de apresentar as informações básicas da fila de mensagens, antes de desenvolver a fila de mensagens, vamos apresentar alguns conceitos básicos de fila de mensagens ~
produtor (produtor) e consumidor (cliente) de mensagens生产者e消费者mencionados acima
.
fornecer
links, canais e filas
Conexão: representa um link entre o programa de serviço e a fila de mensagens. Um programa de serviço pode criar vários links .
Canal: um canal entre links de fila de mensagens Um link pode ter vários canais .
Fila: uma fila que armazena dados em uma fila de mensagens. Um serviço de fila de mensagens pode ter várias filas.
Resumindo, a relação entre links e filas de canais é assim

do Exchange (troca)
deve ter uma troca ao enviar mensagens . Se não for especificado, a troca padrão será usada. A função do switch é enviar mensagens para a fila correspondente. Há um total de 4 tipos de switches na fila de mensagens
: Direto: Especifique o modo de fila Quando uma mensagem chegar, ela será enviada apenas para a Fila especificada e outras Filas não a receberão.
fanout: Modo Broadcast, quando chega uma mensagem, ela será enviada para todas as filas.
tópico: modo de correspondência difusa, encaminhamento correspondente por meio de correspondência difusa.
cabeçalho: semelhante ao modo direto.
preparar instalar coelhomq

Em seguida, visite http://localhost:15672/ localmente para ver o histórico do serviço RabbitMQ. A senha inicial da conta é guest

amqplib é um conjunto de ferramentas para usar filas de mensagens no nó, o que nos permite usar filas de mensagens rapidamente.
Criar produtorEndereço: https://www.npmjs.com/package/amqplib
/**produto.js consumidor*/
const amqplib = require('amqplib');
constconfig = require('./config');
const {conectUrl} =config;
(assíncrono() => {
conexão const = aguarda amqplib.connect(connectUrl);
const canal = aguarda conexão.createChannel();
const exchangeName = 'testExchange';
chave const = 'testQueue';
const sendMsg = 'olá coelhomq';
// Conheça o tipo de switch await channel.assertExchange(exchangeName, 'fanout', {
durável: verdadeiro,
});
//Especifique uma fila await channel.assertQueue(key);
for (seja i = 0; i < 100; i++) {
canal.publish(exchangeName, chave, Buffer.from(`${sendMsg} ${i}`));
}
aguarde canal.close();
aguarde conexão.close();
})();Após a execução, você pode ver em segundo plano que uma nova fila com 100 mensagens foi adicionada.

/** cliente.js consumidor*/
const amqplib = require('amqplib');
constconfig = require('./config');
const {conectUrl} =config;
(assíncrono() => {
deixe conexão = aguarde amqplib.connect(connectUrl);
const exchangeName = 'testExchange';
chave const = 'testQueue';
//Cria dois canais const channel1 = await connection.createChannel();
const canal2 = aguarda conexão.createChannel();
//Especifique uma troca await channel1.assertExchange(exchangeName, 'fanout', {
durável: verdadeiro,
});
//Especifique uma fila await channel1.assertQueue(key);
aguarde canal1.bindQueue(chave, exchangeName, chave);
canal1.consume(chave, (msg) => {
console.log('canal 1', msg.content.toString());
});
aguarde canal2.assertExchange(exchangeName, 'fanout', {
durável: verdadeiro,
});
aguarde canal2.assertQueue(chave);
aguarde canal2.bindQueue(chave, exchangeName, chave);
canal2.consume(chave, (msg) => {
console.log('canal 2', msg.content.toString());
});
})();Após a execução, você pode ver que os dois canais podem funcionar ao mesmo tempo para receber mensagens.
