2015-06-10 4 views
0

У нас есть конечная точка NServiceBus, которая контролирует очередь служебной шины Azure (используя Azure в качестве транспорта). Но не все клиенты, отправляющие сообщения в очередь, основаны на .NET.Можно ли настроить конечную точку NServiceBus (на транспорте Azure), чтобы принять простую строку в качестве входных данных?

Может ли конечная точка NServiceBus быть настроена на прием простой строки в качестве входных данных?

Я попытался перехватить сообщения с классом, который реализует IMutateIncomingMessages, но в этот момент десериализация из транспорта Azure уже не удалась.

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

Каков наилучший способ настройки NServiceBus для обработки сообщения, которое опубликовано в следующем формате (имейте в виду, что это также может прийти через Java или Node SDKs, или с помощью конечной точки Azure REST):

var brokered = new BrokeredMessage("This plain string represents the data."); 
queueClient.Send(brokered); 

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

PS: Я знаю, что можно показать конечную точку как службу WCF, но в настоящее время у нас есть только процессы NServiceBus.Host, которые выходят из очереди, а решение WCF не похоже на правильное решение для меня.

+0

Может ли ваша сериализация работать на вас? http://docs.particular.net/samples/pipeline/multi-serializer/ – Simon

+0

Это просто возможно. Я отдам его. Благодаря! – willem

+0

Теперь я углубился в это. К сожалению, код Azure Transport настаивает на том, что сообщение находится в формате byte []. Это происходит до того, как запускаются сериализаторы NServiceBus, поэтому это не сработает. – willem

ответ

2

Как уже упоминалось на твиттере ранее, но только в том числе его здесь для полноты ...

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

См. https://github.com/yvesgoeleven/NServiceBus.AsbNativeIntegration для примера такой интеграции.

+0

Спасибо Ив. Я реализовал его, как было предложено. Я не понимал, что Asb.NativeIntegration работает поверх NSB.AzureTransport, что приятно. Я должен был изменить его, чтобы сделать message.GetBody (), чтобы читать строки от клиента NodeJS через Apar REST api. Работает как шарм. – willem