Я хочу, чтобы только один потребитель сообщений из многих обрабатывал сообщение на основе идентификатора. Может ли это быть достигнуто с помощью Azure Service Bus? - PullRequest
1 голос
/ 04 мая 2020

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

Изначально я начал использовать служебную шину Azure, чтобы планировщик мог выбросить сообщение на служебной шине, предназначенной для указать c потребитель для обработки на основе указанной задачи. Например, планировщик может инициировать вызываемую задачу и выдавать сообщение на служебную шину, а потребитель, который должен обрабатывать эту задачу, подхватит ее для обработки, в то время как другие процессоры ничего не делают.

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

Будет ли это достижимо с помощью Azure Service Bus? если да, то как? или другая функция Azure будет более полезной для этого? В любом случае мне нужно сделать это Azure.

Я думал, что смогу позволить всем процессорам принять сообщение и проверить messageId, и если оно правильное, то обработать сообщение, но оно звучит не так эффективно, когда все потребители принимают сообщение.

1 Ответ

1 голос
/ 04 мая 2020

Я считаю, что Azure Сервисный автобус Topics & Subscriptions удовлетворит ваши требования.

По сути, вы должны создать отдельную подписку для каждого вида задач. Затем вам нужно будет определить filtering rules, чтобы сообщение, отправленное Topi c, можно было направить в соответствующую подписку, а обработчик задач, прослушивающий эту подписку, выберет сообщение и обработает его.

...