⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 loadbalancefailoverclient.java

📁 一种架设SOA的服务总线
💻 JAVA
字号:
/* *  Licensed to the Apache Software Foundation (ASF) under one *  or more contributor license agreements.  See the NOTICE file *  distributed with this work for additional information *  regarding copyright ownership.  The ASF licenses this file *  to you 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 samples.userguide;import org.apache.axiom.om.OMFactory;import org.apache.axiom.om.OMAbstractFactory;import org.apache.axiom.om.OMElement;import org.apache.axiom.om.OMNamespace;import org.apache.axiom.soap.SOAPFactory;import org.apache.axiom.soap.SOAPEnvelope;import org.apache.axiom.soap.SOAPHeader;import org.apache.axiom.soap.SOAPBody;import org.apache.axis2.client.Options;import org.apache.axis2.client.ServiceClient;import org.apache.axis2.client.OperationClient;import org.apache.axis2.addressing.EndpointReference;import org.apache.axis2.context.ConfigurationContext;import org.apache.axis2.context.ConfigurationContextFactory;import org.apache.axis2.context.MessageContext;import org.apache.axis2.AxisFault;import org.apache.axis2.Constants;import org.apache.axis2.transport.http.HttpTransportProperties;import org.apache.axis2.transport.http.HTTPConstants;import org.apache.axis2.wsdl.WSDLConstants;import javax.xml.namespace.QName;import java.util.Random;import java.io.File;import java.net.URL;import java.net.MalformedURLException;public class LoadbalanceFailoverClient {    /**     * @param args 0: simple | session     *             1: port     *             2: iteration     */    public static void main(String[] args) {        String mode = System.getProperty("mode");        try {            if (mode != null) {                if (mode.equalsIgnoreCase("session")) {                    new LoadbalanceFailoverClient().sessionfullClient();                } else if (mode.equalsIgnoreCase("simple") || mode.equalsIgnoreCase("")) {                    new LoadbalanceFailoverClient().sessionlessClient();                }            } else {                // default is simple client                new LoadbalanceFailoverClient().sessionlessClient();            }        } catch (AxisFault axisFault) {            System.out.println(axisFault.getMessage());        }    }    public String sessionlessClient() throws AxisFault {        String synapsePort = "8080";        int iterations = 100;        boolean infinite = true;        String pPort = getProperty("port", synapsePort);        String pIterations = getProperty("i", null);        String addUrl = getProperty("addurl", null);        String trpUrl = getProperty("trpurl", null);        String prxUrl = getProperty("prxurl", null);        if (pPort != null) {            try {                Integer.parseInt(pPort);                synapsePort = pPort;            } catch (NumberFormatException e) {                // run with default value            }        }        if (pIterations != null) {            try {                iterations = Integer.parseInt(pIterations);                if (iterations != -1) {                    infinite = false;                }            } catch (NumberFormatException e) {                // run with default values            }        }        OMFactory fac = OMAbstractFactory.getOMFactory();        OMElement value = fac.createOMElement("Value", null);        value.setText("Sample string");        Options options = new Options();        options.setTo(new EndpointReference("http://localhost:" + synapsePort));        options.setAction("urn:sampleOperation");        String repo = System.getProperty("repository");        ConfigurationContext configContext;        if (repo != null) {            configContext = ConfigurationContextFactory.createConfigurationContextFromFileSystem(                repo, repo + File.separator + "conf" + File.separator + "axis2.xml");        } else {            configContext = ConfigurationContextFactory.                createConfigurationContextFromFileSystem("client_repo", null);        }        ServiceClient client = new ServiceClient(configContext, null);        options.setTimeOutInMilliSeconds(10000000);        // set addressing, transport and proxy url        if (addUrl != null && !"null".equals(addUrl)) {            client.engageModule("addressing");            options.setTo(new EndpointReference(addUrl));        }        if (trpUrl != null && !"null".equals(trpUrl)) {            options.setProperty(Constants.Configuration.TRANSPORT_URL, trpUrl);        } else {            client.engageModule("addressing");        }        if (prxUrl != null && !"null".equals(prxUrl)) {            HttpTransportProperties.ProxyProperties proxyProperties =                new HttpTransportProperties.ProxyProperties();            try {                URL url = new URL(prxUrl);                proxyProperties.setProxyName(url.getHost());                proxyProperties.setProxyPort(url.getPort());                proxyProperties.setUserName("");                proxyProperties.setPassWord("");                proxyProperties.setDomain("");                options.setProperty(HTTPConstants.PROXY, proxyProperties);            } catch (MalformedURLException e) {                throw new AxisFault("Error creating proxy URL", e);            }        }        client.setOptions(options);        String testString = "";        long i = 0;        while (i < iterations || infinite) {            OMElement responseElement = client.sendReceive(value);            String response = responseElement.getText();            i++;            System.out.println("Request: " + i + " ==> " + response);            testString += (":" + i + ">" + response + ":");        }        return testString;    }    /**     * This method creates 3 soap envelopes for 3 different client based sessions. Then it randomly     * choose one envelope for each iteration and send it to the ESB. ESB should be configured with     * session affinity load balancer and the SampleClientInitiatedSession dispatcher. This will     * output request number, session number and the server ID for each iteration. So it can be     * observed that one session number always associated with one server ID.     */    private void sessionfullClient() {        String synapsePort = "8080";        int iterations = 100;        boolean infinite = true;        String pPort = getProperty("port", synapsePort);        String pIterations = getProperty("i", null);        String addUrl = getProperty("addurl", null);        String trpUrl = getProperty("trpurl", null);        String prxUrl = getProperty("prxurl", null);        if (pPort != null) {            try {                Integer.parseInt(pPort);                synapsePort = pPort;            } catch (NumberFormatException e) {                // run with default value            }        }        if (pIterations != null) {            try {                iterations = Integer.parseInt(pIterations);                if (iterations != -1) {                    infinite = false;                }            } catch (NumberFormatException e) {                // run with default values            }        }        Options options = new Options();        options.setTo(new EndpointReference("http://localhost:" + synapsePort));        options.setAction("urn:sampleOperation");        options.setTimeOutInMilliSeconds(10000000);        try {            SOAPEnvelope env1 = buildSoapEnvelope("c1", "v1");            SOAPEnvelope env2 = buildSoapEnvelope("c2", "v1");            SOAPEnvelope env3 = buildSoapEnvelope("c3", "v1");            SOAPEnvelope[] envelopes = {env1, env2, env3};            ConfigurationContext configContext = ConfigurationContextFactory.                createConfigurationContextFromFileSystem("client_repo", null);            ServiceClient client = new ServiceClient(configContext, null);                        // set addressing, transport and proxy url            if (addUrl != null && !"null".equals(addUrl)) {                client.engageModule("addressing");                options.setTo(new EndpointReference(addUrl));            }            if (trpUrl != null && !"null".equals(trpUrl)) {                options.setProperty(Constants.Configuration.TRANSPORT_URL, trpUrl);            } else {                client.engageModule("addressing");            }            if (prxUrl != null && !"null".equals(prxUrl)) {                HttpTransportProperties.ProxyProperties proxyProperties =                    new HttpTransportProperties.ProxyProperties();                try {                    URL url = new URL(prxUrl);                    proxyProperties.setProxyName(url.getHost());                    proxyProperties.setProxyPort(url.getPort());                    proxyProperties.setUserName("");                    proxyProperties.setPassWord("");                    proxyProperties.setDomain("");                    options.setProperty(HTTPConstants.PROXY, proxyProperties);                } catch (MalformedURLException e) {                    throw new AxisFault("Error creating proxy URL", e);                }            }            client.setOptions(options);            int i = 0;            int sessionNumber = 0;            while (i < iterations || infinite) {                i++;                MessageContext messageContext = new MessageContext();                sessionNumber = getSessionTurn(envelopes.length);                messageContext.setEnvelope(envelopes[sessionNumber]);                OperationClient op = client.createClient(ServiceClient.ANON_OUT_IN_OP);                op.addMessageContext(messageContext);                op.execute(true);                MessageContext responseContext =                    op.getMessageContext(WSDLConstants.MESSAGE_LABEL_IN_VALUE);                SOAPEnvelope responseEnvelope = responseContext.getEnvelope();                OMElement vElement =                    responseEnvelope.getBody().getFirstChildWithName(new QName("Value"));                System.out.println(                    "Request: " + i + " Session number: " +                        sessionNumber + " " + vElement.getText());            }        } catch (AxisFault axisFault) {            System.out.println(axisFault.getMessage());        }    }    private int getSessionTurn(int max) {        Random random = new Random();        return random.nextInt(max);    }    private SOAPEnvelope buildSoapEnvelope(String clientID, String value) {        String targetEPR = "http://localhost:9000/soap/Service1";        String opration = "sampleOperation";        SOAPFactory soapFactory = OMAbstractFactory.getSOAP12Factory();        OMNamespace wsaNamespace = soapFactory.            createOMNamespace("http://www.w3.org/2005/08/addressing", "wsa");        SOAPEnvelope envelope = soapFactory.createSOAPEnvelope();        SOAPHeader header = soapFactory.createSOAPHeader();        envelope.addChild(header);        OMNamespace synNamespace = soapFactory.            createOMNamespace("http://ws.apache.org/namespaces/synapse", "syn");        OMElement clientIDElement = soapFactory.createOMElement("ClientID", synNamespace);        clientIDElement.setText(clientID);        header.addChild(clientIDElement);        SOAPBody body = soapFactory.createSOAPBody();        envelope.addChild(body);        OMElement valueElement = soapFactory.createOMElement("Value", null);        valueElement.setText(value);        body.addChild(valueElement);        return envelope;    }    private static String getProperty(String name, String def) {        String result = System.getProperty(name);        if (result == null || result.length() == 0) {            result = def;        }        return result;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -