Могу ли я использовать домен сетки событий Azure для отправки событий в несколько тем?

Я провел следующий эксперимент, и он работает:

  • Настроил домен сетки событий Azure с 2 темами.
  • Опубликовал событие в домене с информацией о теме 1.
  • Событие успешно доставлено в тему 1 (а не в тему 2), как ожидалось.

Вопросов:

  1. Можно ли отправить событие в домен, чтобы его можно было доставить в несколько тем (в приведенном выше случае тема 1 и тема 2)?
  2. Если возможно, как мне это сделать?
  3. Если это невозможно сегодня, будет ли это доступно позже?

person Raghu    schedule 05.02.2019    source источник


Ответы (2)


Можно ли отправить событие в домен, чтобы его можно было доставить в несколько тем (в приведенном выше случае тема 1 и тема 2)?

Сегодня это невозможно. Как правило, описанный вами сценарий трансляции решается путем создания нескольких подписок на одну и ту же тему. Основная причина публикации в разных темах внутри домена - это авторизация.

Если вы хотите, чтобы другая группа пользователей могла подписаться на события из темы 1 и темы 2, то имеет смысл разбить на две темы. Если одни и те же пользователи могут иметь доступ к одному и тому же набору событий, то им обычно может быть предоставлен доступ к одной и той же теме.

Если вы не хотите, чтобы все события проходили в каждую конечную точку, здесь можно применить фильтры.

Если возможно, как мне это сделать?

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

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

Если это невозможно сегодня, будет ли это доступно позже?

TBD. Вы имеете в виду заблокированный вариант использования?

person Bahram Banisadr    schedule 05.02.2019
comment
В настоящее время проблем с блокировкой нет. Просто пытаюсь понять, возможно это или нет. - person Raghu; 06.02.2019

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

Другими словами, если для этой темы домена нет интереса (нет подписки), эта тема домена не существует в домене событий, и сообщение о событии, опубликованное для этой темы домена, перенаправит его подписчику домена (если есть доменная подписка).

В вашем случае вы создали две подписки в домене событий topic1 и topic2. Если эти подписки были созданы для этих тем впервые, то домен автоматически создаст эти темы (topic1, topic2) в ресурсе домена событий.

Предварительный просмотр домена событий AEG поддерживает отправку массива событий в темы домена событий. В следующем фрагменте экрана показан пример событий с использованием схемы ввода по умолчанию (например, EventGridSchema):

[
 {
   "topic": "topic1",
   "id": "12345",
   "subject": "/myapp/vehicles/motorcycles",
   "eventType": "recordInserted",
   "eventTime": "2019-02-05T16:57:16.5734282Z",
   "data": {
     "make": "Ducati",
     "model": "Monster"
     }
 },
 {
   "topic": "topic2",
   "id": "67890",
   "subject": "/myapp/vehicles/motorcycles",
   "eventType": "recordInserted",
   "eventTime": "2019-02-05T16:57:16.5734282Z",
   "data": {
     "make": "Ducati",
     "model": "Monster"
     }
 }
]

Как вы можете видеть, каждое указанное выше событие (в этой EventGridSchema) сопоставляет источник интереса с темой домена. Особый случай - когда мы использовали CustomInputSchema, где это сопоставление можно настроить (например, значение по умолчанию и / или sourceField).

Ответ на ваш вопрос о "тематической трансляции" в модели AEG Pub / Sub: НЕТ. Модель AEG поддерживает подписку только на одну тему. Было бы неплохо подписаться на несколько тем в домене событий, например, используя расширенную фильтрацию с ключом = topic, но это не работает.

Подписка на домен событий для схемы разветвления:

Особым случаем может быть подписка на домен событий и использование расширенной фильтрации, см. Следующий пример:

 "advancedFilters": [
      {
        "values": [
          "topics/topic1",
          "topics/topic2"
        ],
        "operatorType": "StringEndsWith",
        "key": "topic"
      }

Основываясь на вышеупомянутом «обходном пути», вы можете создать несколько разветвленных (широковещательных) групп в домене событий. Предел для подписок на события области домена составляет 50 во время этой общедоступной предварительной версии.

Домены событий - отличная функция в модели событий AEG, например, есть встроенная агрегация событий (шаблон Fan-In) в теме уровня домена. Если событие источника интереса имеет неизвестную тему домена (нет подписки), событие может быть захвачено подписчиком домена.

person Roman Kiss    schedule 05.02.2019
comment
Будет ли событие (отправленное в домен) рассылаться в неизвестных темах 1 и 2 домена в рассмотренной выше подписке на разветвленную модель домена? Если да, то какой смысл отправлять событие этим темам без подписки, потому что событие никуда не уходит из этих тем? Я что-то упустил? - person Raghu; 06.02.2019
comment
Подписка на домен событий (не на тему домена) будет фиксировать все события без зарегистрированных тем домена (без подписок на темы этого домена). Это уникальный случай в модели AEG, потому что остальные подписываются на тему. - person Roman Kiss; 06.02.2019
comment
Я хотел бы исправить следующее: на основе docs.microsoft.com/en-us/azure/event-grid/, в документе говорилось, что подписка на события в домене событий будет получать все события, отправленные в домен, независимо от темы, в которой события отправлено. В любом случае, точка моего обходного пути осталась прежней: подписка на домен событий получает все события из тем домена, и на основе расширенной фильтрации мы можем обрабатывать группы разветвления (широковещания). - person Roman Kiss; 06.02.2019