消息发布器:

Ray是基于Event Sourcing设计的ES/Actor框架,ESGrain状态(State)的修改、ESGrain之间的通信默认使用RabbitMQ通信。消息的发布器主要是RabbitPub+ESGrain

RabbitPub特性

RabbitPub特性是RabbitMQ消息发布器。

RabbitSub特性用到的构造函数如下:

public RabbitPubAttribute(string exchange = null, string queue = null, int queueCount = 1)
{
this.Exchange = exchange;
this.Queue = queue;
this.QueueCount = queueCount;
}
  • exchange:RabbitMQ中的exchange名称。
  • queue:RabbitMQ中的queue名称。
  • queueCount:消息队列数。用于消息的负载均衡。

使用:

  • 为对应的Actor添加RabbitMQ.RabbitPub特性
  • 继承MongoESGrain或SqlGrain
  • 在方法中使用实例化事件,并调用RaiseEvent发布事件。

示例:

[RabbitMQ.RabbitPub("Account", "account")]
public sealed class Account : MongoESGrain<String, AccountState, IGrains.MessageInfo>, IAccount
{
……
}
public Task Transfer(string toAccountId, decimal amount)
{
var evt = new AmountTransferEvent(toAccountId, amount, this.State.Balance - amount);
return RaiseEvent(evt).AsTask();
}

RabbitPub可以单独使用,用于发布消息。


消息存储器:

消息的存储器用于持久化ESGrain的Event事件与State快照数据,需要的时候进行重放。Ray默认使用MongoDB存储事件和快照。

使用: 为对应的Actor添加MongoStorage特性。

public MongoStorageAttribute(string eventDatabase, string collection, bool sharding = false, int shardingDays = 90)
{
this.EventDataBase = eventDatabase;
this.EventCollection = collection + "Event";
this.SnapshotCollection = collection + "State";
this.sharding = sharding;
this.shardingDays = shardingDays;
CreateCollectionIndex();//创建分表索引
CreateStateIndex();//创建快照索引
}
  • eventDatabase:事件的Database名称。
  • collection:事件的collection名称。
  • sharding:是否需要分表,默认值false。
  • shardingDays:分表时间间隔,默认值90天。

示例:

[RabbitMQ.RabbitPub("Account", "account")]
[MongoStorage("Test", "Account")]//事件存储
public sealed class Account : MongoESGrain<String, AccountState, IGrains.MessageInfo>, IAccount
{
……
}

shardingDays分表时间间隔有个起始点,开始时间在MongoConfig中定义。具体使用参见Example.Ray.HostStartSilo()方法。


2.Ray-消息发布器与消息存储器的更多相关文章

  1. SLAM+语音机器人DIY系列:(二)ROS入门——5.编写简单的消息发布器和订阅器

    摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...

  2. ROS学习(十二)—— 编写简单的消息发布器和订阅器(C++)

    一.创建发布器节点 1 节点功能: 不断的在ROS网络中广播消息 2 创建节点 (1)打开工作空间目录 cd ~/catkin_ws/src/beginner_tutorials 创建一个发布器节点( ...

  3. ROS 消息发布器和订阅器Publisher, Subscriber

    博客参考:https://www.2cto.com/kf/201705/639776.html 1.编写发布器节点节点(Node) 是指 ROS 网络中可执行文件.接下来,将会创建一个发布器节点(“t ...

  4. ROS:消息发布器和订阅器(c++)

    学习资料主要源自http://wiki.ros.org/ROS/Tutorials/WritingPublisherSubscriber%28c%2B%2B%29 $ roscd beginner_t ...

  5. ROS手动编写消息发布器和订阅器topic demo(C++)

    1.首先创建 package cd ~/catkin_ws/src catkin_create_pkg topic_demo roscpp rospy std_msgs 2. 编写 msg 文件 cd ...

  6. ROS教程2 编写简单的消息发布器和订阅器 (C++ catkin)

    创建工作环境 创建文件夹,创建包 mkdir -p ~/catkin_arduino_ros/src catkin_create_pkg test1_pub_sub std_msgs rospy ro ...

  7. RabbitMQ消息发布和消费的确认机制

    前言 新公司项目使用的消息队列是RabbitMQ,之前其实没有在实际项目上用过RabbitMQ,所以对它的了解都谈不上入门.趁着周末休息的时间也猛补习了一波,写了两个窗体应用,一个消息发布端和消息消费 ...

  8. [转]RoboWare Studio的使用和发布器/订阅器的编写与测试

    原文地址:https://blog.csdn.net/han_l/article/details/77772352,转载主要方便随时查阅,如有版权要求,请及时联系. 开始ROS学习之前,先按照官网教程 ...

  9. Net Core SignalR 测试,可以用于unity、Layair、白鹭引擎、大数据分析平台等高可用消息实时通信器。

    SignalR介绍 SignalR介绍来源于微软文档,不过多解释.https://docs.microsoft.com/zh-cn/aspnet/core/signalr/introduction?v ...

随机推荐

  1. HDU 4010 Query on The Trees

    Problem Description We have met so many problems on the tree, so today we will have a query problem ...

  2. NYoj_49开心的小明

    开心的小明 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 小明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他 ...

  3. 初识maven及其安装步骤!!

    maven(01)--安装及其介绍   1:下载maven windows下载 2:将下载文件夹解压,然后放在一个安装目录(可任意选择),例如就放在D盘的根目录 然后在设置环境变量,新建一个环境变量, ...

  4. JPQL

    JPQL语言 JPQL语言,即 Java Persistence Query Language 的简称. JPQL是一种和 SQL 非常类似的中间性和对象化查询语言, 它最终会被编译成针对不同底层数据 ...

  5. mysql 手册关于修改列字符编码的一个bug

    项目因为历史原因使用了 GBK编码,遇到非GBK编码字符时出现乱码问题,情况比较严重,暂时先打算修改 列的字符编码为 utf8mb4. 查看 mysql 手册: 用 GBK 编码转 utf8 进行说明 ...

  6. Spark算子--flatMapValues

    转载请标明出处http://www.cnblogs.com/haozhengfei/p/e7a46cecc65720997392516d553d9891.html flatMapValues--Tra ...

  7. 教你搭建你自己的Git服务器

    http://lib.csdn.net/article/git/50086 导读 现在我们将要学习如何搭建 git 服务器,如何编写自定义的 Git 钩子来在特定的事件触发相应的动作(例如通知),或者 ...

  8. tp5 隐藏index.php 邓士鹏

    tp5 隐藏index.php ------------------------------------------------------------------------------------ ...

  9. 那些年~~~我们的C#笔试内测题目

    <深入.NET平台和C#编程>内部测试题-笔试试卷 一 选择题 1) 以下关于序列化和反序列化的描述错误的是( C). a) 序列化是将对象的状态存储到特定存储介质中的过程 b) 二进制格 ...

  10. CSS容器属性

    最近一直想美化博客的文字效果和增加文章末尾的转发提示,所以这两天抽空研究了一下CSS,前两篇可以翻我的博客,今天写的这篇是介绍增加文章末尾的转发提示,效果如文章末尾所示,好了,CSS很简单,我就不介绍 ...