Search in sources :

Example 26 with Protocol

use of org.apache.dubbo.rpc.Protocol in project dubbo by alibaba.

the class DubboMonitorTest method testMonitorFactory.

@Test
public void testMonitorFactory() throws Exception {
    MockMonitorService monitorService = new MockMonitorService();
    URL statistics = new URLBuilder(DUBBO_PROTOCOL, "10.20.153.10", 0).addParameter(MonitorService.APPLICATION, "morgan").addParameter(MonitorService.INTERFACE, "MemberService").addParameter(MonitorService.METHOD, "findPerson").addParameter(MonitorService.CONSUMER, "10.20.153.11").addParameter(MonitorService.SUCCESS, 1).addParameter(MonitorService.FAILURE, 0).addParameter(MonitorService.ELAPSED, 3).addParameter(MonitorService.MAX_ELAPSED, 3).addParameter(MonitorService.CONCURRENT, 1).addParameter(MonitorService.MAX_CONCURRENT, 1).build();
    Protocol protocol = ExtensionLoader.getExtensionLoader(Protocol.class).getAdaptiveExtension();
    ProxyFactory proxyFactory = ExtensionLoader.getExtensionLoader(ProxyFactory.class).getAdaptiveExtension();
    MonitorFactory monitorFactory = ExtensionLoader.getExtensionLoader(MonitorFactory.class).getAdaptiveExtension();
    Exporter<MonitorService> exporter = protocol.export(proxyFactory.getInvoker(monitorService, MonitorService.class, URL.valueOf("dubbo://127.0.0.1:17979/" + MonitorService.class.getName())));
    try {
        Monitor monitor = null;
        long start = System.currentTimeMillis();
        while (System.currentTimeMillis() - start < 60000) {
            monitor = monitorFactory.getMonitor(URL.valueOf("dubbo://127.0.0.1:17979?interval=10"));
            if (monitor == null) {
                continue;
            }
            try {
                monitor.collect(statistics);
                int i = 0;
                while (monitorService.getStatistics() == null && i < 200) {
                    i++;
                    Thread.sleep(10);
                }
                URL result = monitorService.getStatistics();
                Assertions.assertEquals(1, result.getParameter(MonitorService.SUCCESS, 0));
                Assertions.assertEquals(3, result.getParameter(MonitorService.ELAPSED, 0));
            } finally {
                monitor.destroy();
            }
            break;
        }
        Assertions.assertNotNull(monitor);
    } finally {
        exporter.unexport();
    }
}
Also used : Monitor(org.apache.dubbo.monitor.Monitor) MonitorFactory(org.apache.dubbo.monitor.MonitorFactory) ProxyFactory(org.apache.dubbo.rpc.ProxyFactory) MonitorService(org.apache.dubbo.monitor.MonitorService) Protocol(org.apache.dubbo.rpc.Protocol) URL(org.apache.dubbo.common.URL) URLBuilder(org.apache.dubbo.common.URLBuilder) Test(org.junit.jupiter.api.Test)

Example 27 with Protocol

use of org.apache.dubbo.rpc.Protocol in project dubbo by alibaba.

the class MetricsFilterTest method testInvokeMetricsService.

