Flutter RabbitMQ服务集成插件pip_services4_rabbitmq的使用

Flutter RabbitMQ服务集成插件pip_services4_rabbitmq的使用

Pip.Services Logo

RabbitMQ特定组件适用于Dart

该模块是Pip.Services多语言微服务工具包的一部分。
RabbitMQ模块包含一组用于通过AMQP协议在RabbitMQ中进行消息队列操作的组件。

模块包含以下包:

  • Build - 构建模块组件的工厂
  • Queue - 实现标准Messaging模块接口的消息队列组件

快速链接:

使用

在项目的pubspec.yaml文件中添加以下依赖项:

dependencies:
  pip_services4_rabbitmq: version

然后从命令行安装包:

pub get

开发

开发时需要安装以下前提条件:

  • Dart SDK 3
  • Visual Studio Code 或其他您选择的IDE
  • Docker

安装依赖项:

pub get

运行自动化测试:

pub run test

生成API文档:

./docgen.ps1

在提交更改之前,运行Docker化的构建和测试:

./build.ps1
./test.ps1
./clear.ps1

联系方式

Dart版本的Pip.Services由以下人员创建和维护:

  • Levichev Dmitry
  • Sergey Seroukhov

文档由以下人员编写:

  • Levichev Dmitry

许多贡献者投入了时间和才华使该项目变得更好,特别感谢:

  • Andrew Harrington, Kyrio

示例代码

以下是完整的示例代码,展示如何在Flutter项目中使用pip_services4_rabbitmq插件与RabbitMQ进行通信。

示例代码:main.dart

import 'dart:async';
import 'dart:io';
import 'package:pip_services4_components/pip_services4_components.dart'; // Pip.Services核心组件
import 'package:pip_services4_messaging/pip_services4_messaging.dart'; // 消息传递模块
import 'package:pip_services4_rabbitmq/pip_services4_rabbitmq.dart'; // RabbitMQ模块

// 定义一个实现IMessageReceiver接口的类
class TestMessageReciver implements IMessageReceiver {
  MessageEnvelope? message;

  [@override](/user/override)
  Future receiveMessage(MessageEnvelope envelope, IMessageQueue queue) async {
    message = envelope; // 接收消息并存储到变量中
    return null;
  }
}

void main() async {
  late RabbitMQMessageQueue queue;

  // 从环境变量中读取配置,或者设置默认值
  var rabbitmqHost = Platform.environment['RABBITMQ_HOST'] ?? 'localhost';
  var rabbitmqPort = Platform.environment['RABBITMQ_PORT'] ?? '5672';
  var rabbitmqExchange = Platform.environment['RABBITMQ_EXCHANGE'] ?? 'test';
  var rabbitmqQueue = Platform.environment['RABBITMQ_QUEUE'] ?? 'test';
  var rabbitmqUser = Platform.environment['RABBITMQ_USER'] ?? 'user';
  var rabbitmqPassword = Platform.environment['RABBITMQ_PASS'] ?? 'pass123';

  // 如果缺少必要的配置参数,则退出程序
  if (rabbitmqHost == null && rabbitmqPort == null) {
    return;
  }

  // 配置RabbitMQ连接参数
  var queueConfig = ConfigParams.fromTuples([
    'exchange', rabbitmqExchange,
    'queue', rabbitmqQueue,
    'options.auto_create', true,
    'connection.host', rabbitmqHost,
    'connection.port', rabbitmqPort,
    'credential.username', rabbitmqUser,
    'credential.password', rabbitmqPassword,
  ]);

  // 创建RabbitMQ消息队列实例
  queue = RabbitMQMessageQueue('testQueue');
  queue.configure(queueConfig); // 配置队列参数

  // 打开队列连接
  await queue.open(null);
  await queue.clear(null);

  // 同步通信示例
  var envelope1 = MessageEnvelope(
      Context.fromTraceId('123'), 'Test', 'Test message'); // 创建消息
  var reciver = TestMessageReciver(); // 创建接收器

  // 开始监听队列
  queue.beginListen(null, reciver);

  // 延迟一段时间发送消息
  await Future.delayed(Duration(milliseconds: 1000), () {});
  await queue.send(null, envelope1); // 发送消息

  // 延迟一段时间读取消息
  await Future.delayed(Duration(milliseconds: 1000), () {});
  var envelope2 = reciver.message!; // 读取消息

  // 结束监听并关闭队列
  queue.endListen(null);
  await queue.close(null);
}

