Closed renatocoeli closed 1 month ago
Tentando entender outro problema achei essa issue... mas no código da Evolution, nem existe group.participants.update
, apenas group-participants.update
.
Mas, estou enfrentando justamente a situação de que não consigo receber a notificação quando sou incluido/removido de grupos.. talvez esteja ligado a isso ai.
Fiz um teste agora, escutando todos os eventos, e ao incluir/remover a conta de um grupo não recebi nenhum evento, nem mesmo ao receber mensagens no grupo.
Ao enviar mensagem direta, recebi o evento certinho.
Minhas configurações no manager (todas opções disponíveis marcadas):
Código usado (praticamente o mesmo da documentação:
import amqp from 'amqplib';
class RabbitMQConsumer {
constructor(instanceName) {
this.instanceName = instanceName;
this.connection = null;
this.channel = null;
}
async init() {
try {
this.connection = await amqp.connect(process.env.RABBITMQ_URI);
this.channel = await this.connection.createChannel();
await this.setupExchangesAndQueues();
} catch (error) {
console.log(`Error initializing RabbitMQConsumer: ${error}`);
}
}
async setupExchangesAndQueues() {
let queueBindings = this.getQueueBindings();
for (let { queueName, bindingKey } of queueBindings) {
await this.createQueue(queueName, bindingKey);
this.consumeQueue(queueName);
}
}
getQueueBindings() {
return [
// {
// queueName: `${instanceName}.state.instance`,
// bindingKey: "state.instance"
// },
{
queueName: `${instanceName}.connection.update`,
bindingKey: "state.instance"
},
{
queueName: `${instanceName}.qrcode.update`,
bindingKey: "qrcode.update"
},
{
queueName: `${instanceName}.chats.upsert`,
bindingKey: "chats.upsert"
},
{
queueName: `${instanceName}.contacts.upsert`,
bindingKey: "contacts.upsert"
},
{
queueName: `${instanceName}.contacts.update`,
bindingKey: "contacts.update"
},
{
queueName: `${instanceName}.chats.set`,
bindingKey: "chats.set"
},
{
queueName: `${instanceName}.messages.set`,
bindingKey: "messages.set"
},
{
queueName: `${instanceName}.messages.upsert`,
bindingKey: "messages.upsert"
},
{
queueName: `${instanceName}.messages.update`,
bindingKey: "messages.update"
},
{
queueName: `${instanceName}.groups.upsert`,
bindingKey: "groups.upsert"
},
{
queueName: `${instanceName}.group.update`,
bindingKey: "groups.upsert"
},
{
queueName: `${instanceName}.group.participants.update`,
bindingKey: "groups.upsert"
},
{
queueName: `${instanceName}.qrcode.updated`,
bindingKey: "qrcode.updated"
},
{
queueName: `${instanceName}.connection.update`,
bindingKey: "connection.update"
},
{
queueName: `${instanceName}.messages.upsert`,
bindingKey: "messages.upsert"
},
{
queueName: `${instanceName}.send.message`,
bindingKey: "send.message"
},
// {
// queueName: `${instanceName}.messages.update`,
// bindingKey: "messages.update"
// },
// {
// queueName: `${instanceName}.messages.delete`,
// bindingKey: "messages.delete"
// }
];
}
async createQueue(queueName, bindingKey) {
const options = {
durable: true,
arguments: { 'x-queue-type': 'quorum' } // Adicione esta linha para definir o tipo da fila como 'quorum'
};
await this.channel.assertQueue(queueName, options);
// await this.channel.assertQueue(queueName, { durable: true });
// await this.channel.bindQueue(queueName, instanceName, bindingKey);
}
consumeQueue(queueName) {
this.channel.consume(queueName, message => {
if (message !== null) {
console.log(`Received message from ${queueName}: ${message.content.toString()}`);
this.channel.ack(message);
}
});
}
}
// Uso
const rabbitMQConsumer = new RabbitMQConsumer(instanceName);
rabbitMQConsumer.init();
Olhando as filas no rabbit..
sudo rabbitmqctl list_queues name
Listing queues for vhost / ...
name
tiago-dev.groups.upsert
tiago-dev.chats.upsert
tiago-dev.chats.set
tiago-dev.qrcode.updated
tiago-dev.chats.update
tiago-dev.group-participants.update
tiago-dev.messages.set
tiago-dev.contacts.upsert
tiago-dev.contacts.set
tiago-dev.messages.update
tiago-dev.connection.update
tiago-dev.group.update
tiago-dev.state.instance
tiago-dev.presence.update
tiago-dev.group.participants.update
tiago-dev.call
tiago-dev.send.message
tiago-dev.messages.upsert
tiago-dev.contacts.update
tiago-dev.qrcode.update
tiago-dev.application.startup
tiago-dev.chats.delete
tiago-dev.new.jwt.token
tiago-dev.messages.delete
Confirmam que existem as filas:
tiago-dev.groups.upsert
tiago-dev.group-participants.update
tiago-dev.group.update
tiago-dev.group.participants.update
E, mesmo escutando estas 4, não recebi nenhum evento.
Se alguém puder dar uma luz, agradeço!
Se você também passa por isso, comenta ai.
Do nada o Rabbit para de receber eventos... dai vou lá reinicio tudo, desconecto, conecto novamente.. dai volta (não sei exatamente depois do que).
Agora mesmo, não estou conseguindo fazer voltar a funcionar.... envio mensagem pro numero, e não entra nenhum item novo na queue (olhando pelo RabbitMQ Management).
Ja foi corrigido nas novas versões
Ao ativar o rabbit é criada uma fila chamada group.participants.update [ com o . ]
Porém os eventos seguintes chegam uma fila chamada group-participants.update [ com o - ]