美文网首页
第一章 SOFAArk 类隔离技术使用姿势

第一章 SOFAArk 类隔离技术使用姿势

作者: 原水寒 | 来源:发表于2019-12-30 08:54 被阅读0次

SOFAArk 是一个轻量级的类隔离框架,由蚂蚁金服开源。GitHub 地址: https://github.com/sofastack/sofa-ark

本文使用 SOFAArk 实现一个基本的类隔离例子,工程结构如下:


image.png
  • my-ark-service:基本的服务,会打两个不同版本的包:1.0和2.0。
  • my-ark-plugin1:依赖 my-ark-service:1.0,打成一个 ark-plugin。
  • my-ark-plugin2:依赖 my-ark-service:2.0,打成一个 ark-plugin。
  • my-ark-biz:依赖 my-ark-plugin1 和 my-ark-plugin2,分别调用其两个 ark-plugin,由于使用了类隔离机制,可以使得 my-ark-service:1.0 和 my-ark-service:2.0 两个版本的包共存并且同时使用。

my-ark-service

v1 版本

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>io.study</groupId>
    <artifactId>my-ark-service</artifactId>
    <version>1.0</version>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
package io.study.service;
public class HelloService {
    public void sayHello(){
        System.out.println("hi, v1"); // v1版本
    }
}

v2 版本

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>io.study</groupId>
    <artifactId>my-ark-service</artifactId>
    <version>2.0</version>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
package io.study.service;
public class HelloService {
    public void sayHello(){
        System.out.println("hi, v2"); // v2版本
    }
}

my-ark-plugin1

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>io.study</groupId>
    <artifactId>my-ark-plugin1</artifactId>
    <version>1.0</version>

    <dependencies>
        <!-- 引入版本1.0依赖 -->
        <dependency>
            <groupId>io.study</groupId>
            <artifactId>my-ark-service</artifactId>
            <version>1.0</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>com.alipay.sofa</groupId>
                <artifactId>sofa-ark-plugin-maven-plugin</artifactId>
                <version>1.1.0</version>
                <executions>
                    <execution>
                        <id>default-cli</id>
                        <goals>
                            <goal>ark-plugin</goal>
                        </goals>
                        <configuration>
                            <classifier>ark-plugin</classifier>
                            <exported>
                                <classes>
                                    <class>io.study.plugin.ArkPlugin1Service</class>
                                </classes>
                            </exported>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>
package io.study.plugin;
import io.study.service.HelloService;
public class ArkPlugin1Service {
    public void test(){
        new HelloService().sayHello();
    }
}

my-ark-plugin2

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>io.study</groupId>
    <artifactId>my-ark-plugin2</artifactId>
    <version>1.0</version>

    <dependencies>
        <dependency>
            <groupId>io.study</groupId>
            <artifactId>my-ark-service</artifactId>
            <version>2.0</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>com.alipay.sofa</groupId>
                <artifactId>sofa-ark-plugin-maven-plugin</artifactId>
                <version>1.1.0</version>
                <executions>
                    <execution>
                        <id>default-cli</id>
                        <goals>
                            <goal>ark-plugin</goal>
                        </goals>
                        <configuration>
                            <classifier>ark-plugin</classifier>
                            <exported>
                                <classes>
                                    <class>io.study.plugin.ArkPlugin2Service</class>
                                </classes>
                            </exported>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>
package io.study.plugin;
import io.study.service.HelloService;
public class ArkPlugin2Service {
    public void test(){
        new HelloService().sayHello();
    }
}

my-ark-biz

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>io.study</groupId>
    <artifactId>my-ark-biz</artifactId>
    <version>1.0</version>

    <dependencies>
        <dependency>
            <groupId>com.alipay.sofa</groupId>
            <artifactId>sofa-ark-support-starter</artifactId>
            <version>1.1.0</version>
        </dependency>
        <dependency>
            <groupId>io.study</groupId>
            <artifactId>my-ark-plugin1</artifactId>
            <version>1.0</version>
            <!-- ark-plugin -->
            <classifier>ark-plugin</classifier>
        </dependency>
        <dependency>
            <groupId>io.study</groupId>
            <artifactId>my-ark-plugin2</artifactId>
            <version>1.0</version>
            <!-- ark-plugin -->
            <classifier>ark-plugin</classifier>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>com.alipay.sofa</groupId>
                <artifactId>sofa-ark-maven-plugin</artifactId>
                <version>1.1.0</version>
                <executions>
                    <execution>
                        <id>default-cli</id>
                        <!--goal executed to generate executable-ark-jar -->
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                        <configuration>
                            <!--specify destination where executable-ark-jar will be saved, default saved to ${project.build.directory}-->
                            <outputDirectory>./</outputDirectory>
                            <!--default none, 可执行fat jar-->
                            <arkClassifier>executable-ark</arkClassifier>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>
package io.study.biz;
import com.alipay.sofa.ark.support.startup.SofaArkBootstrap;
import io.study.plugin.ArkPlugin1Service;
import io.study.plugin.ArkPlugin2Service;
public class Main {
    public static void main(String[] args) {
        SofaArkBootstrap.launch(args);
        new ArkPlugin1Service().test(); // hi,v1
        new ArkPlugin2Service().test(); // hi,v2
    }
}

本文代码地址

参考

相关文章

  • SOFAArk 设计与实现

    第一章 SOFAArk 类隔离技术使用姿势第二章 - Google Guice 的基本使用与原理第三章 - SOF...

  • 第一章 SOFAArk 类隔离技术使用姿势

    SOFAArk 是一个轻量级的类隔离框架,由蚂蚁金服开源。GitHub 地址: https://github.c...

  • SOFAArk启动源码分析

    一、背景 首先来个SOFAArk官方介绍:SOFAArk 是一款基于 Java 实现的轻量级类隔离容器,由蚂蚁金服...

  • sofa-ark整理

    简介 SOFAArk 是一款基于 Java 实现的轻量级类隔离加载容器,主要是为应用程序提供类隔离和依赖包隔离的能...

  • docker网络模式

    Docker使用了Linux的Namespaces技术来进行资源隔离,如PID Namespace隔离进程,Mou...

  • 10 Docker 资源隔离

    技术实现 Docker 是使用 Linux 的 Namespace 技术实现各种资源隔离的。Namespace 是...

  • docker user namespace

    docker 容器是一种特殊的进程,namespace是一种隔离技术,docker就是使用隔离技术开启特定的nam...

  • Netty源码分析2 - ThreadLocal 源码解析

    一、使用姿势 二、数据结构 三、源码分析 四、回收机制 总结 一、使用姿势 最佳实践 在类中定义ThreadLoc...

  • 如何实现 Java 类隔离加载?

    一 什么是类隔离技术 只要你 Java 代码写

  • 类图的正确使用姿势

    在日常开发中,不管是原理梳理,还是功能设计,类图都是绕不开的一个环节.它能帮我们理清思路,清晰的说明类于模块间的关...

网友评论

      本文标题:第一章 SOFAArk 类隔离技术使用姿势

      本文链接:https://www.haomeiwen.com/subject/ootuoctx.html