消息发布器:

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. AtCoder Regular Contest 071

    C - 怪文書 / Dubious Document 题意:定义一种无序的子序列:在原串中随意地取字符并随意打乱顺序.求多个字符串的最长公共无序子序列. #include<cstdio> ...

  2. 【Java学习笔记之十一】Java中常用的8大排序算法详解总结

    分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配排序(基数排序) 所需辅助空间最多:归并排序 所需辅助空 ...

  3. hdu_2670Girl Love Value(dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2670 Girl Love Value Time Limit: 2000/1000 MS (Java/O ...

  4. C#中的多线程超时处理实践

    最近我正在处理C#中关于timeout行为的一些bug.解决方案非常有意思,所以我在这里分享给广大博友们. 我要处理的是下面这些情况: 我们做了一个应用程序,程序中有这么一个模块,它的功能向用户显示一 ...

  5. 使用vue-axios请求geoJson数据报错的问题

    最近的项目用到了echarts一个带有散点地图的图表,按照正常jquery写法应该使用ajax请求geojson的数据动态去切换地图,就像下面这样 $.get('Js/map/' + cityData ...

  6. 【C#】数据库脚本生成工具(二)

    年C#研发的数据库文档生成工具,给之后的工作带来了便利.近日,又针对该工具,用WinForm开发了数据库脚本生成工具-DbExcelToSQL. 下面数据库文档生成工具效果图: 感兴趣的朋友可以看下[ ...

  7. Angular 选项卡

    <div ng-init="now=0;" class="nav"> <h4>选项卡</h4> <div > & ...

  8. [国嵌攻略][174][CGI快速入门-网页控制LED]

    CGI程序(Common Gate Way Interface) 在服务器外部供服务器调用的程序,CGI程序与服务器配合后能让服务器完成更强大的功能. 1.浏览器通过HTML表单或超链接请求指向一个C ...

  9. html日历(1)

    <html> <head> <link rel="stylesheet" type="text/css" href="S ...

  10. 98、vue.js简单入门

    本篇导航: 介绍与安装 vue常用指令 一.介绍与安装 vue是一套构建用户界面的JAVASCRIPT框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层, ...