You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native使用RabbitMQ:已连服务器,求消息接收完整示例

React Native中用react-native-rabbitmq接收RabbitMQ消息的实战方案

嘿,我前阵子刚在React Native里折腾完RabbitMQ的消息接收,和你的情况几乎一模一样——先是搞定了模拟器和服务器的连接,能看到消息乖乖进队列,但就是卡在接收这一步。后来对着react-native-rabbitmq的文档反复试,终于跑通了,给你分享下我的实操经验:

第一步:先确认基础配置没问题

你已经能看到消息进队列,说明连接和队列声明的基础逻辑是对的,但还是贴一下我这边的初始化代码方便你对照:

import { RabbitMQ } from 'react-native-rabbitmq';

// 你的RabbitMQ服务器配置,根据实际情况修改
const rabbitConfig = {
  host: '你的服务器IP/域名',
  port: 5672,
  username: '你的用户名',
  password: '你的密码',
  virtualhost: '/',
  ssl: false // 如果服务器开启了SSL就设为true
};

let rabbitConnection;
let rabbitChannel;
let targetQueue;

// 初始化连接和信道
const initRabbitMQ = async () => {
  try {
    rabbitConnection = await RabbitMQ.createConnection(rabbitConfig);
    await rabbitConnection.connect();
    
    // 创建信道,RabbitMQ的核心操作基本都在信道上完成
    rabbitChannel = await rabbitConnection.createChannel();
    
    // 声明队列,要和你发送消息的队列名完全一致!
    targetQueue = await rabbitChannel.assertQueue('test_queue', { durable: true });
    
    // 连接成功后再设置消息监听
    startListeningMessages();
  } catch (err) {
    console.error('RabbitMQ初始化出错:', err);
  }
};

第二步:正确实现消息接收逻辑

你提到的queue.on('message', ...)是核心,但光写这个还不够,得先让信道去消费队列的消息,不然RabbitMQ不会把消息推给你的App。给你贴完整的监听代码:

const startListeningMessages = () => {
  // 关键步骤:调用channel.consume告诉RabbitMQ要消费这个队列的消息
  rabbitChannel.consume(targetQueue.queue, (receivedMsg) => {
    if (receivedMsg) {
      // 消息内容默认是Buffer类型,先转成字符串,要是你发的是JSON格式就再转成对象
      const msgContent = JSON.parse(receivedMsg.content.toString());
      console.log('终于收到消息啦:', msgContent);
      
      // 要是你设置了autoAck: false,记得手动确认消息,不然RabbitMQ会一直保留这条消息
      // rabbitChannel.ack(receivedMsg);
    }
  }, { autoAck: true });

  // 你提到的queue.on事件也能用来监听消息,和上面的consume回调效果类似
  targetQueue.on('message', (msgData) => {
    const parsedData = JSON.parse(msgData.content.toString());
    console.log('通过queue事件收到消息:', parsedData);
  });
};

几个踩过的坑给你提个醒

  • 模拟器里别用localhost当服务器地址,要用你电脑的局域网IP,不然会出现连接失败的情况
  • 队列名称一定要和发送端完全一致,大小写都不能错!我之前就是因为大小写差了一点,折腾了好半天
  • 可以去RabbitMQ的management页面看看队列的「Consumers」数量,如果是0,说明你的App没成功注册成消费者,得检查初始化代码有没有报错
  • 记得处理连接断开的情况,监听rabbitConnection.on('close', ...)和rabbitConnection.on('error', ...)事件,加个重连逻辑会让整个服务更稳定

内容的提问来源于stack exchange,提问作者orhan fidan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:06:17