Поток сообщений компонента Service Broker - PullRequest
0 голосов
/ 31 августа 2018

У меня есть два разных сервера в двух местах. Мне нужно использовать асинхронный обмен данными.

  • Сервер A является нашим сервером данных, здесь мы храним информацию о клиенте.
  • Сервер B - наш обрабатывающий сервер, мы обрабатываем производство.

Каждая производственная операция на сервере B имеет производственную группу. Что мне нужно сделать, это:

  1. A для отправки сообщения B с вопросом: какие операции запланированы на сегодня в этой группе (GUID).
  2. B должен ответить с XML-списком операций, запланированных на сегодня.
  3. А должен ответить списком операций XML для отмены
  4. B должен отменить операции и завершить разговор

Мой вопрос: как правильно поступить? Могу ли я сделать это в одном диалоге, используя один контракт? Должен ли я?

С таким контрактом:

CREATE CONTRACT [GetScheduledContract] 
AUTHORIZATION [xxx]
(GetScheduledOutCalls SENT BY INITIATOR,
ReturnScheduledOutCalls SENT BY TARGET,
DeleteScheduledOutCalls SENT BY INITIATOR)

Или я должен разделить задачи для разных контрактов и диалогов?

1 Ответ

0 голосов
/ 31 августа 2018

То, что вы имеете, кажется мне хорошим как MVP (то есть, если все пойдет хорошо, это будет работать). Пара вещей:

  1. Подумайте о добавлении еще одного ответа от цели, говорящего «операция успешно завершена», прежде чем завершить диалог. После получения инициатор также может закрыть свой конец.
  2. Что произойдет, если какая-либо из этих операций явно не может быть выполнена (например, на шаге 4 запрос состоит в том, чтобы удалить что-то, чего нет, или что удаление вызывает нарушение внешнего ключа)? Я бы добавил какой-то тип сообщения об ошибке (sent by any), позволяющий любой стороне сказать другой «эй… что-то пошло не так».
  3. Что происходит, если какая-либо из этих операций неявно не может быть завершена (например, сообщение никогда не доставляется)? Другая сторона может не отвечать по какой-то причине. Построить каким-то образом, чтобы хотя бы обнаружить и предупредить об этом.
...