Flutter消息分发插件pip_services_msgdistribution的使用

Flutter消息分发插件pip_services_msgdistribution的使用

Pip.Services Logo
消息分发微服务

这个微服务用于通过配置的发送方式(电子邮件或短信)向一个或多个收件人分发消息。

该微服务目前支持以下部署选项:

  • 部署平台:独立进程,Seneca
  • 外部API:HTTP/REST,Seneca

该微服务可选依赖于以下微服务:

合同

微服务的逻辑合同如下。对于物理实现(HTTP/REST、Thrift、Seneca、Lambda等),请参阅特定协议的文档。

class MessageV1 {
  String template;
  String from;
  String cc;
  String bcc;
  String reply_to;
  var subject;
  var text;
  var html;
}

abstract class IMessageDistributionV1 {
  Future sendMessage(String? correlationId, RecipientV1 recipient,
      MessageV1 message, ConfigParams parameters, String method);

  Future sendMessages(String? correlationId, List<RecipientV1> recipients,
      MessageV1 message, ConfigParams parameters, String method);

  Future sendMessageToRecipient(
      String? correlationId,
      String recipientId,
      String subscription,
      MessageV1 message,
      ConfigParams parameters,
      String method);

  Future sendMessageToRecipients(
      String? correlationId,
      List<String> recipientIds,
      String subscription,
      MessageV1 message,
      ConfigParams parameters,
      String method);
}

消息可以直接定义,也可以从消息模板加载(存储在msgtemplates服务中);

当消息直接设置时,其主题、文本和HTML内容可以通过handlebars模板设置,并使用参数集处理。例如:

Dear {{ name }},
<p/>
Please, help us to verify your email address. Your verification code is {{ code }}.
<p/>
Click on the 
<a href="{{ clientUrl }}/#/verify_email?server_url={{ serverUrl }}&amp;email={{ email }}&amp;code={{ code }}">link</a>
to complete verification procedure
<p/>
---<br/>
{{ signature }}

下载

目前唯一获取微服务的方式是从GitHub仓库直接检出。

git clone git@github.com:pip-services-users/pip-services-msgdistribution-dart.git

Pip.Service团队正在努力实施打包并使其稳定版本可通过下载存档文件获得。

运行

在微服务文件夹的根目录下添加config.yml文件,并设置配置参数。作为起点,您可以使用config.example.yml文件中的示例配置。

微服务配置示例:

---
- descriptor: "pip-services-commons:logger:console:default:1.0"
  level: "trace"

- descriptor: "pip-services-msgdistribution:controller:default:default:1.0"
  
- descriptor: "pip-services-msgdistribution:service:http:default:1.0"
  connection:
    protocol: "http"
    host: "0.0.0.0"
    port: 8080

有关微服务配置的更多信息,请参阅配置指南。

启动微服务使用命令:

dart ./bin/run.dart

使用

与微服务交互最简单的方法是使用客户端SDK。可用的客户端SDK列表如下:

如果使用Dart,则需要引用所需的库:

添加pip-services3-commons-dartpip-services3-rpc-dartpip-services_msgdistribution

import 'package:pip_services3_commons/pip_services3_commons.dart';
import 'package:pip_services3_rpc/pip_services3_rpc.dart';

import 'package:pip_services_msgdistribution/pip_services_msgdistribution.dart';

实例化客户端并连接到微服务

// 创建客户端实例
var client = MessageDistributionHttpClientV1(config);

// 配置客户端
client.configure(httpConfig);

// 连接到微服务
try {
  await client.open(null);
} catch (e) {
  // 错误处理...
}

现在客户端已准备好执行操作

// 向用户发送电子邮件消息
var recipient1 = RecipientV1(id: '1', email: 'user1@somewhere.com', phone: '+1234567890');
var recipient2 = RecipientV1(id: '2', email: 'user2@somewhere.com', phone: '+0987654321');
var message = MessageV1(subject: 'Test', 
                         text: 'This is a test message. Please, ignore it');
await client.sendMessages(
    null,
    [
        recipient1,
        recipient2
    ],
    message,
    null,
    DeliveryMethod.All
);

更多关于Flutter消息分发插件pip_services_msgdistribution的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter消息分发插件pip_services_msgdistribution的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


pip_services_msgdistribution 是一个用于 Flutter 的消息分发插件,它允许你在 Flutter 应用中轻松地进行消息的发布和订阅。这个插件是 Pip.Services 库的一部分,Pip.Services 是一个用于构建微服务架构的跨平台库。

安装插件

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

dependencies:
  pip_services_msgdistribution: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来安装插件。

使用插件

1. 初始化消息分发器

在 Flutter 应用中,你首先需要初始化消息分发器。通常你可以在 main.dart 文件中进行初始化:

import 'package:pip_services_msgdistribution/pip_services_msgdistribution.dart';

void main() {
  // 初始化消息分发器
  var messageDispatcher = MessageDispatcher();

  runApp(MyApp(messageDispatcher: messageDispatcher));
}

2. 发布消息

你可以在应用中的任何地方发布消息。例如,在某个按钮点击事件中发布消息:

import 'package:flutter/material.dart';
import 'package:pip_services_msgdistribution/pip_services_msgdistribution.dart';

class MyHomePage extends StatelessWidget {
  final MessageDispatcher messageDispatcher;

  MyHomePage({required this.messageDispatcher});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Message Distribution Example'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            // 发布消息
            messageDispatcher.publish('my_topic', 'Hello, World!');
          },
          child: Text('Publish Message'),
        ),
      ),
    );
  }
}

3. 订阅消息

你可以在应用中的任何地方订阅消息。例如,在某个页面的 initState 方法中订阅消息:

import 'package:flutter/material.dart';
import 'package:pip_services_msgdistribution/pip_services_msgdistribution.dart';

class MyHomePage extends StatefulWidget {
  final MessageDispatcher messageDispatcher;

  MyHomePage({required this.messageDispatcher});

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String receivedMessage = '';

  @override
  void initState() {
    super.initState();

    // 订阅消息
    widget.messageDispatcher.subscribe('my_topic', (message) {
      setState(() {
        receivedMessage = message;
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Message Distribution Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: () {
                // 发布消息
                widget.messageDispatcher.publish('my_topic', 'Hello, World!');
              },
              child: Text('Publish Message'),
            ),
            SizedBox(height: 20),
            Text('Received Message: $receivedMessage'),
          ],
        ),
      ),
    );
  }
}

处理异步消息

pip_services_msgdistribution 支持异步消息处理。你可以使用 Future 来处理异步消息:

widget.messageDispatcher.subscribe('my_topic', (message) async {
  // 异步处理消息
  await Future.delayed(Duration(seconds: 1));
  setState(() {
    receivedMessage = message;
  });
});

取消订阅

如果你不再需要接收某个主题的消息,可以取消订阅:

widget.messageDispatcher.unsubscribe('my_topic');
回到顶部