java语言组播技术 和 JGroups文档格式.docx
- 文档编号:21815679
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:18
- 大小:209.71KB
java语言组播技术 和 JGroups文档格式.docx
《java语言组播技术 和 JGroups文档格式.docx》由会员分享,可在线阅读,更多相关《java语言组播技术 和 JGroups文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
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/-->
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java语言组播技术 JGroups java 语言 技术