Search in sources :

Example 6 with ExchangeHandlerAdapter

use of org.apache.dubbo.remoting.exchange.support.ExchangeHandlerAdapter in project dubbo by alibaba.

the class DubboTelnetDecodeTest method testDubboDecode.

/**
 * just dubbo request
 *
 * @throws InterruptedException
 */
@Test
public void testDubboDecode() throws InterruptedException, IOException {
    ByteBuf dubboByteBuf = createDubboByteBuf();
    EmbeddedChannel ch = null;
    try {
        Codec2 codec = ExtensionLoader.getExtensionLoader(Codec2.class).getExtension("dubbo");
        URL url = new URL("dubbo", "localhost", 22226);
        NettyCodecAdapter adapter = new NettyCodecAdapter(codec, url, new MockChannelHandler());
        MockHandler mockHandler = new MockHandler(null, new MultiMessageHandler(new DecodeHandler(new HeaderExchangeHandler(new ExchangeHandlerAdapter() {

            @Override
            public CompletableFuture<Object> reply(ExchangeChannel channel, Object msg) {
                if (checkDubboDecoded(msg)) {
                    dubbo.incrementAndGet();
                }
                return getDefaultFuture();
            }
        }))));
        ch = new LocalEmbeddedChannel();
        ch.pipeline().addLast("decoder", adapter.getDecoder()).addLast("handler", mockHandler);
        ch.writeInbound(dubboByteBuf);
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (ch != null) {
            ch.close().await(200, TimeUnit.MILLISECONDS);
        }
    }
    TimeUnit.MILLISECONDS.sleep(100);
    Assertions.assertEquals(1, dubbo.get());
}
Also used : ExchangeHandlerAdapter(org.apache.dubbo.remoting.exchange.support.ExchangeHandlerAdapter) NettyCodecAdapter(org.apache.dubbo.remoting.transport.netty4.NettyCodecAdapter) Codec2(org.apache.dubbo.remoting.Codec2) MultiMessageHandler(org.apache.dubbo.remoting.transport.MultiMessageHandler) EmbeddedChannel(io.netty.channel.embedded.EmbeddedChannel) ExchangeChannel(org.apache.dubbo.remoting.exchange.ExchangeChannel) ByteBuf(io.netty.buffer.ByteBuf) URL(org.apache.dubbo.common.URL) IOException(java.io.IOException) HeaderExchangeHandler(org.apache.dubbo.remoting.exchange.support.header.HeaderExchangeHandler) DecodeHandler(org.apache.dubbo.remoting.transport.DecodeHandler) Test(org.junit.jupiter.api.Test)

Example 7 with ExchangeHandlerAdapter

use of org.apache.dubbo.remoting.exchange.support.ExchangeHandlerAdapter in project dubbo by alibaba.

the class DubboTelnetDecodeTest method testDubboTelnetDecoded.

/**
 * dubbo and telnet request
 *
 * <p>
 * First ByteBuf:
 * ++-------------------------------------------------+
 * ||               dubbo(incomplete)                 |
 * ++-------------------------------------------------+
 * ||
 * Magic Code
 *
 * <p>
 * Second ByteBuf:
 * +--------------------------------------------------+
 * |  dubbo(the remaining)  |     telnet(complete)    |
 * +--------------------------------------------------+
 *
 * @throws InterruptedException
 */
