您好,登錄后才能下訂單哦!
這篇文章給大家介紹Actor-ES框架中的消息發布器與消息存儲器是怎樣的,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
Ray是基于Event Sourcing設計的ES/Actor框架,ESGrain狀態(State)的修改、ESGrain之間的通信默認使用RabbitMQ通信。消息的發布器主要是RabbitPub+ESGrain
。
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框架中的消息發布器與消息存儲器是怎樣的就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。