2015-11-05 2 views
0

У меня есть установки, где у меня есть цепь серверов, что мне нужно для передачи сообщений между:Как выполнить маршрутизацию MSMQ через HTTP?

A -> B -> C 

На AI есть приложение, которое помещает сообщение в локальной очереди MSMQ (MSMQ-A) на A. Эта очередь должна перенаправить сообщение в очередь MSMQ на B (MSMQ-B), которая, в свою очередь, должна отправить сообщение в очередь MSMQ на C (MSMQ-C). На C есть приложение, которое прослушивает сообщения от MSMQ-C.

Сообщения не должны быть транзакционными.

Как настроить MSMQ-A и MSMQ-B для пересылки сообщений?

UPDATE

На основе предложенного ответа я сделал это:

Я включил поддержку HTTP под функцией очереди сообщений Windows. Я добавил файл отображение под System32/MSMQ/отображений папки вид:

<redirections xmlns="msmq-queue-redirections.xml"> 
    <redirection> 
    <from>http://machineA/msmsq/private$/logger</from> 
    <to>http://machineB/msmq/private$/logger</to> 
    </redirection> 
</redirections> 

и еще сообщения застревают на machineâ.

Я использую powershell для отправки сообщений в очередь на A, как это: Get-MsmqQueue -name logger | Отправить-MsmqQueue -body "asdasd"

+0

Любая удача с перенаправлением? –

ответ

0

Дизайн, который вы описываете, не является тем, что предоставляет MSMQ.

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

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

Вместо этого вы можете перенаправить сообщения MSMQ. Например, если A - это интернет-компьютер, B - сервер, ориентированный на Интернет, а C - ПК во внутренней локальной сети (и вы хотите отправить A-> B-> C). Если у вас такой сценарий, вам нужно посмотреть перенаправления.

Delivering Messages Sent over the Internet

HTTP Message Redirection

+0

Итак, как бы настроить систему так, чтобы при отсутствии сообщений B и C сообщения не были потеряны. Достаточно ли установить сервер MSMQ на A? Также я не совсем понимаю статьи. Где я должен делать маршрутизацию. На примере MSMQ? На каком сервере я должен настроить сопоставления? –

+0

Все машины, которые участвуют в сообщениях MSMQ, являются серверами MSMQ, которые используют функцию store-and-forward для предотвращения потери сообщений. Таким образом, для A + B + C потребуется MSMQ, установленный с опцией поддержки HTTP. «Где я должен делать маршрутизацию?» Вы перенаправляете, а не маршрутизируете. Это может звучать педантично, но в MSMQ это разные концепции. A отправляет сообщения через HTTP в очередь на стороне Интернета B. B. имеет файл перенаправления, который отображает эту очередь в реальную целевую очередь на C. Очередь на B фактически не должна существовать. Это всего лишь способ скрыть внутреннее имя очереди, используемое C. –

Смежные вопросы