帮酷LOGO
  • 显示原文与译文双语对照的内容
文章标签:Instances  syn  event  服务  事件  EVE  Instance  
Synchronize service events with MongoDB publish/subscribe to easily scale your application

  • 源代码名称:feathers-sync
  • 源代码网址:http://www.github.com/feathersjs-ecosystem/feathers-sync
  • feathers-sync源代码文档
  • feathers-sync源代码下载
  • Git URL:
    git://www.github.com/feathersjs-ecosystem/feathers-sync.git
  • Git Clone代码到本地:
    git clone http://www.github.com/feathersjs-ecosystem/feathers-sync
  • Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/feathersjs-ecosystem/feathers-sync
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
  • 羽毛同步

    Greenkeeper badge

    Build StatusDependency StatusDownload StatusSlack Status

    同步应用程序实例之间的服务事件

    当运行你的羽毛应用程序的多个实例时( 比如 。 在几个 Heroku Dynos上,服务事件( 。createdupdatedpatchedremoved ) 不会被传播到其他实例。

    羽毛同步使用消息传递机制将所有事件传播到所有应用程序实例。 它目前支持:

    这允许将实时的web socket连接扩展到任意数量的客户机。

    用法

    在以下示例中初始化的应用程序将使用本地 feathers-sync 数据库和 sync 集合并与每个连接到同一数据库的其他实例共享服务事件:

    constfeathers=require('@feathers/feathers');constsync=require('feathers-sync');constapp=feathers();app.configure(sync({
     uri:'mongodb://localhost:27017/sync',
     collection:'events'}));app.use('/todos', todoService);

    app.sync

    设置时,app.sync 将包含以下信息:

    • type - 适配器类型( 比如 。 mongodb 或者 redis )
    • ready - 在同步机制就绪时解析的承诺
    app.sync.ready.then(() => {
     // Do things here});

    适配器

    可以通过通过 uri 指定适配器的类型来初始化 feathers-sync ( 比如 。 mongodb://localhost:27017/sync ) 或者直接使用 比如 sync.mongodb:

    // Configure MongoDBapp.configure(sync({
     uri:'mongodb://localhost:27017/sync',
     collection:'events'}));// Configure MongoDB with an existing connectionapp.configure(sync.mongodb({
     db: existingConnection
     collection:'events'}));// Configure Redisapp.configure(sync({
     uri:'redis://localhost:6379'}));app.configure(sync.redis({
     db: redisInstance
    }));

    • uri - 连接字符串( 必须以 mongodb:// 开头)
    • db - MongoDB数据库对象或者连接字符串( uri的别名)
    • collection ( 默认值:events ) - 带上限事件集合的名称
    • mubsub - 要传递给 mubsub ( 比如 )的设置。 {authSource:'admin'} )
    • channel - Mubsub通道同步选项:
      • size ( 默认值:5mb ) - 以字节表示的最大集合大小
      • max - 集合中的最大文档数
      • retryInterval ( 默认值:200ms ) - 如果没有找到文档,则在ms中等待时间
      • recreate ( 默认值:true ) - 在发生错误时重新创建tailable光标( 默认为 true )

    Redis

    • uri - 连接字符串( 必须以 redis:// 开头)
    • db - Redis数据库对象或者连接字符串( 比如 。 redis://localhost:6379 )
    • key - 将在其中存储所有同步事件的键( 默认: feathers-sync )

    • uri - AMQP连接字符串( 比如 。 amqp://guest:guest@localhost:5672 ) 。
    • key ( 默认值:feathers-sync ) - 将在它的中发布同步消息的名称交换
    • amqpConnectionOptions连接选项

    工作原理

    alt tag

    警告

    使用 feathers-sync 侦听服务事件时,所有事件都将传播到所有客户端。 这意味着事件侦听器不应该执行任何更改全局状态的操作( 比如 。 将某些内容写入数据库中,因为每个服务器实例都执行相同的操作。

    事件侦听器应该只用于更新本地状态( 比如 。 一个本地缓存,并向所有客户机发送实时更新。

    比如,在创建新用户后,如果需要执行第一个博客帖子,那么在创建新用户后将它的添加到服务方法本身中,或者使用一个羽毛后使用。

    编写自定义适配器

    使用应用程序上的sync-insync-out 事件,feathers-sync 允许实现自定义适配器:

    const { core } =require('feathers-sync');constmyMessagingService= {
     publish(data) {
     // send data here },
     subscribe(callback) {
     // subscribe to message queue and emit data }
    }module.exports=config=> {
     returnapp=> {
     app.configure(core);
     app.sync= {
     type:'custom',
     ready:newPromise((resolve, reject) => {
     // resolve when client is ready// reject on connection error })
     };
     // Sent every time a service app.on('sync-out', data=> {
     // Publish `data` to the message queuemyMessagingService.publish(data);
     });
     myMessagingService.subscribe(data=> {
     // Send the synchronization event to the applicationapp.emit('sync-in', data);
     });
     };
    };

    sync-in 事件的data 应该与 sync-out 发送的形式相同( 当前它包含 { event, path, data, context } ) 。

    许可证

    版权所有( c ) 2018羽毛贡献者

    许可证在 MIT许可证



    文章标签:服务  EVE  syn  event  事件  Instance  Instances  

    Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语