@Test
public void testDubboTelnetDecoded() throws InterruptedException, IOException {
    ByteBuf dubboByteBuf = createDubboByteBuf();
    ByteBuf firstDubboByteBuf = dubboByteBuf.copy(0, 50);
    ByteBuf secondLeftDubboByteBuf = dubboByteBuf.copy(50, dubboByteBuf.readableBytes());
    ByteBuf telnetByteBuf = Unpooled.wrappedBuffer("\r\n".getBytes());
    ByteBuf secondByteBuf = Unpooled.wrappedBuffer(secondLeftDubboByteBuf, telnetByteBuf);
    EmbeddedChannel ch = null;
    try {
        Codec2 codec = ExtensionLoader.getExtensionLoader(Codec2.class).getExtension("dubbo");
        URL url = new URL("dubbo", "localhost", 22226);
        NettyCodecAdapter adapter = new NettyCodecAdapter(codec, url, new MockChannelHandler());
        MockHandler mockHandler = new MockHandler((msg) -> {
            if (checkTelnetDecoded(msg)) {
                dubboTelnet.incrementAndGet();
            }
        }, new MultiMessageHandler(new DecodeHandler(new HeaderExchangeHandler(new ExchangeHandlerAdapter() {

            @Override
            public CompletableFuture<Object> reply(ExchangeChannel channel, Object msg) {
                if (checkDubboDecoded(msg)) {
                    dubboTelnet.incrementAndGet();
                }
                return getDefaultFuture();
            }
        }))));
        ch = new LocalEmbeddedChannel();
        ch.pipeline().addLast("decoder", adapter.getDecoder()).addLast("handler", mockHandler);
        ch.writeInbound(firstDubboByteBuf);
        ch.writeInbound(secondByteBuf);
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (ch != null) {
            ch.close().await(200, TimeUnit.MILLISECONDS);
        }
    }
    TimeUnit.MILLISECONDS.sleep(100);
    Assertions.assertEquals(2, dubboTelnet.get());
}
Also used : ExchangeHandlerAdapter(org.apache.dubbo.remoting.exchange.support.ExchangeHandlerAdapter) NettyCodecAdapter(org.apache.dubbo.remoting.transport.netty4.NettyCodecAdapter) Codec2(org.apache.dubbo.remoting.Codec2) MultiMessageHandler(org.apache.dubbo.remoting.transport.MultiMessageHandler) EmbeddedChannel(io.netty.channel.embedded.EmbeddedChannel) ExchangeChannel(org.apache.dubbo.remoting.exchange.ExchangeChannel) ByteBuf(io.netty.buffer.ByteBuf) URL(org.apache.dubbo.common.URL) IOException(java.io.IOException) HeaderExchangeHandler(org.apache.dubbo.remoting.exchange.support.header.HeaderExchangeHandler) DecodeHandler(org.apache.dubbo.remoting.transport.DecodeHandler) Test(org.junit.jupiter.api.Test)

Example 8 with ExchangeHandlerAdapter

use of org.apache.dubbo.remoting.exchange.support.ExchangeHandlerAdapter in project dubbo by alibaba.

the class PerformanceServerTest method statTelnetServer.

