首页 > 其他分享 >flutter中使用rabbitmq

flutter中使用rabbitmq

时间:2024-07-27 20:41:25浏览次数:15  
标签:String 队列 await RabbitMQ rabbitmq 使用 message flutter 消息

依赖

dart_amqp: ^0.3.1 #rabbitMq接收发送消息

工具封装

import 'package:dart_amqp/dart_amqp.dart';

/// 封装 RabbitMQ 的服务类
class RabbitMQService {
  late ConnectionSettings _settings; // RabbitMQ 连接设置
  late Client _client; // RabbitMQ 客户端
  late Channel _channel; // RabbitMQ 通道

  /// 初始化 RabbitMQ 客户端
  /// [host] 主机地址
  /// [port] 端口号
  /// [username] 用户名
  /// [password] 密码

  Future<void> initialize({
    required String host,
    required int port,
    required String username,
    required String password,
  }) async {
    print('初始化RabbitMQ客户端…');
    _settings = ConnectionSettings(
      host: host,
      port: port,
      authProvider: PlainAuthenticator(username, password),
    );
    _client = Client(settings: _settings);
    print('连接RabbitMQ…');
    try {
      _channel = await _client.channel();
      print('通道创建成功。');
    } catch (e) {
      print('创建通道失败:: $e');
      rethrow;
    }
  }

  /// 发送消息到指定的交换机
  /// [exchange] 交换机名称
  /// [routingKey] 路由键
  /// [message] 要发送的消息内容
  Future<void> publishMessage(
      String exchange, String routingKey, String message) async {
    // 获取指定的交换机
    final exchangeInstance =
        await _channel.exchange(exchange, ExchangeType.DIRECT);
    // 发送消息到交换机
    exchangeInstance.publish(message, routingKey);
  }

  /// 直接发送消息到指定队列
  /// [queueName] 队列名称
  /// [message] 要发送的消息内容
  Future<void> publishMessageToQueue(String queueName, String message) async {
    // 获取指定的队列
    final queue = await _channel.queue(queueName, durable: true);
    // 发送消息到队列
    queue.publish(message);
  }

  /// 从指定队列中消费消息
  /// [queueName] 队列名称
  /// [onMessage] 消息处理回调函数
  Future<void> consumeMessages(
      String queueName, void Function(AmqpMessage) onMessage) async {
    // 获取指定的队列
    final queue = await _channel.queue(queueName, durable: true);
    // 消费队列中的消息
    final consumer = await queue.consume();

    // 监听队列中的消息
    consumer.listen((AmqpMessage message) async {
      print('监听队列中的消息: $message');

      try {
        // 处理消息
        onMessage(message);
        // 确认消息已处理
        // message.ack();  //rabbitmq自动确定 可以不加
      } catch (e) {
        print('处理消息时出错: $e');
        // 确保在处理失败时记录异常
      }
    });
  }

  /// 关闭 RabbitMQ 连接和通道
  Future<void> close() async {
    // 关闭通道
    await _channel.close();
    // 关闭客户端
    await _client.close();
  }
}

使用

 //建立通道
 init() async {
    await rabbitMQService.initialize(
      host: '39.13.110', // 替换为你的 RabbitMQ 主机地址
      port: 5672, // 默认 RabbitMQ 端口号
      username: 'ain', // 替换为你的 RabbitMQ 用户名
      password: 'hachjhb', // 替换为你的 RabbitMQ 密码
    );
  }


 await rabbitMQService.publishMessageToQueue(
      "队列", //队列的名称
      'Hello RabbitMQ! 峰的 $a' // 要发送的消息内容
     );


  Future<void> xiaofei() async {
    // 订阅消息,从指定队列中获取消息
    await rabbitMQService.consumeMessages('队列', (AmqpMessage message) {
      // 打印收到的消息内容
      print('到的消息内容: ${message.payloadAsString}');
      setState(() {
        word = message.payloadAsString;
      });
    });
  }

 

标签:String,队列,await,RabbitMQ,rabbitmq,使用,message,flutter,消息
From: https://www.cnblogs.com/xbinbin/p/18327383

相关文章

  • 主流AI绘画工具- Midjourney安装使用方式
    安装包下载地址&使用方法Midjourney架设在discord上,使用方式有两种:通过discord添加Midjourney机器人使用:下载地址:win版https://pan.baidu.com/s/1ggRqylbG4eCG9uKYe14bbQ?pwd=r6q2提取码:r6q2mac版https://pan.baidu.com/s/1Vh5G18ZkzsVFwtyXpiSyXw?pwd=9gvt......
  • 使用Excel画出各类统计图(3)
    本章会介绍如何画出箱线图目录一、箱线图1.箱线图的作用2.箱线图的绘制与调整(1)画出箱线图(2)调整箱线图一、箱线图箱线图用于反映一组或多组连续型定量数据分布的中心位置和散布范围。箱线图上需要体现出数据的某些特性,因此需要计算上四分位数、中位数、下四分位数以及均值;箱子......
  • Golang 高性能 Websocket 库 gws 使用与设计(一)
    前言大家好这里是,白泽,这期分析一下golang开源高性能websocket库gws。视频讲解请关注......
  • redis的使用场景-热点数据缓存
    1.什么是缓存?把一些经常访问的数据放入缓存中,减少访问数据库的频率,减少数据库的压力,从而提高程序的性能。【内存中存储】2.缓存的原理通过上图可以看出程序首先访问缓存,如果缓存中有访问的数据会直接方会给客户端,不需要访问数据库,如果缓存中没有需要的数据则访问数据库,命中......
  • 记录--终于搞懂了!原来vue3中template使用ref无需.value是因为这个
    ......
  • 包的使用
    ****包的本质就是文件夹为了更好地组织类,java提供了包机制,用于区别类名的命名空间包语句的语法格式为:packagepkg1[.pkg2[.pkg3……]];即包名.类名;****一般利用公司域名倒置作为包名;为了能够使用某一个包的成员,我们需要在java程序中明确导入该包。使用“import”语句可完成此......
  • 使用ttk下载电话簿功能
    今天开始学习一下tkinter,制作一下电话簿下载功能 目录 一、完整代码二、效果展示 一、完整代码importtkinterastkfromtkinterimportttkimporttimewindow=tk.Tk()#设置窗口的标题window.title("电话号码下载")#设置窗口的尺寸大小window.geometry(......
  • useRoute 函数的详细介绍与使用示例
    title:useRoute函数的详细介绍与使用示例date:2024/7/27updated:2024/7/27author:cmdragonexcerpt:摘要:本文介绍了Nuxt.js中useRoute函数的详细用途与示例,展示了如何在组合式API中使用useRoute获取当前路由信息,包括动态参数、查询参数等,并提供了丰富的计算引用说明,如......
  • SpringBoot中使用监听器
    1.定义一个事件/***定义事件*@authorhrui*@date2024/7/2512:46*/publicclassCustomEventextendsApplicationEvent{privateStringmessage;publicCustomEvent(Objectsource,Stringmessage){super(source);this.message......
  • SGLang 大模型推理框架 qwen2部署使用案例;openai接口调用、requests调用
    参考:https://github.com/sgl-project/sglang纯python写,号称比vllm、tensorRT还快暂时支持模型安装可以pip、源码、docker安装,这里用的pip注意flashinfer安装最新版,不然会可能出错误ImportError:cannotimportname‘top_k_top_p_sampling_from_probs’from‘fla......