文档章节

Jgroups组播通信和掉线检测

拉风的道长
 拉风的道长
发布于 2013/11/12 17:23
字数 839
阅读 1864
收藏 31
/*

http://my.oschina.net/lifj/blog/175758

*/


最近在使用Jgroups做多用户的组播通信程序,发现当超过两个用户连接上的时候,会出现如下错误:

2000ms出现后不一会,所有终端都会全部退出广播


如下打印日志信息:

failed to collect all acks (expected=1) for view

after 2000ms missing acks from -


我的协议配置主体如下:

<UDP ip_mcast="true"
     ...../>
<FD timeout=”3000” max_tries=”1”/>


这么配置的初衷是:

1.使用组播进行消息的传递,减少网络的数据量。

2.同时,能够及时的对成员的断开做判断。(其实Jgroups也有默认检测时间,大约是35秒)

但是,这么配置的话,就会出现以上的错误信息。


经过多次尝试,下面是我总结的一个表格:

是否使用UDP协议

是否使用多播

是否增加FD检测

是否发生掉线

成员断线判断是否及时

未知(因为掉线了)


也就是说:只有同时使用多播和FD检测的时候,才会出现掉线这样的情况


这也正是我目前的配置文件中使用的方式。
 

如何解决这个问题呢?

阅读官方文档,官网推荐使用多个通道来实现不同的操作。

根据以上表格和上面列出来的2点需求来看,我们这边也可以这么做:
1.创建一个通道(online),专门用于检测成员是否掉线。
2.创建一个通道(command),专门用于发送命令和传输数据。

这样的话,
1. online的配置可以这样设计:不使用多播,但是增加FD检测。
    不使用多播也不会增加数据量,因为这个通道上不会发送数据,只会做掉线的判断。
    增加FD检测,就能够及时的知道是否已经掉线。
所以,online配置文件类似于
<UDP ip_mcast="false"
        ....../>
<FD timeout="2000" max_tries = "1"/>

2.command的配置文件可以这样设计:使用多播,但不增加FD检测。
    使用多播,可以减少网络数据量,降低网络阻塞的可能性。
    不用FD检测,因为FD检测在online中专门进行了。
所以,command配置文件类似于:
<UDP ip_mcast="true"
     ...../>
<FD />  <!-- 无需设置-->

这两个通道配合工作:
    每次连接时,同时启动online和command通道。
    比如说有这样一个场景(虽然这个场景不是很常见):一个服务器A,一个服务器B,N个成员。N个成员的活动依赖服务器B的状态,如果服务器B宕机了,N个成员就也应该终止活动。服务器A,B和成员,都在同一个网络中。

在服务器B掉线的场景下:只要服务器A的online通道检测到服务器B掉线了,服务器A就通过command通道发送命令给其他成员,其他成员接收到命令之后,关闭和服务器B连接的online通道和 command通道。等待下次的连接。

这样的话,即可以解决掉线及时判断的问题,又能够保证数据量的最小化和网络的稳定性。

© 著作权归作者所有

拉风的道长
粉丝 55
博文 110
码字总数 55629
作品 0
昌平
程序员
私信 提问
加载中

评论(1)

francis-x
francis-x
讲得不错呀~赞一个~~
JGroups 3.5.1.Final 发布下载

JGroups 3.5.1.Final 发布下载,官方暂时还未放出发行说明。 JGroups是一个可靠的群组通讯Java工具包。它基于IP组播(IP multicast),但在可靠性,组成员管理上对它作了扩展。 JGroups的可靠性...

oschina
2014/09/26
1K
4
JGroups 3.5.0.Final 发布

JGroups 3.5.0.Final 发布,此版本解决了 137 个 issues ,现已提供下载,Maven: 更多内容请看发行日志。 JGroups是一个可靠的群组通讯Java工具包。它基于IP组播(IP multicast),但在可靠性,...

oschina
2014/08/30
1K
2
JGroups系列之介绍和体会

JGroups系列之介绍和体会 很早就想做这个JGroups系列,因为在分布式的系统中,各个部分经常需要相互通信。这些通信包括:信息需要同时发给集群中的某些或全部的worker;或者一个worker启动、...

引鸩怼孑
2015/07/28
127
1
bbossgroups 2.0-RC版本中如何通过JGroups来实现集群节点间远程服务调用,或者多服务器之间远程服务调用

bbossgroups 2.0-RC中对jgroups已经升级到Jgroups 2.10.0版本,因此对aop中基于JGroups的rpc也做了相应的调整,本文详细讲解新的使用方法: 1.配置文件目录调整: jgroups本身协议配置文件和...

bboss
2010/07/17
0
0
JGroups 3.5.0.Beta2 发布

JGroups 3.5.0.Beta2 发布了,官方没有发布改进说明。下载地址: https://github.com/belaban/JGroups/archive/JGroups-3.5.0.Beta2.zip JGroups是一个可靠的群组通讯Java工具包。它基于IP组...

oschina
2014/03/29
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

CRM、DMP、CDP都是什么?有什么区别?

Markter对CRM系统(Customer Relationship Management System,客户关系管理系统),营销自动化等概念都已经比较熟悉,也许DMP(Data Management Platform,数据管理平台)也多多少少有些了解。...

怡海软件-CRM
15分钟前
4
0
中台是什么,到底要解决什么问题?

故事的开始 这个最早由阿里在2015年提出的“大中台,小前台”战略中延伸出来的概念,最近在国内大热。阿里、腾讯、百度、京东、美团、滴滴等一众互联网巨头,从去年到今年,接连开始组织架构...

喵二狸
26分钟前
3
0
Linux Centos 7 - MySQL 5.7离线安装

内部网络通过离线包的方式进行安装。 一、下载 下载地址:https://dev.mysql.com/downloads/mysql/ 进入页面后,点击右侧链接。 下载对应版本。 通过xftp6等工具上传到服务器上。 二、安装和...

华山猛男
26分钟前
3
0
EventBus 3 全解

EventBus 3 全解 [TOC] 使用 一个基于观察者模式的事件发布/订阅框架. 用于模块间通信和解耦, 使用方便,性能高. 基本使用 1. gradle导入依赖库 implementation 'org.greenrobot:eventbus:3....

马湖村第九后羿
29分钟前
4
0
HTTP 协议

什么是HTTP协议? HTTP是hypertext transport protocol的缩写,即超文本传输协议。 是用于万维网服务器与本地浏览器之间传输超文本的传送协议。可以使浏览器更加高效,使网络传输减少。能够保...

彩色泡泡糖
39分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部