Actor-ES框架中的消息发布器与消息存储器是怎样的
这篇文章给大家介绍Actor-ES框架中的消息发布器与消息存储器是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
消息发布器:
Ray是基于Event Sourcing设计的ES/Actor框架,ESGrain状态(State)的修改、ESGrain之间的通信默认使用RabbitMQ通信。消息的发布器主要是RabbitPub+ESGrain
。
RabbitPub特性
RabbitPub特性是RabbitMQ消息发布器。
RabbitSub特性用到的构造函数如下:
publicRabbitPubAttribute(stringexchange=null,stringqueue=null,intqueueCount=1){this.Exchange=exchange;this.Queue=queue;this.QueueCount=queueCount;}
使用:
示例:
[RabbitMQ.RabbitPub("Account","account")]publicsealedclassAccount:MongoESGrain<String,AccountState,IGrains.MessageInfo>,IAccount{……}publicTaskTransfer(stringtoAccountId,decimalamount){varevt=newAmountTransferEvent(toAccountId,amount,this.State.Balance-amount);returnRaiseEvent(evt).AsTask();}
RabbitPub可以单独使用,用于发布消息。
消息存储器:
消息的存储器用于持久化ESGrain的Event事件与State快照数据,需要的时候进行重放。Ray默认使用MongoDB存储事件和快照。
使用: 为对应的Actor添加MongoStorage
特性。
publicMongoStorageAttribute(stringeventDatabase,stringcollection,boolsharding=false,intshardingDays=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")]//事件存储publicsealedclassAccount:MongoESGrain<String,AccountState,IGrains.MessageInfo>,IAccount{……}
shardingDays分表时间间隔有个起始点,开始时间在MongoConfig中定义。具体使用参见Example.Ray.Host
中StartSilo()
方法。
关于Actor-ES框架中的消息发布器与消息存储器是怎样的就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。