0

I use RPC endpoints and in one of them I have the following problem: I do not receive a message so the callback function is not executed on channel.consume().

At that endpoint, I send a message, a process that takes time is running on the server side and it responds to me with a message about whether the process was executed correctly. At other endpoints where the message is sent immediately by the server there is no problem.

I think there is a problem with the timeout. I tried to place the object {timeout: 3600000} after amqpOptions but again the problem was not solved. Specifically, the connection and channel objects have the same parameters regardless of the object I added. How could I change the timeout correctly?

const amqp = require('amqplib/callback_api');
const amqpOptions = {
  protocol: 'amqp',
  hostname: process.env.RABBITMQ_HOST,
  port: process.env.RABBITMQ_PORT,
  username: process.env.RABBITMQ_USER,
  password: process.env.RABBITMQ_PASS,
  vhost: '/',
};
const message = Buffer.from(JSON.stringify({}));
      amqp.connect(amqpOptions, (error0, connection) => {
        if (error0) { throw error0; }
        connection.createChannel((error1, channel) => {
          if (error1) { throw error1; }
          const correlationId = generateUuid();
          channel.consume(replyQueue, (msg) => {
            if (JSON.parse(msg.content).error) {
              console.log(JSON.parse(msg.content));
              const error = JSON.parse(msg.content.toString());
              return next(error);
            } 
            console.log(JSON.parse(msg.content));
            console.log('msg:',msg);
            const {tunnel_info} = JSON.parse(msg.content.toString());
          }, {noAck: true});
          channel.sendToQueue(`${brokerUri}`,
            message, {correlationId, contentType: 'application/json', contentEncoding: 'utf8', replyTo: replyQueue});
        });
      });
glo
  • 75
  • 6

1 Answers1

0

Because channel is unidirectional. You should use two different channels for Publish and Consume.

AMQP specification says:

Channels are unidirectional, and thus at each connection endpoint the incoming and outgoing channels are completely distinct.

menya
  • 1,459
  • 7
  • 8
  • The same code has been written for other URIs, but because the message is sent immediately from server, I did not have a problem. – glo Nov 20 '20 at 10:00