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) ...
随机推荐
- 照片美妆---基于Haar特征的Adaboost级联人脸检测分类器
原文:照片美妆---基于Haar特征的Adaboost级联人脸检测分类器 本文转载自张雨石http://blog.csdn.net/stdcoutzyx/article/details/3484223 ...
- 操作XML文档遇到的XMLNS问题及解决方法 (C# 和 PHP)
原文:操作XML文档遇到的XMLNS问题及解决方法 (C# 和 PHP) 不管是用 PHP 还是 C#, 在操作 XML 的时候我们除了一个节点一个节点去取值之外, 还有一个非常方便的表达式, 就是 ...
- HTTP 错误 403.14 - Forbidden Web 服务器被配置为不列出此目录的内容。
解决方法: 找到目录浏览,打开,点击右边的启用就OK了.
- mqtt消息推送
https://github.com/wizinfantry/delphi-mqtt-clienthttps://github.com/Indemsys/Delphi_MQTT_mosquittoht ...
- 宿主机与虚拟机系统的USB设备切换
有时候我们需要在虚拟机的操作系统中进行一些USB设备的测试,但默认情况下USB设备是在宿主机系统里面的,那这个时候我们就要进行切换才能够达到目的,具体要怎么操作呢?下面讲解一下: 1. Ctrl+ ...
- Maven 安装和使用
Maven 安装和使用 1.下载 http://maven.apache.org/download.cgi 2.tar -bin.tar.gz 3.环境变量 /etc/profile export M ...
- zyltimer与ZylIdleTimer
http://www.zylsoft.com/zyltimer.htmhttp://www.zylsoft.com/products.htm
- 预编译加速编译(precompiled_header),指定临时文件生成目录,使项目文件夹更干净(MOC_DIR,RCC_DIR, UI_DIR, OBJECTS_DIR),#pragma execution_character_set("UTF-8")"这个命令是在编译时产生作用的,而不是运行时
预编译加速编译 QT也可以像VS那样使用预编译头文件来加速编译器的编译速度.首先在.pro文件中加入: CONFIG += precompiled_header 然后定义需要预编译的头文件: PREC ...
- 核心思想:评价早期SaaS创业公司时,投资人在关注什么?(是否有机会发展成一个平台,长期的护城河)
编者按: 当聊到早期项目时,人们经常会问投资人一个问题:“在评价早期 SaaS 创业公司时,投资人会关注什么——指标还是其他方面?” Nakul Mandan 作为 Lightspeed 风投机构的合 ...
- 适配DirectFB到qt4.8.5(嵌入式Linux)
适配DirectFB到qt4.8.5 1.编译qt4.8.5 这部在qt官网上其实已经有较详细的说明,了解更多,请点击链接进入. 首先是配置选项,如下是我的配置选项: ./configure \ -p ...