java语言组播技术 和 JGroups文档格式.docx

上传人:b****5 文档编号:21815679 上传时间:2023-02-01 格式:DOCX 页数:18 大小:209.71KB
下载 相关 举报
java语言组播技术 和 JGroups文档格式.docx_第1页
第1页 / 共18页
java语言组播技术 和 JGroups文档格式.docx_第2页
第2页 / 共18页
java语言组播技术 和 JGroups文档格式.docx_第3页
第3页 / 共18页
java语言组播技术 和 JGroups文档格式.docx_第4页
第4页 / 共18页
java语言组播技术 和 JGroups文档格式.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

java语言组播技术 和 JGroups文档格式.docx

《java语言组播技术 和 JGroups文档格式.docx》由会员分享,可在线阅读,更多相关《java语言组播技术 和 JGroups文档格式.docx(18页珍藏版)》请在冰豆网上搜索。

java语言组播技术 和 JGroups文档格式.docx

newMulticastClient().start();

}

classMulticastServerextendsThread{

publicvoidrun(){

try{

MulticastSocketmcastSocket=newMulticastSocket(7777);

InetAddressinetAddress=InetAddress.getByName("

230.0.0.1"

);

mcastSocket.setNetworkInterface(NetworkInterface.getByInetAddress(InetAddress.getLocalHost()));

mcastSocket.joinGroup(inetAddress);

while(true){

byte[]arb=newbyte[100];

DatagramPacketdatagramPacket=newDatagramPacket(arb,arb.length);

mcastSocket.receive(datagramPacket);

System.out.println("

Server:

"

+newString(arb,0,datagramPacket.getLength()));

}

}catch(Exceptiondx){

dx.printStackTrace();

classMulticastClientextendsThread{

while(true){

byte[]arb=newbyte[]{'

h'

'

e'

l'

o'

};

DatagramPacketdatagramPacket=newDatagramPacket(arb,arb.length,inetAddress,7777);

MulticastSocketmulticastSocket=newMulticastSocket();

multicastSocket.send(datagramPacket);

Thread.sleep(1000);

使用jgroups的例子

importjava.io.BufferedReader;

importjava.io.InputStreamReader;

importorg.jgroups.Address;

importorg.jgroups.ChannelException;

importorg.jgroups.JChannel;

importorg.jgroups.Message;

importorg.jgroups.ReceiverAdapter;

importorg.jgroups.View;

publicclassLearn1{

privateJChannelchannel=null;

publicLearn1()throwsChannelException{

channel=newJChannel("

c:

/udp.xml"

publicstaticvoidmain(String[]args)throwsChannelException{

Learn1learn=newLearn1();

learn.startup();

newSendMessage(learn.channel).start();

privatevoidstartup()throwsChannelException{

channel.setReceiver(newReceiverMessage());

//channel.setOpt(option,value);

channel.connect("

FL"

classReceiverMessageextendsReceiverAdapter{

publicvoidreceive(Messagemsg){

System.out.println(msg.getSrc()+"

:

"

+msg.getObject()+"

at"

+System.currentTimeMillis());

publicvoidviewAccepted(Viewnew_view){

viewAccepted:

+new_view);

publicvoidsuspect(Addresssuspected_mbr){

suspect:

+suspected_mbr);

classSendMessageextendsThread{

privateJChannelchannel;

publicSendMessage(JChannelchannel){

this.channel=channel;

BufferedReaderin=newBufferedReader(newInputStreamReader(System.in));

while(true){

System.out.print("

>

System.out.flush();

Stringline=in.readLine().toLowerCase();

if(line.startsWith("

quit"

)||line.startsWith("

exit"

)){

System.exit(0);

Messagemsg=newMessage(null,null,line);

channel.send(msg);

使用的udp.xml及相关参数说明

<

!

--

DefaultstackusingIPmulticasting.Itissimilartothe"

udp"

stackinstacks.xml,butdoesn'

tusestreamingstatetransferandflushing

author:

BelaBan

version:

$Id:

udp.xml,v1.24.2.12007/11/2008:

53:

40belabanExp$

-->

config>

UDP协议设置

ip_mcast:

指定是否使用ip多播,defaulttrue

也可以通过TCP连接发送多个单播消息到成员,TCP也可以发送多播消息,但是这不是标准。

mcast_addr:

多播地址缺省:

228.8.8.8;

mcast_port:

多播端口缺省:

7600

ucast_recv_buf_size="

20000000"

//单播接收缓冲区大小缺省:

64000

ucast_send_buf_size="

640000"

//单播发送缓冲区大小缺省:

32000

mcast_recv_buf_size="

25000000"

//组播接收缓冲区大小缺省:

mcast_send_buf_size="

//组播发送缓冲区大小缺省:

loopback:

如果为true,单播直接给自己。

组播则同样直接给自己处理,并且之后组播。

当enable_bundling为true并将max_bundle_timeout设置一个足够大的值会体现出差别

缺省:

false

discard_incompatible_packets:

丟弃不同版本的数据包缺省:

enable_bundling:

指定是否能够捆绑消息。

如果为真,则累积到max_bundle_size字节,或者max_bundle_time超时。

再将其发出。

缺省:

max_bundle_size:

字节数,当消息累积字节数。

当累积值超过该值则消息会被发送。

65535

max_bundle_timeout:

消息发送的超时毫秒数。

队列中等待发送的消息超过该时间则被发送.缺省:

20

use_incoming_packet_handler:

当接收消息过载时是否增加新的线程进行处理。

true

ip_ttl:

TTL为0,则报文只能本机上使用。

为1则只能在本地网络上使用。

路由器会将其抛弃,标准TTL经过一个路由器,减1,所以不会传递到其它网络。

文档缺省:

32,代码是64

enable_diagnostics:

是否打开内部检测。

(没有找到相关说明,从代码上推测出来的)缺省:

thread_naming_pattern:

线程命名方式。

有效值可以是:

pcl.缺省:

cl

p:

之前的名称c:

clusterName聚簇名称l:

localaddress地址

use_concurrent_stack:

是否使用并发栈。

thread_pool:

oob_thread_pool:

use_packet_handler:

<

UDP

ip_mcast="

true"

mcast_addr="

${jgroups.udp.mcast_addr:

228.10.10.10}"

mcast_port="

${jgroups.udp.mcast_port:

45588}"

loopback="

false"

discard_incompatible_packets="

enable_bundling="

max_bundle_size="

64000"

max_bundle_timeout="

3000"

use_incoming_packet_handler="

ip_ttl="

${jgroups.udp.ip_ttl:

2}"

enable_diagnostics="

thread_naming_pattern="

cl"

use_concurrent_stack="

thread_pool.enabled="

thread_pool.min_threads="

2"

thread_pool.max_threads="

8"

thread_pool.keep_alive_time="

5000"

thread_pool.queue_enabled="

thread_pool.queue_max_size="

1000"

thread_pool.rejection_policy="

Run"

oob_thread_pool.enabled="

oob_thread_pool.min_threads="

1"

oob_thread_pool.max_threads="

oob_thread_pool.keep_alive_time="

oob_thread_pool.queue_enabled="

oob_thread_pool.queue_max_size="

100"

oob_thread_pool.rejection_policy="

/>

*PING协议

*timeout:

等待初始化成员超时时间(ms)。

3000

*property:

为FIND_INITAL_MBRS找到的最小初始化成员数。

2

gossip_host-ifyouareusingGOSSIPthenthisdefinesthehostoftheGossipRouter,defaultisnull

gossip_port-ifyouareusingGOSSIPthenthisdefinestheportoftheGossipRouter,defaultisnull

PINGtimeout="

2000"

num_initial_members="

3"

/>

当网络发生故障。

可能将group分隔开。

该协议用于将被分隔开的group进行重新组合

-->

MERGE2max_interval="

30000"

min_interval="

10000"

FD_SOCK:

基于TCP套接字的故障检测。

基于环的ping被在邻居成员之间发送。

FD_SOCK/>

FD(FailureDetection故障检测)heartbeat方式

的作用就是探测组内的成员是否还活着。

当组内的成员被怀疑可能死掉了,

那么SUSPECT消息就会传播到集群的每一个节点上

timeout:

等影响消息的ms数

max_tries:

最大重试次数

shun:

例如:

一个组内有a,b,c,d四个成员,

当d由于负荷过高没有在timeout的时间内作出响应,

导致被踢出组的时候,a,b,c的组员view中只有abc三个member,

而d的view却还有abcd四个成员,此时如果D再发消息给组内的成员,

组内成员将会拒绝接受。

那么如果设置shun为true的时候,

D就重新加入组内在下面两种情况:

1.ABC接受到了D发过来的are-you-alive的检测消息。

2.D自己收到了一个view消息,view内不包含D。

(类似于重连机制)。

这点很重要特别是在分布式的环境中,当某些服务器的压力可能较高,

配置的超时时间又不确定是否可以满足高负荷响应。

记得要在GMS里面的shun也配置一样的情况。

FDtimeout="

max_tries="

5"

shun="

VERIFY_SUSPECT:

发送消息以确保以前怀疑的成员已真正崩溃(crashed)

VERIFY_SUSPECTtimeout="

1500"

BARRIER/>

pbcast.NAKACK:

保证消息的可靠性和顺序性

因为基于底层的UDP协议,数据报不被可靠的传输。

其使用一个NAK的应答保证消息的可靠接收。

使用一个序号保证消息的顺序性

retransmit_timeout:

类似UNICAST的timeout

use_mcast_xmit:

是否多播到cluser中

pbcast.NAKACKuse_stats_for_retransmission="

exponential_backoff="

150"

use_mcast_xmit="

gc_lag="

0"

retransmit_timeout="

50,300,600,1200"

discard_delivered_msgs="

UNICAST:

实现可靠的单播传输。

请求丢失消息的重新传输,并确保发出消息的正确排序

其通过ACK来进行确认。

第一次超时时间为300ms.第二次为600ms....

UNICASTtimeout="

300,600,1200"

pbcast.STABLE:

删除被全部member查看到的消息

(作用就是如果在分布式的情况下,其中某些member没有看到,

那么这条消息就不会被删除,会重发,保证消息广播的全局性)

实现分布式的垃圾收集协议(也就是说,删除所有已被所有组成员接收到的消息)

pbcast.STABLEstability_delay="

desired_avg_gossip="

50000"

max_bytes="

1000000"

VIEW_SYNCavg_send_interval="

60000"

pbcast.GMSprint_local_addr="

join_timeout="

view_bundling="

FlowControl流控制服务

用于调用发送端的发送速率和接收端的接收速率达到平衡

FCmax_credits="

500000"

min_threshold="

0.20"

分块协议:

FRAG和FRAG2用来将大消息分块发送

FRAG2frag_size="

--pbcast.STREAMING_STATE_TRANSFER/-->

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 工学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1