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的更多相关文章

  1. IGS_学习笔记03_Integrated SOA Gateway设定配置(案例)

    20150506 Created By BaoXinjian

  2. OpenCascade Ray Tracing Rendering

    OpenCascade Ray Tracing Rendering eryar@163.com 摘要Abstract:OpenCascade6.7.0中引入了光线跟踪算法的实现.使用光线跟踪算法可实现 ...

  3. three.js 来源目光(十三)Math/Ray.js

    商域无疆 (http://blog.csdn.net/omni360/) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:商域无疆 -  本博客专注于 敏捷开发 ...

  4. Ray Tracing

    Ray Tracing 题目链接:http://codeforces.com/problemset/problem/724/C 拓展欧几里得 //为什么这次C题这么难啊=.= 可以观察到,光线在矩形中 ...

  5. 【LA3938】"Ray, Pass me the dishes!"

    原题链接 Description After doing Ray a great favor to collect sticks for Ray, Poor Neal becomes very hun ...

  6. 【RAY TRACING THE REST OF YOUR LIFE 超详解】 光线追踪 3-6 直接光源采样

    Chapter7 Sample Lights Directly  Preface 今天我们来讲这个还算牛逼的技术——直接光源采样 之前我们提到过,在2-7 前两篇我们也提到要减少噪点,就是图片上的黑点 ...

  7. codeforces 724c Ray Tracing

    好题 原题: There are k sensors located in the rectangular room of size n × m meters. The i-th sensor is ...

  8. 射线和三角形的相交检测(ray triangle intersection test)【转】

    本文以Fast, Minimum Storage Ray Triangle Intersection为参考,在此感谢原作者,大家也可以直接阅读原版. 概述 射线和三角形的相交检测是游戏程序设计中一个常 ...

  9. Efficient GPU Screen-Space Ray Tracing

    http://jcgt.org/published/0003/04/04/paper.pdf 一个号称只有2ms的实时gpu光线追踪 screen space reflection用到了 和其他ray ...

  10. games101 - 4 - Ray Tracing

    games101 - 4 - Ray Tracing 目录 games101 - 4 - Ray Tracing 为什么需要Ray Tracing Recursive (Whitted-Style) ...

随机推荐

  1. iOS 自定义UIButton

    工作中有一个点击button更新button上文案的需求,用自定义了button可以很简单的实现的这个需求 首先写个自定义的button CustomButton.h #import <UIKi ...

  2. 【Git】整合分支那些事儿

    对于scm这个岗位来说,基线升级应该是这个岗位需要的必备技能了,现在来说说我司进行高通代码基线升级时选择的方式方法,供大家参考,也供自己学习积累. git这个工具大家都并不陌生,但是对于不经常提交代码 ...

  3. Win8Metro(C#)数字图像处理--2.33图像非线性变换

    原文:Win8Metro(C#)数字图像处理--2.33图像非线性变换  [函数名称] 图像非线性变换函数NonlinearTransformProcess(WriteableBitmap src ...

  4. Qt4可以使用trUtf8函数,其内容可以是中文,也可以是\F硬编码

    显示在textBrowser->setText 中文乱码 转成QObject::trUtf8即可. ui->textBrowser->setText((QObject::trUtf8 ...

  5. 提示Windows Phone IP over USB Transport (IpOverUsbSvc)未运行,如何解决

    原文:提示Windows Phone IP over USB Transport (IpOverUsbSvc)未运行,如何解决 uwp项目在安装测试时提示,"引导"Device&q ...

  6. Java HashMap实现原理 源码剖析

    HashMap是基于哈希表的Map接口实现,提供了所有可选的映射操作,并允许使用null值和null建,不同步且不保证映射顺序.下面记录一下研究HashMap实现原理. HashMap内部存储 在Ha ...

  7. UWP-电子音读出文字

    原文:UWP-电子音读出文字 源码: https://github.com/lindexi/Markdown 代码 private async void speech(string str, Medi ...

  8. C#字符类型

    C#字符串类型采用Unicode字符集,一个Unicode标准字符长度位16位,它允许用单个编码方案表示世界上使用的所有字符. 字符类型表示位char. 关于字符的转义:C#也可以使用字符转义,用   ...

  9. Excel求值表达式——太好用了

    这个需要通过宏表函数EVALUATE来实现,首先需要自定义名称.如果数据在A列,那么在B列自定义名称,按Ctrl+F3键,在“定义名称框”中选择“新建”,然后输入名称为“结果”,数据来源输入=EVAL ...

  10. MFC中的模态对话框与非模态对话框,模态对话框测试

    http://blog.csdn.net/u010839382/article/details/52972427 http://blog.csdn.net/u010839382/article/det ...