/* * Copyright 2008-2009 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package test.net.hasor.rsf.functions; import net.hasor.core.Hasor; import net.hasor.rsf.InterAddress; import net.hasor.rsf.address.AddressBucket; import net.hasor.rsf.address.AddressPool; import net.hasor.rsf.address.DiskCacheAddressPool; import net.hasor.rsf.rpc.context.DefaultRsfEnvironment; import net.hasor.rsf.utils.IOUtils; import net.hasor.rsf.utils.ResourcesUtils; import org.junit.Test; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Random; import java.util.Set; /** * * @version : 2014年9月12日 * @author 赵永春(zyc@hasor.net) */ public class AddressPoolTest { protected void configService(AddressPool pool, String service) throws URISyntaxException, IOException { ArrayList<InterAddress> dynamicList = new ArrayList<InterAddress>(); dynamicList.add(new InterAddress("127.0.0.1", 8000, "etc2")); dynamicList.add(new InterAddress("127.0.0.2", 8000, "etc2")); dynamicList.add(new InterAddress("127.0.0.3", 8000, "etc2")); dynamicList.add(new InterAddress("127.0.0.4", 8000, "etc2")); pool.appendAddress(service, dynamicList); // ArrayList<InterAddress> staticList = new ArrayList<InterAddress>(); staticList.add(new InterAddress("127.0.1.1", 8000, "etc2")); staticList.add(new InterAddress("127.0.2.2", 8000, "etc2")); staticList.add(new InterAddress("127.0.3.3", 8000, "etc2")); staticList.add(new InterAddress("127.0.4.4", 8000, "etc2")); pool.appendStaticAddress(service, staticList); // String flowBody = IOUtils.readToString(ResourcesUtils.getResourceAsStream("/flow-control/full-flow.xml")); pool.updateFlowControl(service, flowBody); // String scriptBody1 = IOUtils.readToString(ResourcesUtils.getResourceAsStream("/rule-script/service-level.groovy")); pool.updateServiceRoute(service, scriptBody1); // String scriptBody2 = IOUtils.readToString(ResourcesUtils.getResourceAsStream("/rule-script/method-level.groovy")); pool.updateMethodRoute(service, scriptBody2); // String scriptBody3 = IOUtils.readToString(ResourcesUtils.getResourceAsStream("/rule-script/args-level.groovy")); pool.updateArgsRoute(service, scriptBody3); } // @Test public void saveToZipTest() throws URISyntaxException, IOException { DefaultRsfEnvironment rsfEnv = new DefaultRsfEnvironment(Hasor.createAppContext().getEnvironment()); AddressPool pool = new AddressPool(rsfEnv); String serviceID = "HelloWord_"; // for (int i = 0; i < 10; i++) { String service = serviceID + i; configService(pool, service); } // File outFile = new File(rsfEnv.getPluginDir(AddressPoolTest.class), "pool.zip"); outFile.getParentFile().mkdirs(); FileOutputStream out = new FileOutputStream(outFile, false); pool.storeConfig(out); out.flush(); out.close(); } @Test public void readFormZipTest() throws IOException, URISyntaxException { this.saveToZipTest(); // DefaultRsfEnvironment rsfEnv = new DefaultRsfEnvironment(Hasor.createAppContext().getEnvironment()); AddressPool pool = new AddressPool(rsfEnv); String serviceID = "HelloWord_"; // for (int i = 0; i < 10; i++) { pool.appendAddress(serviceID + i, new InterAddress("192.168.1.1", 8000, "etc2")); } // File inFile = new File(rsfEnv.getPluginDir(AddressPoolTest.class), "pool.zip"); FileInputStream in = new FileInputStream(inFile); pool.restoreConfig(in); in.close(); // Set<String> names = pool.getBucketNames(); for (String service : names) { AddressBucket bucket = pool.getBucket(service); System.out.println(bucket.getServiceID() + " - address size = " + bucket.getAllAddresses().size()); } } @Test public void localDiskCacheTest() throws IOException, URISyntaxException, InterruptedException { // // 1.修改默认配置 DefaultRsfEnvironment rsfEnv = new DefaultRsfEnvironment(Hasor.createAppContext().getEnvironment()); rsfEnv.getSettings().setSetting("hasor.rsfConfig.addressPool.refreshCacheTime", "1000"); rsfEnv.getSettings().setSetting("hasor.rsfConfig.addressPool.diskCacheTimeInterval", "3000"); rsfEnv.getSettings().setSetting("hasor.rsfConfig.addressPool.invalidWaitTime", "500"); rsfEnv.getSettings().refreshRsfConfig(); String serviceID = "HelloWord_"; // // 2.测试本地缓存保存 DiskCacheAddressPool pool = new DiskCacheAddressPool(rsfEnv); for (int i = 0; i < 10; i++) { configService(pool, serviceID + i); } pool.storeConfig();//保存一次 // // 3.测试本地地址缓存加载。 pool = new DiskCacheAddressPool(rsfEnv); for (int i = 0; i < 10; i++) { pool.appendAddress(serviceID + i, new InterAddress("192.168.1.1", 8000, "etc2")); } pool.restoreConfig(); } // @Test public void nextAddressTest() throws IOException, URISyntaxException, InterruptedException { DefaultRsfEnvironment rsfEnv = new DefaultRsfEnvironment(Hasor.createAppContext().getEnvironment()); final AddressPool pool = new AddressPool(rsfEnv); final String serviceID = "[RSF]test.net.hasor.rsf.services.EchoService-1.0.0"; // ArrayList<InterAddress> dynamicList = new ArrayList<InterAddress>(); dynamicList.add(new InterAddress("127.0.0.1", 8000, "etc2")); pool.appendAddress(serviceID, dynamicList); // ArrayList<InterAddress> staticList = new ArrayList<InterAddress>(); staticList.add(new InterAddress("192.168.137.10", 8000, "etc2")); staticList.add(new InterAddress("192.168.137.11", 8000, "etc2")); staticList.add(new InterAddress("127.0.4.4", 8000, "etc2")); pool.appendStaticAddress(serviceID, staticList); // String flowBody = IOUtils.readToString(ResourcesUtils.getResourceAsStream("/flow-control/full-performance-flow.xml")); pool.updateFlowControl(serviceID, flowBody); // // Thread thread = new Thread() { @Override public void run() { Random random = new Random(System.currentTimeMillis()); while (true) { InterAddress address = pool.nextAddress(serviceID, "sayHello", new Object[] { "hello" }); System.out.println(Long.toHexString(random.nextLong()).toUpperCase() + "\t" + address); try { Thread.sleep(10); } catch (InterruptedException e) { } } } }; thread.setDaemon(true); thread.start(); // Thread.sleep(5000); flowBody = IOUtils.readToString(ResourcesUtils.getResourceAsStream("/flow-control/full-flow.xml")); pool.updateFlowControl(serviceID, flowBody); // Thread.sleep(5000); String scriptBody = IOUtils.readToString(ResourcesUtils.getResourceAsStream("/rule-script/service-level.groovy")); pool.updateServiceRoute(serviceID, scriptBody); // Thread.sleep(5000); thread.stop(); } }