NServiceBus и подтверждение успешного получения сообщения

#nservicebus

#nservicebus

Вопрос:

В моей модели я получаю данные из TCP-соединения, а затем отправляю команду службе «концентратора» NServiceBus. (Этот концентратор опубликует данные для всех подписчиков.)

Для TCP-соединения требуется подтверждение (подтверждение) того, что я получил сообщение (или оно повторно отправит его). Прежде чем я подтвержду сообщение TCP, я хотел бы знать, что NServiceBus благополучно отправил сообщение в путь (и если задержка не слишком велика, я также хотел бы знать, что оно дошло до другого конца (службы концентратора)).

Существует ли какая-либо система подтверждения, встроенная в NServiceBus?Или я просто верю, что сообщение будет успешно отправлено?

Ответ №1:

Вы можете вручную добавить центральную базу данных (доступную с обоих клиентов) и поддерживать статус сообщений. Скажем, если вы отправляете сообщение от одного клиента, просто добавьте строку в центральную базу данных. Затем, получив сообщение на втором клиенте, обновите эту строку, чтобы подтвердить, что сообщение получено.

Ответ №2:

Если вы используете транзакционный NServiceBus, вы можете быть уверены, что сообщение будет успешно доставлено. Это имеет место, даже если служба-концентратор находится в автономном режиме, поскольку сообщения будут стоять в очереди в течение длительного времени в ожидании доставки.

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

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

Для этого сообщения подтверждения потребуется какое-то средство привязки к сообщению запроса, которое было отправлено изначально, какой-то токен или идентификатор, который позволил бы сопоставить подтверждение с исходным вызовом.

Надеюсь, это поможет.