让我们说我使用tcp-nio.xml
配置
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="urn:org:jgroups"
xsi:schemaLocation="urn:org:jgroups http://www.jgroups.org/schema/jgroups.xsd">
<TCP_NIO2 bind_port="7800"
recv_buf_size="${tcp.recv_buf_size:5M}"
send_buf_size="${tcp.send_buf_size:5M}"
max_bundle_size="64K"
max_bundle_timeout="30"
sock_conn_timeout="300"
timer_type="new3"
timer.min_threads="4"
timer.max_threads="10"
timer.keep_alive_time="3000"
timer.queue_max_size="500"
thread_pool.enabled="true"
thread_pool.min_threads="2"
thread_pool.max_threads="8"
thread_pool.keep_alive_time="5000"
thread_pool.queue_enabled="true"
thread_pool.queue_max_size="10000"
thread_pool.rejection_policy="discard"
oob_thread_pool.enabled="true"
oob_thread_pool.min_threads="1"
oob_thread_pool.max_threads="8"
oob_thread_pool.keep_alive_time="5000"
oob_thread_pool.queue_enabled="false"
oob_thread_pool.queue_max_size="100"
oob_thread_pool.rejection_policy="discard"/>
<TCPPING async_discovery="true"
initial_hosts="${jgroups.tcpping.initial_hosts:localhost[7800],localhost[7801]}"
port_range="3"/>
<MERGE3 min_interval="10000"
max_interval="30000"/>
<FD_SOCK/>
<FD_ALL timeout="30000" />
<VERIFY_SUSPECT timeout="1500" />
<BARRIER />
<pbcast.NAKACK2 use_mcast_xmit="false"
discard_delivered_msgs="true"/>
<UNICAST3 />
<pbcast.STABLE stability_delay="1000" desired_avg_gossip="50000"
max_bytes="4M"/>
<pbcast.GMS print_local_addr="true" join_timeout="2000"
view_bundling="true"/>
<MFC max_credits="2M"
min_threshold="0.4"/>
<FRAG2 frag_size="60K" />
<!--RSVP resend_interval="2000" timeout="10000"/-->
<pbcast.STATE_TRANSFER/>
</config>
我要设置{jgroups.tcpping.initial_hosts:localhost[7800],localhost[7801]}
@Profile( CLUSTERED )
@Bean( JCHANNEL_SPRING_SECURITY )
public JChannel jChannelSpringSecurity(
@Value( "classpath:jgroups-session.xml" ) final InputStreamSource jgroupsConfig,
@Value( "${sessionDistributed.channel:SpringSecurity_Cluster}" ) final String channelName,
@Value( "${jgroups.tcpping.initialhosts:localhost,localhost}" ) final String initialHosts,
@Value( "${sessionDistributed.port:7800}" ) final int port
) throws Exception
{
initialHosts( "session", initialHosts, port );
JChannel jChannel = new JChannel( jgroupsConfig.getInputStream() );
jChannel.setName( channelName );
jChannel.connect( channelName );
return jChannel;
}
private void initialHosts( final String key, final CharSequence hostsCSV, final int port ) {
List<String> hosts = SPLITTER.splitToList( hostsCSV );
String initialHosts = String.format( "%s[%d],%s[%d]", hosts.get( 0 ), port, hosts.get( 1 ), port );
String property = String.format( "jgroups.%s.tcpping.initial_hosts", key );
System.setProperty( property, initialHosts );
}
这样可行,但有没有办法在不将其写回System.properties的情况下执行此操作?
答案 0 :(得分:0)
是的,您可以通过编程方式设置initial_hosts
,例如
List<PhysicalAddress> hosts=// create initial hosts
JChannel ch=...//create channel
TCPPING ping=ch.findProtocol(TCPPING.class);
ping.setInitialHosts(hosts);