public void testInvokeMetricsService() {
    IMetricManager metricManager = MetricManager.getIMetricManager();
    metricManager.clear();
    MetricsFilter metricsFilter = new MetricsFilter();
    Invocation invocation = new RpcInvocation("sayName", DemoService.class.getName(), "", new Class<?>[0], new Object[0]);
    RpcContext.getContext().setRemoteAddress(host, url.getPort()).setLocalAddress(host, NetUtils.getAvailablePort());
    RpcContext.getContext().setUrl(serviceInvoker.getUrl().addParameter(SIDE_KEY, PROVIDER_SIDE).addParameter(TIMEOUT_KEY, 300));
    AppResponse response = AppResponseBuilder.create().build();
    onInvokeReturns(response);
    for (int i = 0; i < 50; i++) {
        try {
            metricsFilter.invoke(serviceInvoker, invocation);
            metricsFilter.invoke(timeoutInvoker, invocation);
        } catch (RpcException e) {
        // ignore
        }
    }
    Protocol protocol = DubboProtocol.getDubboProtocol();
    URL metricUrl = URL.valueOf("dubbo://" + url.getHost() + ":" + url.getPort() + "/" + MetricsService.class.getName() + "?" + METRICS_PORT + "=" + port);
    Invoker<MetricsService> invoker = protocol.refer(MetricsService.class, metricUrl);
    invocation = new RpcInvocation("getMetricsByGroup", DemoService.class.getName(), "", new Class<?>[] { String.class }, new Object[] { DUBBO_GROUP });
    try {
        Thread.sleep(5000);
    } catch (Exception e) {
    // ignore
    }
    String resStr = invoker.invoke(invocation).getValue().toString();
    List<MetricObject> metricObjectList = new Gson().fromJson(resStr, new TypeToken<List<MetricObject>>() {
    }.getType());
    Map<String, Object> metricMap = new HashMap<>();
    for (int i = 0; i < metricObjectList.size(); i++) {
        MetricObject object = metricObjectList.get(i);
        String metric = object.getMetric().substring(object.getMetric().lastIndexOf(".") + 1);
        if ((double) object.getValue() > 0.0 && object.getMetricLevel().equals(MetricLevel.MAJOR))
            metricMap.put(metric, object.getValue());
    }
    Assertions.assertEquals(50.0, metricMap.get("success_bucket_count"));
    Assertions.assertEquals(50.0, metricMap.get("timeoutError_bucket_count"));
    Assertions.assertEquals(100.0, metricMap.get("bucket_count"));
    Assertions.assertEquals(100.0 / 5, metricMap.get("qps"));
    Assertions.assertEquals(50.0 / 100.0, metricMap.get("success_rate"));
    invoker.destroy();
}
Also used : RpcInvocation(org.apache.dubbo.rpc.RpcInvocation) Invocation(org.apache.dubbo.rpc.Invocation) RpcInvocation(org.apache.dubbo.rpc.RpcInvocation) MetricsService(org.apache.dubbo.monitor.MetricsService) HashMap(java.util.HashMap) DemoService(org.apache.dubbo.monitor.dubbo.service.DemoService) Gson(com.google.gson.Gson) IMetricManager(com.alibaba.metrics.IMetricManager) URL(org.apache.dubbo.common.URL) RpcException(org.apache.dubbo.rpc.RpcException) AppResponse(org.apache.dubbo.rpc.AppResponse) TypeToken(com.google.gson.reflect.TypeToken) RpcException(org.apache.dubbo.rpc.RpcException) MetricObject(com.alibaba.metrics.common.MetricObject) Protocol(org.apache.dubbo.rpc.Protocol) DubboProtocol(org.apache.dubbo.rpc.protocol.dubbo.DubboProtocol) MetricObject(com.alibaba.metrics.common.MetricObject)

Example 28 with Protocol

use of org.apache.dubbo.rpc.Protocol in project dubbo by alibaba.

the class MetricsFilter method invoke.

@Override
public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
    if (exported.compareAndSet(false, true)) {
        this.protocolName = invoker.getUrl().getParameter(METRICS_PROTOCOL) == null ? DEFAULT_PROTOCOL : invoker.getUrl().getParameter(METRICS_PROTOCOL);
        Protocol protocol = ExtensionLoader.getExtensionLoader(Protocol.class).getExtension(protocolName);
        this.port = invoker.getUrl().getParameter(METRICS_PORT) == null ? protocol.getDefaultPort() : Integer.parseInt(invoker.getUrl().getParameter(METRICS_PORT));
        Invoker<MetricsService> metricsInvoker = initMetricsInvoker();
        try {
            protocol.export(metricsInvoker);
        } catch (RuntimeException e) {
            logger.error("Metrics Service need to be configured" + " when multiple processes are running on a host" + e.getMessage());
        }
    }
    RpcContext context = RpcContext.getContext();
    boolean isProvider = context.isProviderSide();
    long start = System.currentTimeMillis();
    try {
        // proceed invocation chain
        Result result = invoker.invoke(invocation);
        long duration = System.currentTimeMillis() - start;
        reportMetrics(invoker, invocation, duration, "success", isProvider);
        return result;
    } catch (RpcException e) {
        long duration = System.currentTimeMillis() - start;
        String result = "error";
        if (e.isTimeout()) {
            result = "timeoutError";
        }
        if (e.isBiz()) {
            result = "bisError";
        }
        if (e.isNetwork()) {
            result = "networkError";
        }
        if (e.isSerialization()) {
            result = "serializationError";
        }
        reportMetrics(invoker, invocation, duration, result, isProvider);
        throw e;
    }
}
Also used : RpcContext(org.apache.dubbo.rpc.RpcContext) MetricsService(org.apache.dubbo.monitor.MetricsService) RpcException(org.apache.dubbo.rpc.RpcException) Protocol(org.apache.dubbo.rpc.Protocol) AsyncRpcResult(org.apache.dubbo.rpc.AsyncRpcResult) Result(org.apache.dubbo.rpc.Result)

