blob: 64a5be299be3938369bc4afe7e944b8435538785 [file] [log] [blame]
/*
* 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 com.alibaba.dubbo.remoting;
import com.alibaba.dubbo.common.URL;
import com.alibaba.dubbo.remoting.exchange.ExchangeChannel;
import com.alibaba.dubbo.remoting.exchange.Exchangers;
import com.alibaba.dubbo.remoting.exchange.ResponseFuture;
import com.alibaba.dubbo.remoting.exchange.support.Replier;
import com.alibaba.dubbo.remoting.exchange.support.ReplierDispatcher;
import java.io.Serializable;
import java.util.Random;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
/**
* Main
*/
public class Main {
public static void main(String[] args) throws Exception {
startServer(9010);
mutliThreadTest(10, 9010);
dataPackageTest(9010);
}
private static void startServer(int port) throws Exception {
ReplierDispatcher dispatcher = new ReplierDispatcher();
dispatcher.addReplier(RpcMessage.class, new RpcMessageHandler());
dispatcher.addReplier(Object.class, new Replier<Object>() {
public Object reply(ExchangeChannel channel, Object msg) {
for (int i = 0; i < 10000; i++)
System.currentTimeMillis();
System.out.println("handle:" + msg + ";thread:" + Thread.currentThread().getName());
return new StringMessage("hello world");
}
});
Exchangers.bind(URL.valueOf("dubbo://localhost:" + port), dispatcher);
}
static void dataPackageTest(int port) throws Exception {
ExchangeChannel client = Exchangers.connect(URL.valueOf("dubbo://localhost:" + port));
Random random = new Random();
for (int i = 5; i < 100; i++) {
StringBuilder sb = new StringBuilder();
for (int j = 0; j < i * 100; j++)
sb.append("(" + random.nextLong() + ")");
Main.Data d = new Main.Data();
d.setData(sb.toString());
client.request(d).get();
}
System.out.println("send finished.");
}
static void mutliThreadTest(int tc, final int port) throws Exception {
Executor exec = Executors.newFixedThreadPool(tc);
for (int i = 0; i < tc; i++)
exec.execute(new Runnable() {
public void run() {
try {
test(port);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
private static void test(int port) throws Exception {
ExchangeChannel client = Exchangers.connect(URL.valueOf("dubbo://localhost:" + port));
MockResult result = (MockResult) client.request(new RpcMessage(DemoService.class.getName(), "plus", new Class<?>[]{int.class, int.class}, new Object[]{55, 25})).get();
System.out.println("55+25=" + result.getResult());
for (int i = 0; i < 100; i++)
client.request(new RpcMessage(DemoService.class.getName(), "sayHello", new Class<?>[]{String.class}, new Object[]{"qianlei" + i}));
for (int i = 0; i < 100; i++)
client.request(new Main.Data());
System.out.println("=====test invoke=====");
for (int i = 0; i < 100; i++) {
ResponseFuture future = client.request(new Main.Data());
System.out.println("invoke and get");
System.out.println("invoke result:" + future.get());
}
System.out.println("=====the end=====");
}
static class Data implements Serializable {
private static final long serialVersionUID = -4666580993978548778L;
private String mData = "";
public Data() {
}
public String getData() {
return mData;
}
public void setData(String data) {
mData = data;
}
}
static class StringMessage implements Serializable {
private static final long serialVersionUID = 7193122183120113947L;
private String mText;
StringMessage(String msg) {
mText = msg;
}
public String toString() {
return mText;
}
}
}