Практика | Модульная разработка на базе SOFABoot

Spring Boot Java JVM Spring

Промежуточное ПО SOFA – это распределенное промежуточное ПО финансового уровня, независимо разработанное Ant Financial. Оно включает в себя различные компоненты, необходимые для построения облачной архитектуры финансового уровня, включая среду исследований и разработок микросервисов, структуру RPC, реестр служб, распределенные задачи синхронизации, ограниченную потоковую передачу/слияние. Framework, динамическая отправка конфигурации, распределенное отслеживание ссылок, метрики мониторинга показателей, распределенная очередь сообщений высокой доступности, распределенная структура транзакций, уровень прокси-сервера распределенной базы данных и другие компоненты — лучшие практики, ограниченные в финансовых сценариях.


SOFABoot — это среда разработки на основе Spring Boot, исходный код которой открыт группой Ant Financial Middleware. Начиная с версии 2.4.0 SOFABoot поддерживает возможности модульной разработки на основе изоляции контекста Spring. Модуль SOFABoot включает не только код Java, но и конфигурацию Spring. files. , каждый модуль SOFABoot представляет собой отдельный контекст Spring.


Адрес SOFABoot на Github:

https://github.com/alipay/sofa-boot


задний план

Чтобы лучше понять концепцию модульной разработки SOFABoot, выделим несколько распространенных модульных форм:

  • Модульность, основанная на организации кода: Это наиболее распространенная форма. В период разработки коды различных функций помещаются в разные проекты Java, а в период компиляции они вводятся в разные пакеты jar. Во время выполнения все классы Java находятся в пути к классам и используют один и тот же контекст Spring без какой-либо изоляции;

  • Модульность на основе изоляции контекста Spring: используйте контекст Spring для изоляции различных функциональных модулей.Во время разработки и компиляции код и конфигурация также делятся на разные проекты Java, но во время выполнения разные компоненты Spring невидимы друг для друга. IoC происходит только внутри тот же контекст, но все классы Java все еще находятся под ClassLoader;

  • Модульность на основе изоляции ClassLoader: заимствование ClassLoader для изоляции, каждый модуль имеет независимый ClassLoader, а пути к классам между модулями разные SOFAArk — это модульная практика.

Степень изоляции трех вышеуказанных модульных форм является прогрессивной, но модульность подобна обоюдоострому мечу, который уменьшает связь между модулями и увеличивает стоимость взаимодействия между модулями.В этой статье представлена ​​вторая форма модульности — модуляризация, основанная на изоляции контекста Spring.

По сравнению с модуляцией на основе кодовой организации, каждый модуль SABOBOOTE не только включает в себя код Java, но и пружинный профиль, который значительно снижает затраты на доступ к пользователю, и пользователи нужно только ввести банку. Пакет может быть только для освежения. Контекст модуля с помощью Solfaboot Framework без необходимости добавлять какие-либо определения бобов в исходном пружинном профиле, чтобы упростить процесс доступа и уменьшить шансы ошибок.

Контекст Spring для каждого модуля SOFABoot изолирован. При разработке Spring обеспечение того, чтобы Spring BeanId не конфликтовал, является основой работы Spring.Это ограничение легко устранить, когда масштаб приложения небольшой, если пользователь уделяет немного внимания при определении BeanId.

Однако по мере того, как масштаб системы становится все больше и больше, в разработке системы часто участвует несколько команд, и стоимость обеспечения того, чтобы BeanId каждого бизнес-определения не повторялся, также увеличивается. В SOFABoot каждый модуль SOFABoot использует независимый контекст Spring, что позволяет избежать конфликтов BeanId между различными модулями SOFABoot и эффективно снижает затраты на связь между командами во время многомодульной разработки на уровне предприятия.

Фундаментальный

Прежде чем представить модульную разработку и использование SOFABoot, давайте кратко разберемся в принципе его реализации. На следующем рисунке показано логическое представление среды выполнения приложения:

Модуль SOFABoot — это наименьшая единица модульной разработки.Каждый модуль SOFABoot представляет собой независимый контекст Spring.В модуле SOFABoot мы можем определять bean-компоненты, публиковать службы RPC, подключаться к базам данных и т. д.

Из-за изоляции контекста Beans между модулями не может передавать внедрение зависимостей @Autowired.Мы предоставляем метод JVM Service/Reference для связи между модулями.

Sofaboot предоставляет две формы публикации услуг и ссылки на решение проблемы вызова между модулями на разных уровнях:

  • Выпуск службы JVM и справочник: решение проблемы вызова между различными модулями SOFABoot в приложении SOFABoot

  • Публикация и справочник службы RPC: решение проблемы удаленных вызовов между несколькими приложениями SOFABoot.

Приложение Spring Boot создаст контекст Spring при вызове SpringApplication.run, мы называем его корневым контекстом приложения, который является родителем контекста Spring, созданного каждым модулем SOFABoot. Целью этого проекта является обеспечение того, чтобы Spring Context каждого модуля SOFABoot мог обнаруживать bean-компоненты, созданные в корневом контексте приложения, чтобы, когда приложение добавляет Starter, не только корневой контекст приложения мог использовать вновь добавленные Bean-компоненты в корневом контексте приложения. Starter, а также каждый модуль SOFABoot. Spring Context также может использовать эти bean-компоненты.

Давайте продемонстрируем, как разработать простой модуль SOFABoot.

1. Новое строительство

Адрес ДЕМО проекта:

https://github.com/caojie09/sofaboot-module-demo