Example 29 with Protocol

use of org.apache.dubbo.rpc.Protocol in project dubbo by alibaba.

the class SpringExtensionFactoryTest method testGetExtensionBySPI.

@Test
public void testGetExtensionBySPI() {
    Protocol protocol = springExtensionFactory.getExtension(Protocol.class, "protocol");
    Assertions.assertNull(protocol);
}
Also used : Protocol(org.apache.dubbo.rpc.Protocol) Test(org.junit.jupiter.api.Test)

Example 30 with Protocol

use of org.apache.dubbo.rpc.Protocol in project dubbo by alibaba.

the class RegistryProtocolTest method testExport.

@Test
public void testExport() {
    RegistryProtocol registryProtocol = getRegistryProtocol();
    // registryProtocol.setCluster(new FailfastCluster());
    registryProtocol.setRegistryFactory(ExtensionLoader.getExtensionLoader(RegistryFactory.class).getAdaptiveExtension());
    ServiceDescriptor descriptor = ApplicationModel.getServiceRepository().registerService(DemoService.class);
    ApplicationModel.getServiceRepository().registerProvider(service, new DemoServiceImpl(), descriptor, null, null);
    Protocol dubboProtocol = DubboProtocol.getDubboProtocol();
    registryProtocol.setProtocol(dubboProtocol);
    URL newRegistryUrl = registryUrl.addParameter(EXPORT_KEY, serviceUrl);
    DubboInvoker<DemoService> invoker = new DubboInvoker<DemoService>(DemoService.class, newRegistryUrl, new ExchangeClient[] { new MockedClient("10.20.20.20", 2222, true) });
    Exporter<DemoService> exporter = registryProtocol.export(invoker);
    Exporter<DemoService> exporter2 = registryProtocol.export(invoker);
    // The same invoker, exporter that multiple exported are different
    Assertions.assertNotSame(exporter, exporter2);
    exporter.unexport();
    exporter2.unexport();
}
Also used : ServiceDescriptor(org.apache.dubbo.rpc.model.ServiceDescriptor) RegistryProtocol(org.apache.dubbo.registry.integration.RegistryProtocol) DubboInvoker(org.apache.dubbo.rpc.protocol.dubbo.DubboInvoker) RegistryProtocol(org.apache.dubbo.registry.integration.RegistryProtocol) Protocol(org.apache.dubbo.rpc.Protocol) DubboProtocol(org.apache.dubbo.rpc.protocol.dubbo.DubboProtocol) URL(org.apache.dubbo.common.URL) Test(org.junit.jupiter.api.Test)

Aggregations

Protocol (org.apache.dubbo.rpc.Protocol)37 Test (org.junit.jupiter.api.Test)33 URL (org.apache.dubbo.common.URL)32 ProxyFactory (org.apache.dubbo.rpc.ProxyFactory)25 GenericService (org.apache.dubbo.rpc.service.GenericService)10 RpcInvocation (org.apache.dubbo.rpc.RpcInvocation)6 DemoService (org.apache.dubbo.service.DemoService)6 DemoServiceImpl (org.apache.dubbo.service.DemoServiceImpl)6 Result (org.apache.dubbo.rpc.Result)5 DubboProtocol (org.apache.dubbo.rpc.protocol.dubbo.DubboProtocol)5 ComplexObject (org.apache.dubbo.service.ComplexObject)5 RpcException (org.apache.dubbo.rpc.RpcException)4 MockProtocol (org.apache.dubbo.rpc.support.MockProtocol)4 HashMap (java.util.HashMap)3 MetricsService (org.apache.dubbo.monitor.MetricsService)3 RegistryProtocol (org.apache.dubbo.registry.integration.RegistryProtocol)3 IMetricManager (com.alibaba.metrics.IMetricManager)2 MetricObject (com.alibaba.metrics.common.MetricObject)2 Gson (com.google.gson.Gson)2 TypeToken (com.google.gson.reflect.TypeToken)2