Actor-ES框架:消息发布器与消息存储器
消息發布器:
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.Host中StartSilo()方法。
相關文章:
Actor-ES框架:Ray
Actor-ES框架:Ray--事件(Event)編寫說明
Ray框架Q&A
Actor-ES框架:Ray-Handler之CoreHandler編寫
Actor-ES框架:Ray-Handler之ToReadHandler編寫
Actor-ES框架:Actor編寫-ESGrain與ESRepGrain
原文地址:http://www.cnblogs.com/CharlesZHENG/p/8438051.html
.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com
總結
以上是生活随笔為你收集整理的Actor-ES框架:消息发布器与消息存储器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DotNetAnywhere:可供选择的
- 下一篇: Metrics, tracing 和 l