Лучший способ получить объекты из другого микросервиса и отобразить их на поле - PullRequest
0 голосов
/ 12 июня 2018

У меня есть 2 приложения на основе Spring-Framework.Мне нужно сопоставить объект по идентификатору из другого микросервиса в поле.Мой класс pojo:

@Entity
@Table(name = "sample_object")
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
@Data
@NoArgsConstructor
@EqualsAndHashCode(exclude = "id")
public class SampleObject {

    @Id
    @Column(name = "ID")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @Column(name = "SAMPLE_FIELD")
    private String sampleField;

    /**
     * ID to get large object from another microservice
     */
    @Column(name = "LARGE_OBJECT_ID")
    private String largeObjectId;

    /**
     * That object i will get from another microservice
     */
    @Transient
    private LargeObject objectFromAnotherService;
}

Я не хочу получать его через остальные запросы, потому что у меня около 60 000+ объектов, и отправка такого большого количества запросов, я думаю, не очень хорошая идея.Итак, мой вопрос: какой самый быстрый способ получить и сопоставить объект с моей сущностью?Было бы замечательно, если бы это отображение могло происходить одновременно с процессом создания объекта.

1 Ответ

0 голосов
/ 12 июня 2018

Вы можете иметь копию этой сущности в вашей базе данных и позаботиться о том, чтобы поддерживать ее синхронизацию (при необходимости¹) с другой микро-службой.

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

@ManyToOne
private LargeObject objectFromAnotherService;

largeObjectId можно переместить в этот новый объект.Итак, перед созданием сущности SampleObject вы отправляете запрос в другой микросервис для получения данных LargeObject и создания сущностей SampleObject и LargeObject.

Другой альтернативой является сопоставление всех полей из LargeObject напрямую с SampleObject., без создания эксклюзивного класса для этого.Я не знаю контекста вашей проблемы, но этот подход имеет смысл во многих сценариях.

Но будьте осторожны с этим сценарием: если эти два микросервиса так сильно нуждаются друг в друге, может быть, они должны быть вместе, а не разделены.

¹.Это называется возможной последовательностью.Поскольку вопрос не упоминается, если это необходимо или нет, я просто даю эту сноску в качестве ссылки

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