Q&A-Ray-20180710
Q:
如果集群多个客户端订阅会不会重复接收消息?
A:
集群环境用,有另外一个参数。
NodeManager类没有在框架里面:
public interface INodeManager : IGrainWithStringKey
{
/// <summary>
/// 初始化节点管理器
/// </summary>
/// <param name="nodeList"></param>
/// <returns></returns>
Task Init(List<string> nodeList);
/// <summary>
/// 获取一个节点名称作为当前节点的名称
/// </summary>
/// <returns></returns>
Task<string> GetNodeName();
/// <summary>
/// 保持节点活动状态(超时节点会被回收)
/// </summary>
/// <param name="nodeName"></param>
/// <returns>是否续活成功</returns>
Task<bool> KeepLive(string nodeName);
}
public class NodeManager : Orleans.Grain, INodeManager
{
List<string> nodeList;
Dictionary<string, DateTime> nodeUserDict = new Dictionary<string, DateTime>();
public Task Init(List<string> nodeList)
{
this.nodeList = nodeList;
return Task.CompletedTask;
}
public Task<string> GetNodeName()
{
foreach (var node in nodeList)
{
if (nodeUserDict.TryGetValue(node, out var liveTime))
{
if (DateTime.UtcNow.Subtract(liveTime).TotalSeconds <= 35)
continue;
else
{
nodeUserDict[node] = DateTime.UtcNow;
}
}
if (!nodeUserDict.ContainsKey(node))
{
nodeUserDict.Add(node, DateTime.UtcNow);
}
return Task.FromResult(node);
}
return Task.FromResult(string.Empty);
}
public Task<bool> KeepLive(string nodeName)
{
if (nodeUserDict.ContainsKey(nodeName))
{
if (nodeList.Contains(nodeName))
{
nodeUserDict[nodeName] = DateTime.UtcNow;
return Task.FromResult(true);
}
else
nodeUserDict.Remove(nodeName);
}
return Task.FromResult(false);
}
}
Q:
没太搞明白这个怎么用,也就是集群客户端订阅会重复消费吗?
A:
这个类似分布式锁,设置只能启动三个节点,每次启动先去获取一个NodeName,如果获取得到就能启动,获取不到重试几次还不行就直接报错
Q:
就是在订阅的时候,限制启动节点。
示例:
var socketNodeManager=GrainClient.GrainFactory.GetGrain<INodeManager>("coin_websocket");
var nodeList=new List<string>(){ "Coin","Coin1","Coin2"};
socketNodeManager.Init(nodeList).GetAwaiter().GetResult();
while(true)
{
var nodeName=socketNodeManager.GetNodeName().GetAwaiter().GetResult();
if(!string.IsNullOrEmpty(nodeName))
{
Task.Factory.StartNew(async ()=>{
while(true)
{
await Task.Delay(TimeSpan.FromSeconds(30));
if (!await socketNodeManager.KeepLive(nodeName))
{
await socketNodeManager.Init(nodeList);
}
}
});
SubscribeManage.Start(nodeName).GetAwaiter().GetResult();
//或:SubscribeManage.Start(nodeName, nodeList).GetAwaiter().GetResult();
break;
}else
{
Task.Delay(20).Wait();
}
}
Q&A-Ray-20180710的更多相关文章
- IGS_学习笔记03_Integrated SOA Gateway设定配置(案例)
20150506 Created By BaoXinjian
- OpenCascade Ray Tracing Rendering
OpenCascade Ray Tracing Rendering eryar@163.com 摘要Abstract:OpenCascade6.7.0中引入了光线跟踪算法的实现.使用光线跟踪算法可实现 ...
- three.js 来源目光(十三)Math/Ray.js
商域无疆 (http://blog.csdn.net/omni360/) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:商域无疆 - 本博客专注于 敏捷开发 ...
- Ray Tracing
Ray Tracing 题目链接:http://codeforces.com/problemset/problem/724/C 拓展欧几里得 //为什么这次C题这么难啊=.= 可以观察到,光线在矩形中 ...
- 【LA3938】"Ray, Pass me the dishes!"
原题链接 Description After doing Ray a great favor to collect sticks for Ray, Poor Neal becomes very hun ...
- 【RAY TRACING THE REST OF YOUR LIFE 超详解】 光线追踪 3-6 直接光源采样
Chapter7 Sample Lights Directly Preface 今天我们来讲这个还算牛逼的技术——直接光源采样 之前我们提到过,在2-7 前两篇我们也提到要减少噪点,就是图片上的黑点 ...
- codeforces 724c Ray Tracing
好题 原题: There are k sensors located in the rectangular room of size n × m meters. The i-th sensor is ...
- 射线和三角形的相交检测(ray triangle intersection test)【转】
本文以Fast, Minimum Storage Ray Triangle Intersection为参考,在此感谢原作者,大家也可以直接阅读原版. 概述 射线和三角形的相交检测是游戏程序设计中一个常 ...
- Efficient GPU Screen-Space Ray Tracing
http://jcgt.org/published/0003/04/04/paper.pdf 一个号称只有2ms的实时gpu光线追踪 screen space reflection用到了 和其他ray ...
- games101 - 4 - Ray Tracing
games101 - 4 - Ray Tracing 目录 games101 - 4 - Ray Tracing 为什么需要Ray Tracing Recursive (Whitted-Style) ...
随机推荐
- linux自动挂载远程网盘到本地
sudo vim /etc/fstab 添加如下内容 //192.168.1.110/MyFiles /path/to/mount cifs username=adminz,password=pas ...
- 微信小程序把玩(七)数据绑定
原文:微信小程序把玩(七)数据绑定 数据绑定有一部分前几个看着还行,后面的几个可能有几个不理解,界面展示的数据有的也因为条件没法显示.看不懂的可以先记着,后面真正用到时就会明白,反正我是这样想的.这里 ...
- C# 遍历窗体控件顺序问题
今天在做C# winform 窗体控件遍历时遇到控件顺序的问题,也就是控件被遍历的先后问题.实际情况如下所述. 窗体界面如下: 界面构成是:主界面有一个 Panel (Panel_14),Panel_ ...
- Z Order(Copy From WIN32.HLP)
The Z order of a window indicates the window's position in a stack of overlapping windows. This wind ...
- SPOJ130_Rent your airplane and make money_单调队列DP实现
题意比较简单,状态转移方程也比较容易得出: f[i]=max{ f [ j ] }+p[i],(j的结束时间在i开始时间之前) 若i开始之前没有结束的j,则f[i]=p[i]; 因数据量太大(n< ...
- java.lang.ClassNotFoundException: org.apache.commons.fileupload.FileItemFactory 解决办法
解决办法:引入file upload 模块. 在POM文件中添加如下内容: <!-- file upload part --> <dependency> <groupId ...
- java关键字-abstract
抽象:不具体,看不明白. 抽象类表象体现. 在不断抽取过程中,将共性内容中的方法声明抽取,但是方法不一样,没有抽取,这时抽取到的方法,并不具体,需要被指定关键字abstract所标示,声明为抽象方法. ...
- python 方法无法在线程中使用(附python获取网络流量)
在python中,定义一个方法,直接调用可以,但是创建一个线程来调用就可能导致失败.这种现象多出现在使用com对象进行系统操作时,而且是以线程的形式调用. 异常提示如下:syntax error.WM ...
- 重定向Redirect 的知识
今天下班的时候看到了一些重定向的基础知识,也算开了眼界.以前也经常使用301和302,但从来没有使用过和了解过其他的3XX的状态码,发现原来里面涉及的知识和解决的问题的还不少. 重定向的流程 浏览器首 ...
- 关于学习js的Promise的心得体会
最近一直在研究js的Promise对象,其中有一篇blog写得比较通俗易懂,转发如下: http://www.cnblogs.com/lvdabao/p/es6-promise-1.html 参照上面 ...