2014-02-03 4 views
0

У меня возникла ошибка при использовании Bus.SendToQueues, подробная ошибка в конце вопроса.Nservicebus msmq to azure queue using gateway

У меня есть лазурная очередь, настроенная с учетной записью хранения и ключом, и я пытаюсь использовать Bus.SendToSites, чтобы иметь обработчик служебного обслуживания в помещении, используя msmq, отправить сообщение на сайт azure.

Попытка получить шлюз идет, в соответствии с: http://support.nservicebus.com/customer/portal/articles/859548-the-gateway-and-multi-site-distribution, и я использую эту конфигурацию:

App.config: (? Могу ли я создание сайта правильно)

<section name="GatewayConfig" type="NServiceBus.Config.GatewayConfig, NServiceBus.Core" /> 
<GatewayConfig> 
    <Sites> 
    <Site Key="Azure" Address="http://<!--STORAGE ACCOUNT NAME-->.queue.core.windows.net/<!--STORAGE ACCOUNT KEY-->" ChannelType="Http"/> 
    </Sites> 
</GatewayConfig> 

Handler:

Bus.SendToSites(new[] { "Azure" }, message); 

Во время выполнения я получаю следующее:

ошибка: Не удалось отправить сообщение по адресу: адрес данных дистрибьютора, используемый в качестве обратного адреса сообщений, отправленных этим endpoint..gateway @ HFORTE

Внутренняя Исключение: { "имя формата недействителен "}

StackTrace:. на System.Messaging.MessageQueue.MQCacheableInfo.get_WriteHandle() в System.Messaging.MessageQueue.StaleSafeSendMessage (MQPROPS свойства, ITransaction сделка) на System.Messaging.MessageQueue.StaleSafeSendMessage (MQPROPS свойства, IntPtr транзакций) на System.Messaging.MessageQueue.SendInternal (объект Объект, MessageQueueTransaction internalTransaction, MessageQueueTransactionType transactionType) в System.Messaging.MessageQueue.Send (объект Объект, MessageQueueTransactionType transactionType) в NServiceBus.Transports.Msmq.MsmqMessageSender.Send (TransportMessage сообщение, адрес адрес) в: линия 0

Я вижу, что транспорт MSMQ - это то, что проблема, что MSMQ и Azure различные транспортные протоколы , и если да, то как это исправить?

ответ

2

Чтобы использовать шлюзы, вы должны иметь NSB, размещенный с обеих сторон - отправителя и получателя. Шлюзы просто открывают службу WCF для конечной точки NSB, поэтому вы можете отправлять сообщения с использованием протокола HTTP.

Транспорты очереди MSMQ и Azure не могут быть объединены в одном решении, потому что экземпляр IBus является одноточечным. Нам нужно было разработать собственный «мост» с помощью RavenDb. Мы выбрали Raven, поскольку он имеет механизм подписки на события RX, который также прост в использовании. Мы также можем сохранять сообщения (завернутые в некоторые контейнеры), поскольку они без особого танца, так как RavenDb - это база данных документов.

+0

Спасибо, что мой страх и опыт до сих пор. Я тоже начал работать с реле. Я использую webapi, чтобы просто отправлять сообщения в лазурь, поскольку мне нужно только одностороннее общение. –

+1

Мы используем решение NSB, размещенное в помещениях, но использующее AzureSB в качестве транспорта. Поэтому мы используем AzureSB для гарантированной доставки от локального к облаку. Но все другие локальные службы используют MSMQ. Таким образом, у нас есть этот шлюз на основе RavenDb для обмена сообщениями между этими двумя. Поскольку RavenDb может хранить сообщения как есть, плюс поддерживает подписки на события, его было довольно легко реализовать. –

+0

@AlexeyZimarev более подробно об этом решении, оправдал ли он ожидания? подводные камни? лучшие решения? –

0

Адрес вашего сайта не должен быть адресом вашей очереди Azure. Он должен быть адресом канала шлюза NServiceBus.

В этом случае просто совпадение состоит в том, что обе очереди Azure и шлюз NSB используют HTTP.

Вашего отправителя (размещено на предпосылке) будет иметь этот конфиг

<GatewayConfig>
<Sites>
<Site Key="Azure" Address="https://some.address.com" ChannelType="Http"/>
</Sites>
</GatewayConfig>

Ваших NSB конечных точки, размещенные на Azure будет иметь этот шлюз CONFIG

<GatewayConfig>
<Channels>
<Channel ChannelType="Http" Address="https://some.address.com" Default="True"/>
</Channels>
</GatewayConfig>

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