【问题标题】:How do i make http request from RabbitMQ message - nodejs我如何从 RabbitMQ 消息发出 http 请求 - nodejs
【发布时间】:2023-03-07 17:59:01
【问题描述】:
import * as Amqp from "amqp-ts";

const fetch = require('node-fetch');

let connection = new Amqp.Connection("amqp://admin:admin@localhost");
let exchange = connection.declareExchange("ExchangeName");
let queue = connection.declareQueue("nodejs");
queue.bind(exchange);
queue.activateConsumer(async (message) => {
  const site: string = message.getContent().site;
  console.log(site)
  const response = await fetch(site)
  console.log(response.status);
});

非常简单的小sn-p,问题是JS从RabbitMQ获取消息,然后触发请求并从RabbitMQ获取新消息。

问题在于它首先获取所有消息并触发所有请求,然后尝试解决它们 - 所以它最终只是自己获取所有消息。

什么是一个好方法(或者只是一种可行的方法)来设置 nodejs 应该允许在任何时候处理的最大消息数?

【问题讨论】:

    标签: node.js rabbitmq


    【解决方案1】:
    import * as Amqp from "amqp-ts";
    
    const fetch = require('node-fetch');
    const axios = require('axios')
    
    let connection = new Amqp.Connection("amqp://admin:admin@localhost");
    // let exchange = connection.declareExchange("ExchangeName");
    let queue = connection.declareQueue("nodejs");
    // queue.bind(exchange);
    
    queue.prefetch(500);
    queue.activateConsumer(async (message) => {
      const site: string = message.getContent().site;
      console.log(site)
      axios(site).then((response: any) => {
        console.log(response.status);
        message.ack();
      })
    }).then(({consumerTag}) => {
      console.log(consumerTag)
    });
    

    所以找到了答案,我找到的解决方案首先是确认消息已成功发送

     message.ack();
    

    第二个是在未确认消息中添加最大允许的消息

    queue.prefetch(500);
    

    这就像一个魅力!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-01
      • 2013-11-01
      • 1970-01-01
      • 2017-03-06
      • 2015-04-21
      • 2017-10-31
      • 2021-07-20
      • 2017-03-09
      相关资源
      最近更新 更多