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 客户端请求的消息流转以及消息在Silo中再路由机制的更多相关文章

  1. JAVA获取客户端请求的当前网络ip地址(附:Nginx反向代理后获取客户端请求的真实IP)

    1. JAVA获取客户端请求的当前网络ip地址: /** * 获取客户端请求的当前网络ip * @param request * @return */ public static String get ...

  2. 快速入门:弄懂Kafka的消息流转过程

    大家都知道 Kafka 是一个非常牛逼的消息队列框架,阿里的 RocketMQ 也是在 Kafka 的基础上进行改进的.对于初学者来说,一开始面对这么一个庞然大物会不知道怎么入手.那么这篇文章就带你先 ...

  3. 弄懂Kafka的消息流转过程

    原文地址:https://www.cnblogs.com/chanshuyi/p/quick_start_of_kafka.html 大家都知道 Kafka 是一个非常牛逼的消息队列框架,阿里的 Ro ...

  4. 第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装

    微信服务器和第三方服务器之间究竟是通过什么方式进行对话的? 下面,我们先看下图: 其实我们可以简单的理解: (1)首先,用户向微信服务器发送消息: (2)微信服务器接收到用户的消息处理之后,通过开发者 ...

  5. “一切都是消息”--MSF(消息服务框架)之【请求-响应】模式

    在前一篇, “一切都是消息”--MSF(消息服务框架)入门简介, 我们介绍了MSF基于异步通信,支持请求-响应通信模式和发布-订阅通信模式,并且介绍了如何获取MSF.今天,我们来看看如何使用MSF来做 ...

  6. 允许asp.net MVC报 错说明: 访问服务此请求所需的资源时出错。服务器可能未配置为访问所请求的 URL。错误消息 401.2。: 未经授权

    运行mvc3程序报以下错误 详细报错如下: “/”应用程序中的服务器错误. 访问被拒绝. 说明: 访问服务此请求所需的资源时出错.服务器可能未配置为访问所请求的 URL. 错误消息 401.2.: 未 ...

  7. Java开发微信公众号(三)---微信服务器请求消息,响应消息,事件消息以及工具处理类的封装

    在前面几篇文章我们讲了微信公众号环境的配置 和微信公众号服务的接入,接下来我们来说一下微信服务器请求消息,响应消息以及事件消息的相关内容,首先我们来分析一下消息类型和返回xml格式及实体类的封装. ( ...

  8. DirectUI的消息流转

    Windows是一个基于消息循环的系统,DirectUI同样遵循这样的消息流转.当界面呈现.用户点击.定时器等各种各样的消息一旦进入windows消息循环队列,系统自动调用该窗口的WndProc过程. ...

  9. C# HttpWebRequest请求远程地址获取返回消息

    HttpWebRequest请求远程地址获取返回消息 /// <summary> /// 请求远程Api获取响应返回字符串 /// </summary> /// <par ...

随机推荐

  1. 网站微信登录授权 ASP.NET

    最新做一些项目都有微信登录注册什么的,今天就把自己整理的demo提供给大家 微信认证流程(我自己简称三次握手): 1.用户同意授权,获取code 2.通过code换取网页授权access_token, ...

  2. Android studio debug模式获取变量的值

    打断点.debug模式运行,Console界面旁边的Debugger界面,或者在变量上右键add to watches

  3. bootstrap-datepicker使用

    $('.date').datepicker({ language: 'zh-CN', --指定格式 format: 'yyyy-mm', --格式要求 autoclose: true, --选择后是否 ...

  4. 摘记 pyinstaller 使用自定义 spec

    下面的是官网的文档, 我们可以用自定义spec的方式把想要的文件打包到目标文件夹里面 例如: 我们在程序中用了一个图标 test.ico, 如果我们只用 pyinstaller -w test.py ...

  5. 利用(Tcmalloc) google-perftools优化Nginx和MySQL性能

    一.安装libunwind wget http://download.savannah.gnu.org/releases/libunwind/libunwind-1.1.tar.gz 本地下载:htt ...

  6. grep笔记

    grep "match_text" file1 file2 file3 ...                        #grep可以对多个文件进行过滤 --color   ...

  7. phpStudy 的Apache虚拟主机配置

    放弃了wamp,朋友介绍了phpstudy,不错的一款软件,关键是能自由切换php版本.相关的阿帕奇虚拟主机配置参考:http://www.th7.cn/system/win/201506/10846 ...

  8. DIV+CSS:页脚永远保持在页面底部

    页脚永远保持在页面底部 有时候,我们用CSS创建一个高度自适应布局,如何保证页脚(footer)在内容不超过一屏的情况下始终保持在布局最下方是一个比较头疼的事.我看过一些利用绝对定位的例子,但总感觉不 ...

  9. Codeforces Round #379 (Div. 2) Analyses By Team:Red & Black

    A.Anton and Danik Problems: 给你长度为N的,只含'A','D'的序列,统计并输出何者出现的较多,相同为"Friendship" Analysis: lu ...

  10. javascript里面的数组,json对象,动态添加,修改,删除示例

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...