`

Dubbo之Activate

阅读更多

Activate:可以被框架中自动激活加载扩展,此Annotation用于配置扩展被自动激活加载条件。

Activate,看起来有点不好理解,它的意思是条件激活,用户通过group和value配置激活条件。被activate注解的扩展点在满足某种条件时会被激活,它一般用来配合filter和Invokelistener,声明他们的使用场景。我们先来看看源码

 

 

首先你对的dubbo的 SPI机制有一定的了解和研究,

 

我们看看他的用法,来看一个测试例子的流程:

 

对应的配置文件:



接口

@SPI("order1")
public interface ActivateExt1 {
    String echo(String msg);
}

 

对应不同的实现类:

 

@Activate(group = {"default_group"})
public class ActivateExt1Impl1 implements ActivateExt1 {
    public String echo(String msg) {
        return msg;
    }
}

@Activate(group = {"group1", "group2"})
public class GroupActivateExtImpl implements ActivateExt1 {
    public String echo(String msg) {
        return msg;
    }
}

 

@Activate(order = 2, group = {"order"})
public class OrderActivateExtImpl1 implements ActivateExt1 {
    public String echo(String msg) {
        return msg;
    }
}

@Activate(order = 1, group = {"order"})
public class OrderActivateExtImpl2 implements ActivateExt1 {
    public String echo(String msg) {
        return msg;
    }
}

@Activate(value = {"value1"}, group = {"value"})
public class ValueActivateExtImpl implements ActivateExt1 {
    public String echo(String msg) {
        return msg;
    }
}

 

下面是测试案例

/**
     * 默认实现
     */
    @Test
    public void testDefault() {
        ExtensionLoader<ActivateExt1> loader = ExtensionLoader.getExtensionLoader(ActivateExt1.class);
        URL url = URL.valueOf("test://localhost/test");
       //他会去加载默认的实现 根据default_group 查找对应的实现方法
        List<ActivateExt1> list = loader.getActivateExtension(url, new String[]{}, "default_group");
        //activateext1impl1-----------@com.alibaba.dubbo.common.extension.Activate(after=[], before=[],        value=[], order=0, group=[default_group])
        //找到key了再用spi找到对应的实现类
        System.out.println(list.size()); // 1
        // com.alibaba.dubbo.common.extensionloader.activate.impl.ActivateExt1Impl1
        System.out.println(list.get(0).getClass());
    }

 

/**
     * group 实现的测试
     */
    @Test
    public void testGroup() {
        URL url = URL.valueOf("test://localhost/test");
        // group == group1  或者 group2
        List<ActivateExt1> list  =    ExtensionLoader.getExtensionLoader(ActivateExt1.class).getActivateExtension(url, new String[]{}, "group2");
        //group-----------@com.alibaba.dubbo.common.extension.Activate(after=[], before=[], value=[], order=0, group=[group1, group2])
        System.out.println(list.size());
        //com.alibaba.dubbo.common.extensionloader.activate.impl.GroupActivateExtImpl
        System.out.println(list.get(0).getClass());
    }

 

/**
     * 测试 testValue
     */
    @Test
    public void testValue() {
        URL url = URL.valueOf("test://localhost/test");
        //根据   key = value1,group =  value             
        //@Activate(value = {"value1"}, group = {"value"})来激活扩展
        url = url.addParameter("value1", "value");
        List<ActivateExt1> list  = ExtensionLoader.getExtensionLoader(ActivateExt1.class).getActivateExtension(url, new String[]{}, "value");
        //value-----------@com.alibaba.dubbo.common.extension.Activate(after=[], before=[], value=[value1], order=0, group=[value])
        System.out.println(list.size());
        //com.alibaba.dubbo.common.extensionloader.activate.impl.ValueActivateExtImpl
        System.out.println(list.get(0).getClass());
    }

 

/**
     * 测试 testOrder
     * 测试多group = order
     * 其中 int order() default 0;  排序字段
     */
    @Test
    public void testOrder() {
        URL url = URL.valueOf("test://localhost/test");
        List<ActivateExt1> list = ExtensionLoader.getExtensionLoader(ActivateExt1.class).getActivateExtension(url, new String[]{}, "order");
        //order1-----------@com.alibaba.dubbo.common.extension.Activate(after=[], before=[], value=[], order=2, group=[order])
        //order2-----------@com.alibaba.dubbo.common.extension.Activate(after=[], before=[], value=[], order=1, group=[order])
        System.out.println(list.size());
        //com.alibaba.dubbo.common.extensionloader.activate.impl.OrderActivateExtImpl2  因为order = 1,先输出
        System.out.println(list.get(0).getClass());
        //com.alibaba.dubbo.common.extensionloader.activate.impl.OrderActivateExtImpl1 order = 2
        System.out.println(list.get(1).getClass());
    }

 

 

 

 

 

 

 

 

 

 

 

 

  • 大小: 48.3 KB
  • 大小: 30.9 KB
  • 大小: 69.2 KB
  • 大小: 55.5 KB
0
0
分享到:
评论

相关推荐

    Dubbo之《尚硅谷》学习笔记.md

    Dubbo之《尚硅谷》学习笔记

    dubbo资源 dubbo-admin dubbo demo

    Dubbo是一个高性能、轻量级的开源Java RPC框架,它提供了丰富的服务治理功能,是阿里巴巴开源的重要组件之一。在这个资源包中,我们关注的焦点是Dubbo-admin,它是Dubbo服务治理的核心工具,以及一个基础的Dubbo示例...

    dubbo示例代码dubbo-sample

    【Dubbo 示例代码详解】 Dubbo 是阿里巴巴开源的一款高性能、轻量级的Java服务治理框架,它主要提供了RPC(远程过程调用)服务,并且包含了服务注册与发现、负载均衡、容错处理、监控等全面的服务治理功能。本示例...

    dubbo-dubbo-2.7.3.rar

    dubbo源码dubbo-dubbo-2.7.3.rardubbo源码dubbo-dubbo-2.7.3.rardubbo源码dubbo-dubbo-2.7.3.rardubbo源码dubbo-dubbo-2.7.3.rardubbo源码dubbo-dubbo-2.7.3.rardubbo源码dubbo-dubbo-2.7.3.rardubbo源码dubbo-dubbo...

    incubator-dubbo-dubbo-2.6.1

    【标题】"incubator-dubbo-dubbo-2.6.1" 是一个Apache Incubator项目Dubbo的特定版本,这里的2.6.1表示该版本是Dubbo的稳定分支之一。 【描述】提到的"incubator-dubbo-dubbo-2.6.1"表明这是Apache孵化器中的Dubbo...

    dubbodubbo.zip

    《Dubbo技术详解与实战应用》 Dubbo是一款由阿里巴巴开源的高性能、轻量级的服务治理框架,它致力于提供一个简单、高效的分布式服务解决方案。在Java世界里,Dubbo已经成为了微服务架构的重要组成部分,其核心特性...

    dubbo admin jdk1.8

    【标题】"dubbo admin jdk1.8" 指的是使用Java开发工具包(JDK)1.8版本运行的Dubbo管理控制台。Dubbo是阿里巴巴开源的一个高性能、轻量级的服务治理框架,它提供了服务注册、服务发现、调用监控等功能。在JDK1.8...

    dubbo视频教程|基于Dubbo的分布式系统架构实战

    Dubbo是阿里巴巴开源的分布式服务化治理框架(微服务框架),久经阿里巴巴电商平台的大规模复杂业务的高并发考验,到目前为止Dubbo仍然是开源界中体系最完善的服务化治理框架,因此Dubbo被国内大量的的互联网公司和...

    Dubbo入门之HelloWorld

    在IT行业中,分布式服务框架是构建大型互联网应用的关键技术之一,Dubbo作为阿里巴巴开源的一款高性能、轻量级的Java RPC框架,受到了广泛的关注和使用。本文将基于"Dubbo入门之HelloWorld"的主题,深入探讨如何从零...

    Dubbo源码分析之SPI

    总的来说,Dubbo的SPI机制是其强大功能背后的关键技术之一,它不仅提供了类似Java SPI的服务发现能力,还通过一系列的增强,使得服务的扩展和管理变得更加高效和便捷。在深入研究`dubbo-spi`和`java-spi`这两个...

    Dubbo监控系统配置

    ### Dubbo监控系统配置详解 #### 一、Dubbo监控系统概述 Dubbo是一款高性能、轻量级的开源服务框架,旨在提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。Dubbo提供了包括服务自动注册与发现、...

    尚硅谷最新dubbo视频

    本套视频从分布式系统的基本概念出发,由浅入深,讲解了RPC原理,Dubbo基本使用,Dubbo高可用场景以及Dubbo原理,涉及了分布式系统中服务注册、服务发现、负载均衡、灰度发布、集群容错、服务降级等核心概念的讲解及...

    dubbo-admin包

    【标题】"dubbo-admin包"是Dubbo框架的一个重要组成部分,主要用作服务治理的管理界面。这个压缩包包含了运行Dubbo管理控制台所需的所有文件,使得开发者和运维人员可以方便地监控、管理和配置Dubbo服务。 【描述】...

    dubbo xsd的支持

    在IT行业中,Dubbo是一个非常知名的Java开源框架,主要用于实现分布式服务治理。它由阿里巴巴开发并维护,旨在提供高性能、轻量级的服务间调用方案。"dubbo.xsd"文件是Dubbo框架中用于XML配置文件解析的重要组成部分...

    Dubbo入门之hello world(简单测试版和使用注解加强版)

    用maven构建项目使用spring和multicast广播注册中心方式实现Dubbo入门之hello world(用maven构建项目使用spring和multicast广播注册中心方式实现Dubbo入门之hello world(简单测试版)文档说明以及源码

    dubbo监控dubbo-monitor

    【标题】:Dubbo监控——Dubbo-Monitor详解 【描述】:Dubbo-Monitor是Dubbo框架中的一个重要组成部分,它提供了对服务治理的实时监控功能。作为一个强大的微服务治理工具,Dubbo-Monitor能够帮助开发者和运维人员...

    dubbo接口测试调试工具

    前段时间排查某问题的时候,想要快速知道某些dubbo接口(三无)的响应结果,但不想启动项目(因为这些项目不是你负责的,不会部署而且超级笨重),也不想新建一个dubbo客户端项目(占地方),也不想开telnet客户端...

    dubbo、dubbo-admin

    Dubbo是阿里巴巴开源的一款高性能、轻量级的Java服务治理框架,它主要专注于服务治理,包括服务注册、服务发现、服务调用、服务监控等多个方面。Dubbo-admin是Dubbo框架的一部分,它是一个可视化的服务管理工具,...

    dubbo-demo-consumer、dubbo-demo-provider、dubbo-simple-monitor

    《Dubbo实战:消费者、提供者与简单监控》 Dubbo是阿里巴巴开源的一款高性能、轻量级的服务治理框架,广泛应用于分布式系统中的服务调用。本篇将详细讲解基于dubbo-demo-consumer、dubbo-demo-provider和dubbo-...

Global site tag (gtag.js) - Google Analytics