zoukankan      html  css  js  c++  java
  • Orleans 客户端请求的消息流转以及消息在Silo中再路由机制

    1.客户端是一个OutSideRuntimeClient,在这个客户端类中有一个消息代理中心transport(类型为ProxiedMessageCenter)

    2.ProxiedMessageCenter通过取模,将消息请求负载到Silo集群中(即不同的GatewayConnection中)

    3.消息首先进入负载得到的GatewayConnection的请求队列中(requestQueue)

    4.GatewayConnection实例中具有特定的Silo地址和Socket实例,最终通过这里的Socket将消息发送出去,消息发送之前首先进行序列化

    5.Silo收到消息后,首先根据请求的GrainId查找本地的GrainActivation,如果对应的Activation激活在本地,则将请求路由到这个Activation进行处理

    这里对Silo收到消息后的处理进行一些详细的描述:

    首先,Silo并非持有所有Actor的地址信息,Silo持有本地的Actor Activation的数据字典和一个非本地Silo持有Actor Activation的一个地址映射缓存字典.

      Silo对消息进行路由的过程分为以下3步

           1.查找本地的Actor Activation数据字典,如果找到了,直接路由到本地的Actor Activation进行消息处理

           2.如果本地的Actor Activation数据字典中没有这个Grain,则查找缓存字典,找到后根据字典中的Silo地址,然后将消息路由到对应的Silo

           3.如果缓存中也没找到,会根据GrainId,通过Consistent Hash来获得目标Silo,进行远程的Silo查找GrainId对应的激活,然后保存到本地的缓存字典中

    单个Silo中的Actor Activation地址更新,LocalGrainDirectory通过实现SiloStatusChangeNotification,监听Silo的Stop消息,得到消息后,删除本地缓存中所有在这里Silo的Actor地址缓存

    综上,总结:

          1.单个Silo并非持有所有Actor的地址

          2.Silo之间的Actor地址无需同步,只在查找时添加缓存或在查找得知Activation不可用时删除缓存,以及在得到Other Silo停止时,删除所有对应Silo的Actor Activation缓存

    关注开源 国内最早的Orleans群--174511582,欢迎大家加入
  • 相关阅读:
    sqlParameter的两种写法 以及存储过程还有sql语句(防注入)
    SqlServer2005 SQL Server 版本变更检查 警告
    禁用自带防火墙
    sql分页
    每个程序员都必须遵守的编程原则
    在PDA设备上安装SQL Server Compact
    Mcrosoft SQL Server 自定义函数
    程序员人生之路(转)
    在windows 7 上为 sqlserver 2008 启用远程访问
    在PDA设备上安装和部署 SQL Server Compac 3.5(官方版)
  • 原文地址:https://www.cnblogs.com/liwt/p/orleans-message-route.html
Copyright © 2011-2022 走看看