Ключ Орлеана и записи базы данных

Я только изучаю Microsoft Orleans, и мне интересно, как лучше всего справиться с одним из наших сценариев. У нас будет служба REST, которая получает запрос, который в конечном итоге приведет к созданию новой записи во внешней системе. Эта запись будет иметь длинное значение Id. Затем мы вернем этот идентификатор вызывающей стороне.

Какая рекомендация для этого сценария? Должно ли быть зерно без состояния, которое обрабатывает вызов внешней системы и получение идентификатора. Я думаю, что это «фабричное» зерно затем создаст зерно с идентификатором и предоставит начальную информацию этому зерну (так что ему не нужно извлекать данные из внешнего хранилища). Однако я не хочу, чтобы он пытался прочитать эту информацию из внешнего хранилища при первой активации.

Есть ли рекомендация, как с этим справиться с использованием зерен Microsoft Orleans?


person John Socha-Leialoha    schedule 02.09.2016    source источник


Ответы (1)


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

person Gabi Kliot    schedule 03.09.2016
comment
Когда приходит первый запрос, идентификатора нет. Вместо этого вызов внешней системы должен создать новый экземпляр, и внешняя система возвращает новый идентификатор. Так что у меня не будет Id до первого вызова внешней системы. Затем мое зерно вернет этот идентификатор клиенту. Так что в будущем клиент может получить статус или внести изменения в редактирование. - person John Socha-Leialoha; 03.09.2016
comment
В таком случае вы действительно можете использовать рабочие зерна без сохранения состояния, чтобы передать начальный вызов внешней системе, а затем использовать обычные зерна для будущих обращений. - person Gabi Kliot; 06.09.2016