private static ExchangeServer statTelnetServer(int port) throws Exception {
    // Start server
    ExchangeServer telnetserver = Exchangers.bind("exchange://0.0.0.0:" + port, new ExchangeHandlerAdapter() {

        public String telnet(Channel channel, String message) throws RemotingException {
            if (message.equals("help")) {
                return "support cmd: \r\n\tstart \r\n\tstop \r\n\tshutdown \r\n\trestart times [alive] [sleep] \r\ntelnet>";
            } else if (message.equals("stop")) {
                logger.info("server closed:" + server);
                server.close();
                return "stop server\r\ntelnet>";
            } else if (message.startsWith("start")) {
                try {
                    restartServer(0, 0, 0);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return "start server\r\ntelnet>";
            } else if (message.startsWith("shutdown")) {
                System.exit(0);
                return "start server\r\ntelnet>";
            } else if (message.startsWith("channels")) {
                return "server.getExchangeChannels():" + server.getExchangeChannels().size() + "\r\ntelnet>";
            } else if (message.startsWith("restart ")) {
                // r times [sleep] r 10 or r 10 100
                String[] args = message.split(" ");
                int times = Integer.parseInt(args[1]);
                int alive = args.length > 2 ? Integer.parseInt(args[2]) : 0;
                int sleep = args.length > 3 ? Integer.parseInt(args[3]) : 100;
                try {
                    restartServer(times, alive, sleep);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return "restart server,times:" + times + " stop alive time: " + alive + ",sleep time: " + sleep + " usage:r times [alive] [sleep] \r\ntelnet>";
            } else {
                return "echo: " + message + "\r\ntelnet> ";
            }
        }
    });
    return telnetserver;
}
Also used : ExchangeHandlerAdapter(org.apache.dubbo.remoting.exchange.support.ExchangeHandlerAdapter) ExchangeChannel(org.apache.dubbo.remoting.exchange.ExchangeChannel) ExchangeServer(org.apache.dubbo.remoting.exchange.ExchangeServer)

Example 9 with ExchangeHandlerAdapter

use of org.apache.dubbo.remoting.exchange.support.ExchangeHandlerAdapter in project dubbo by alibaba.

the class MulticastExchangeNetworkerTest method testJoin.

@Test
public void testJoin() throws RemotingException, InterruptedException {
    final String groupURL = "multicast://224.5.6.7:1234";
    MulticastExchangeNetworker multicastExchangeNetworker = new MulticastExchangeNetworker();
    final CountDownLatch countDownLatch = new CountDownLatch(1);
    Peer peer1 = multicastExchangeNetworker.lookup(URL.valueOf(groupURL)).join(URL.valueOf("exchange://0.0.0.0:" + NetUtils.getAvailablePort() + "?exchanger=header"), new ExchangeHandlerAdapter() {

        @Override
        public CompletableFuture<Object> reply(ExchangeChannel channel, Object msg) throws RemotingException {
            countDownLatch.countDown();
            return super.reply(channel, msg);
        }
    });
    Peer peer2 = multicastExchangeNetworker.lookup(URL.valueOf(groupURL)).join(URL.valueOf("exchange://0.0.0.0:" + NetUtils.getAvailablePort() + "?exchanger=header"), mock(ExchangeHandler.class));
    while (true) {
        for (Channel channel : peer1.getChannels()) {
            channel.send("hello multicast exchange network!");
        }
        TimeUnit.MILLISECONDS.sleep(50);
        long count = countDownLatch.getCount();
        if (count > 0) {
            break;
        }
    }
    Group lookup = Networkers.lookup(groupURL);
    assertThat(lookup, not(nullValue()));
    assertThat(peer1, instanceOf(ExchangeServerPeer.class));
    peer1.close();
    peer2.close();
}
Also used : ExchangeHandlerAdapter(org.apache.dubbo.remoting.exchange.support.ExchangeHandlerAdapter) Group(org.apache.dubbo.remoting.p2p.Group) Peer(org.apache.dubbo.remoting.p2p.Peer) ExchangeChannel(org.apache.dubbo.remoting.exchange.ExchangeChannel) Channel(org.apache.dubbo.remoting.Channel) ExchangeChannel(org.apache.dubbo.remoting.exchange.ExchangeChannel) CountDownLatch(java.util.concurrent.CountDownLatch) ExchangeHandler(org.apache.dubbo.remoting.exchange.ExchangeHandler) CompletableFuture(java.util.concurrent.CompletableFuture) RemotingException(org.apache.dubbo.remoting.RemotingException) Test(org.junit.jupiter.api.Test)

Aggregations

ExchangeChannel (org.apache.dubbo.remoting.exchange.ExchangeChannel)9 ExchangeHandlerAdapter (org.apache.dubbo.remoting.exchange.support.ExchangeHandlerAdapter)9 Test (org.junit.jupiter.api.Test)7 ByteBuf (io.netty.buffer.ByteBuf)6 EmbeddedChannel (io.netty.channel.embedded.EmbeddedChannel)6 IOException (java.io.IOException)6 URL (org.apache.dubbo.common.URL)6 Codec2 (org.apache.dubbo.remoting.Codec2)6 HeaderExchangeHandler (org.apache.dubbo.remoting.exchange.support.header.HeaderExchangeHandler)6 DecodeHandler (org.apache.dubbo.remoting.transport.DecodeHandler)6 MultiMessageHandler (org.apache.dubbo.remoting.transport.MultiMessageHandler)6 NettyCodecAdapter (org.apache.dubbo.remoting.transport.netty4.NettyCodecAdapter)6 CompletableFuture (java.util.concurrent.CompletableFuture)2 ExchangeServer (org.apache.dubbo.remoting.exchange.ExchangeServer)2 ArrayList (java.util.ArrayList)1 List (java.util.List)1 CountDownLatch (java.util.concurrent.CountDownLatch)1 Channel (org.apache.dubbo.remoting.Channel)1 RemotingException (org.apache.dubbo.remoting.RemotingException)1 ExchangeHandler (org.apache.dubbo.remoting.exchange.ExchangeHandler)1