Для запуска требуется JDK 6 и выше, а также Maven 3.2.5 или выше.

Сначала мы создаем новый обычный проект Maven в среде IDE и создаем два обычных модуля Maven:

  • сервис-фасад: определяет интерфейс сервиса

  • service-provide: Демонстрирует создание нового модуля SOFABoot и публикацию сервисов JVM.

2. Определите интерфейс службы

Модуль service-facade содержит интерфейс, используемый для демонстрации служб публикации и ссылок модуля SOFABoot:

public interface SampleService {
    String message();
}

3. Определите модуль SOFABoot

сервис-провайдер — это модуль SOFABoot, который публикует службу JVM для использования другими модулями. Во-первых, вам нужно добавить файл диван-модуль.properties в модуль поставщика услуг, определить его как модуль SOFABoot и поместить файл диван-модуль.properties в каталог ресурсов:

Module-Name=com.alipay.sofa.service-provider

4. Издательские услуги

SOFABoot поддерживает три формы публикации службы, а именно: режим XML, режим аннотаций и режим кодирования API, вот служба публикации XML.

Сначала добавьте класс SampleServiceImpl для реализации интерфейса SampleService:

public class SampleServiceImpl implements SampleService {
    private String message;

    public String message() {
        return message;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

Добавьте файл META-INF/spring/service-provide.xml и опубликуйте SampleServiceImpl как службу JVM:

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:sofa="http://sofastack.io/schema/sofaboot"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://sofastack.io/schema/sofaboot http://sofastack.io/schema/sofaboot.xsd"
       default-autowire="byName">
    <bean id="sampleService" class="com.alipay.sofa.isle.sample.SampleServiceImpl">
        <property name="message" value="Hello, SOFABoot module."/>
    </bean>

    <sofa:service ref="sampleService" interface="com.alipay.sofa.isle.sample.SampleService">
        <sofa:binding.jvm/>
    </sofa:service>
</beans>

На данный момент мы успешно создали модуль SOFABoot и опубликовали в нем службу JVM.Как видите, модуль SOFABoot включает в себя не только код, но и файлы конфигурации Spring.

Затем в проекте Spring Boot быстро интегрируйте возможности модульной разработки SOFABoot и используйте сервисы, опубликованные вновь созданным модулем.

Проект Spring Boot разработал интегрированные модульные компоненты

1. Новое строительство

Адрес демонстрационного проекта:

https://github.com/caojie09/sofaboot-module-run

Создайте новый веб-проект на официальном веб-сайте Spring Boot https://start.spring.io, Выберите номер версии Spring Boot как 1.X, который в настоящее время не поддерживает Spring Boot 2. Измените файл конфигурации pom.xml проекта maven на

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.14.RELEASE</version>
    <relativePath/>
</parent>

Заменить:

<parent>
    <groupId>com.alipay.sofa</groupId>
    <artifactId>sofaboot-dependencies</artifactId>
    <version>2.4.2</version>
</parent>

и добавьте следующие зависимости:

<dependency>
    <groupId>com.alipay.sofa</groupId>
    <artifactId>isle-sofa-boot-starter</artifactId>
</dependency>

Таким образом, проект Spring Boot объединяет возможности модульной разработки SOFABoot.

2. Добавьте модуль SOFABoot

Добавить модуль SOFABoot очень просто, вам нужно только добавить координаты модуля SOFABoot в текущий проект maven Для этого примера вам нужно только добавить созданный выше модуль сервис-провайдера в модуль класса запуска:

<dependency>
    <groupId>com.alipay.sofa</groupId>
    <artifactId>service-provide</artifactId>
    <version>1.0.0</version>
</dependency>

По сравнению с традиционным методом распространения кода пакета JAR модуль SOFABoot включает не только код, но и файл конфигурации Spring.Когда пользователи используют модуль SOFABoot, им нужно только добавить зависимости.

3. Службы цитирования

Для визуальной демонстрации мы добавляем интерфейс Rest в демонстрационный проект и ссылаемся на службу JVM, опубликованную модулем SOFABoot выше, в интерфейсе Rest. Здесь демонстрируется метод Annotation для ссылки на службу, просто добавьте поле класса

@
Аннотация SofaReference может быть:

@RestController
public class HelloController {
    @SofaReference
    private SampleService sampleService;

    @RequestMapping("/hello-sofamodule")
    public String hello() throws IOException {
        return sampleService.message();
    }
}

Посетите http://localhost:8080/hello-sofamodule, вы увидите, что HelloController успешно вызвал сервис, опубликованный сервис-провайдером.

Суммировать

В этой статье в основном представлена ​​модульная разработка изоляции контекста с использованием SOFABoot.В двух простых примерах использования рассказывается, как разработать модуль SOFABoot и как быстро интегрировать возможности модульной разработки в Spring Boot. Каждый модуль SOFABoot является независимым контекстом Spring. Модуль SOFABoot включает в себя не только код, но и файл конфигурации Spring. Когда пользователи обращаются к модулю SOFABoot, им нужно просто добавить зависимости. Платформа отвечает за обновление контекста модуля • Добавление любых определений компонентов упрощает процесс доступа и снижает вероятность ошибок.


Вас может заинтересовать:

Открытый исходный код | Интеграция возможностей изоляции класса SOFABoot в Spring Boot

Открытый исходный код | Анализ принципа изоляции класса SOFABoot


Нажмите и удерживайте кнопку «Подписаться», чтобы получить новейшие галантерейные товары с распределенной архитектурой.

Добро пожаловать на сборку SOFAStack вместе https://github.com/alipay