Flutter消息分发插件pip_services_msgdistribution的使用
Flutter消息分发插件pip_services_msgdistribution的使用
消息分发微服务
这个微服务用于通过配置的发送方式(电子邮件或短信)向一个或多个收件人分发消息。
该微服务目前支持以下部署选项:
- 部署平台:独立进程,Seneca
- 外部API:HTTP/REST,Seneca
该微服务可选依赖于以下微服务:
- pip-services-emailsettings - 收件人的电子邮件设置
- pip-services-smssettings - 收件人的短信设置
- pip-services-email - 发送电子邮件
- pip-services-sms - 发送短信
- pip-services-msgtemplates - 消息模板
合同
微服务的逻辑合同如下。对于物理实现(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 }}&email={{ email }}&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: https://github.com/pip-services3-dart/pip-services3-commons-dart
- Pip.Services3.Rpc: https://github.com/pip-services3-dart/pip-services3-rpc-dart
添加pip-services3-commons-dart
、pip-services3-rpc-dart
和pip-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
更多关于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');