Приложение брокера службы очередей SQL

Я разрабатываю приложение, которое будет читать сообщения из очереди SQL. Это требование. Я должен использовать их очередь. Проблема в том, как прочитать их очередь. Я хотел бы использовать его так же, как MSMQ, но это не представляется возможным. Мне нужно читать сообщения в порядке FIFO по одному. Чтобы читать по одному, мне пришлось бы сделать каждое сообщение беседой, но тогда они не обязательно были бы в порядке FIFO. Я могу использовать один бесконечный разговор для поддержания порядка, но тогда я считаю, что должен прочитать все в очереди. Не одно сообщение. Кто-нибудь создал приложение для работы так, как мне нужно? Это невозможно? Любые другие предложения?

Заранее спасибо.


person user1626137    schedule 19.02.2014    source источник


Ответы (1)


чтение сообщений из очереди SQL. Это требование... Я хотел бы использовать его так же, как MSMQ, но это не представляется возможным. Мне нужно читать сообщения в порядке FIFO по одному.

Мой совет: не пытайтесь вставить квадратный колышек в круглое отверстие. Если использование Service Broker является обязательным требованием, не пытайтесь вписаться в вашу модель программирования. Узнайте немного о программировании Service Broker и попытайтесь разработать что-то, что использует сильные стороны SSB. Прочитайте эти ссылки, прежде чем идти вперед:

Давай, я подожду...

Я надеюсь, что к настоящему моменту стало ясно, что есть способ сделать то, о чем вы первоначально просили: SSB предлагает доставку Exactly Once In Order внутри разговора, чтобы вы могли достичь FIFO только путем отправка всех сообщений в одном диалоге. SSB также позволяет ограничить удаление из очереди только одним сообщением с помощью RECEIVE TOP(1) ... FROM .... Объедините эти два, и вы получите именно то, что вы просили.

Но это не то, как должно быть разработано приложение SSB. Буквально нет причин ограничивать исключение из очереди одним сообщением, вы должны удалить из очереди пакет и обработать пакет в цикле. Сохраняйте одну транзакцию, и результат будет неотличим от удаления из очереди по одной за раз. Далее, требование FIFO может иметь смысл только в рамках разговора, поскольку у вас есть несколько отправителей. FIFO не может существовать как фундаментальная концепция (что означает «Первый», когда несколько отправителей одновременно отправляют сообщения? «Первый», чтобы достичь цели). очереди, в случайной сетевой рулетке?). Вы можете создать иллюзию FIFO, разместив очередь в порядке поступления сообщений, и на самом деле SSB делает именно это. Наивная концепция «глобального FIFO» рушится, как только вы начинаете рассматривать параллельную обработку. Добавьте откаты и повторные попытки в качестве приправы.

person Remus Rusanu    schedule 20.02.2014