Как принять решение при разработке веб-приложения с использованием микросервисов в Spring-Boot для общего кода и отношений - PullRequest
0 голосов
/ 03 июня 2019

Я собираюсь разработать небольшое веб-приложение, чтобы получить представление об архитектуре микро-сервисов, используя spring-boot и spring-data-jpa.

На начальном этапе у меня есть только 2 объекта (1) CountryEntity и (2) StateEntity.В монолитной структуре, которая у меня уже есть, есть связь между этими двумя сущностями, такими как:

CountryEntity:

@Entity
@Data
@EqualsAndHashCode(callSuper=false)
public class CountryEntity  extends BaseEntity{

    private String countryCode;
    private String country;

    @OneToMany(mappedBy = "country", orphanRemoval = true, cascade = CascadeType.ALL)
    private Set<StateEntity> stateEntities;
} 

StateEntity:

@Entity
@Data
@EqualsAndHashCode(callSuper=false)
public class StateEntity extends BaseEntity {

    private String stateCode;
    private String state;

    @ManyToOne
    private Country country;
}

Также обратите вниманиечто у меня есть, расширяет BaseEntity, который содержит общие поля, такие как:

BaseEntity:

@MappedSuperclass
@Data
public abstract class BaseEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    private Date createdDateTime;
    private Date updatedDateTime;
    private Boolean isActive;
    private Boolean isDelete;

    @PrePersist
    private void setCreatedDateTime() {
        this.createdDateTime = new Date();
        this.isActive = true;
        this.isDelete = false;
    }

    @PreUpdate
    private void setUpdatedDateTime() {
        this.updatedDateTime = new Date();
    }
}

Теперь у меня есть 2 запроса при преобразовании вышеуказанной монолитной структуры в микросервисы, как описано здесь:

1. Должен ли я создать общую библиотеку (отдельный микросервис для общего кода, а затем добавить зависимость во всех различных приложениях микросервисов) для BaseEntity, определенного выше, и других классов, таких как Constants, Utility и т. Д.?или я должен повторить весь код во всех микросервисах?Пожалуйста, следуйте инструкциям, потому что некоторые сайты предлагают использовать разделяемую библиотеку, а некоторые эксперты советуют не использовать разделяемую библиотеку и предлагают повторить весь код.Что я должен сделать для улучшения архитектуры.

2. Как я могу дать взаимосвязь между двумя объектами в архитектуре микросервисов?Я прошел ТАК вопросы, и некоторые отзывы говорят, что это невозможно.Тогда у меня есть приложение, в котором все объекты прямо или косвенно связаны.Здесь я только что взял пример из оригинального приложения.Я знаю, что это должна быть какая-то структура или какой-то способ, с помощью которого я могу применять отношения.Пожалуйста, ведите меня.

Большое спасибо заранее.

1 Ответ

0 голосов
/ 03 июня 2019

Когда вы работаете в архитектуре Microservices, вы должны поместить весь общий код в модуль shared. Этот модуль может быть развернут как библиотека для вашего Maven или любого другого хранилища и внедрен в ваши микросервисы по требованию.

Если вы скопируете код на свои микроуслуги - его будет сложнее поддерживать в дальнейшем. Представьте себе 100 микросервисов, которые имеют общий класс внутри, и вы хотите изменить его. Будет еще сложнее, если вы решите разделить микросервисы на разные репозитории.

Но вы должны быть очень осторожны при использовании репозитория Spring REST. Когда вы внедряете в общий репозиторий микросервиса для любого объекта, он автоматически выставляет его REST, поэтому у вас будут одинаковые точки REST на разных микросервисах, что не очень хорошо. С Spring Security могут возникнуть проблемы (если вы забыли где-то спрятать).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...