Как работать с зависимостями в МикроСервисах — Spring Framework

#java #spring #spring-data-jpa #dependencies #microservices

#java #spring #spring-data-jpa #зависимости #микросервисы

Вопрос:

Я хочу закодировать три отдельных микросервиса «CustomerMicroService», «CartMicroService» и «OrderMicroService», а позже я хочу подключить их через Spring Cloud (шаблон брокера и шаблон обнаружения служб). Но я уже сталкиваюсь с другой проблемой: зависимостями микросервисов друг друга.

 @Entity
public class Customer {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int customerId;

    private String name;
    private String address;

    @OneToOne
    @JoinColumn(name = "CART_ID")
    private Cart cart

    @ElementaryCollection
    private Map<Integer, Order> orders;


    public Customer(Cart cart) {
        this.cart = cart;
    }
  

Этот пример сработал бы, если бы я скопировал классы другого микросервиса в один. Но теперь я просто получу множество исключений, потому что, если я захочу выполнить только один микросервис, Spring Data JPA не сможет найти класс другого микросервиса. Как я могу с этим справиться?

Комментарии:

1. Имхо, ваш сервис неправильно разделен. Микросервис должен быть автономным, т.Е. если a Customer не функционирует без Cart , то они принадлежат одному и тому же микросервису. Если вам, однако, нужна только некоторая ваша информация Customer в Order , то Order микросервис должен хранить эти данные избыточно из Customer сервиса.

2. @Turing85 но я думаю, что в конце это не будет «Магазином» микросервисов, когда клиент и корзина находятся в одном МикроСервисе?

3. Я не говорил, что они должны быть в одном микросервисе. Я просто сказал, что они должны быть, если они должны быть тесно связаны. Название Customer мне уже кажется неправильным. Это должно быть что-то вроде User (т. Е. оно содержит больше информации, такой как метод аутентификации, ник, настоящее имя, электронная почта, почтовый адрес, …). Это само по себе может быть, по крайней мере, две службы (фактическая служба пользователя и служба аутентификации, отображающая по крайней мере один метод аутентификации для каждого пользователя). Затем служба cart сохраняет / реплицирует только ту пользовательскую информацию, которая ей необходима.

4. @Turing85 было бы решением, по вашему мнению, если бы я сохранял cartId только как переменную и как внешний ключ?

5. Краткий вопрос: используете ли вы единую службу базы данных для всех микросервисов?