更多关于Flutter RabbitMQ服务集成插件pip_services4_rabbitmq的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter RabbitMQ服务集成插件pip_services4_rabbitmq的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


要在Flutter项目中集成RabbitMQ服务,你可以使用 pip_services4_rabbitmq 插件。这个插件是 pip_services4 生态系统的一部分,提供了一个方便的方式来与 RabbitMQ 进行交互。以下是如何在 Flutter 项目中集成和使用 pip_services4_rabbitmq 的步骤。

1. 安装依赖

首先,你需要在 pubspec.yaml 文件中添加 pip_services4_rabbitmq 插件的依赖。

dependencies:
  flutter:
    sdk: flutter
  pip_services4_rabbitmq: ^0.0.1  # 请确认使用最新版本

然后运行 flutter pub get 来安装依赖。

2. 配置 RabbitMQ 连接

在代码中配置 RabbitMQ 的连接参数。你可以通过环境变量、配置文件或在代码中直接设置这些参数。

import 'package:pip_services4_rabbitmq/rabbitmq/connect/RabbitMQConnection.dart';

void main() async {
  var connection = RabbitMQConnection();
  connection.configure(ConfigParams.fromTuples([
    'connection.protocol', 'amqp',
    'connection.host', 'localhost',
    'connection.port', 5672,
    'credential.username', 'guest',
    'credential.password', 'guest',
  ]));

  await connection.open(null);
  print('Connected to RabbitMQ');
}

3. 发送消息

使用 RabbitMQMessageQueue 类来发送消息到 RabbitMQ 队列。

import 'package:pip_services4_rabbitmq/queues/RabbitMQMessageQueue.dart';

void sendMessage() async {
  var queue = RabbitMQMessageQueue('my_queue');
  await queue.open(null);

  var message = MessageEnvelope(null, 'Hello, RabbitMQ!');
  await queue.send(null, message);

  print('Message sent');
}

4. 接收消息

同样地,你可以使用 RabbitMQMessageQueue 类来接收消息。

import 'package:pip_services4_rabbitmq/queues/RabbitMQMessageQueue.dart';

void receiveMessage() async {
  var queue = RabbitMQMessageQueue('my_queue');
  await queue.open(null);

  queue.beginListen(null, (message) {
    print('Received message: ${message.getMessageAsString()}');
    return Future.value(null);
  });

  print('Listening for messages...');
}

5. 关闭连接

在应用程序结束时,确保关闭 RabbitMQ 连接。

void closeConnection() async {
  await connection.close(null);
  print('Connection closed');
}

6. 完整示例

以下是一个完整的示例,展示了如何配置、发送和接收消息。

import 'package:pip_services4_rabbitmq/rabbitmq/connect/RabbitMQConnection.dart';
import 'package:pip_services4_rabbitmq/queues/RabbitMQMessageQueue.dart';
import 'package:pip_services4_components/config/ConfigParams.dart';
import 'package:pip_services4_messaging/queues/MessageEnvelope.dart';

void main() async {
  // 配置连接
  var connection = RabbitMQConnection();
  connection.configure(ConfigParams.fromTuples([
    'connection.protocol', 'amqp',
    'connection.host', 'localhost',
    'connection.port', 5672,
    'credential.username', 'guest',
    'credential.password', 'guest',
  ]));

  await connection.open(null);
  print('Connected to RabbitMQ');

  // 发送消息
  var queue = RabbitMQMessageQueue('my_queue');
  await queue.open(null);

  var message = MessageEnvelope(null, 'Hello, RabbitMQ!');
  await queue.send(null, message);
  print('Message sent');

  // 接收消息
  queue.beginListen(null, (message) {
    print('Received message: ${message.getMessageAsString()}');
    return Future.value(null);
  });
  print('Listening for messages...');

  // 关闭连接
  await Future.delayed(Duration(seconds: 10)); // 等待一段时间以接收消息
  await connection.close(null);
  print('Connection closed');
}
回到顶部