Я начинаю свое исследование NServiceBus, RabbitMQ, MassTransit и EasyNetQ.Сообщение метаданных в MOM
Одна деталь, которую я специально хочу понять, заключается в том, как обеспечить, чтобы пользовательский набор метаданных всегда отправлялся с каждым опубликованным сообщением?
Например, независимо от того, что публикует производитель сообщение, возможно, я хочу, чтобы гарантировать, что следующие части информации всегда передается как часть сообщения:
- TimeStamp
- Workflow Имя
- Приоритет
На самом деле не имеет значения, что такое метаданные, важно иметь возможность или способность пересылать такую произвольную информацию.
Мне нравится идея, что пространство имен и имя класса сообщения, отправленного производителем, автоматически переводятся в «ключ маршрутизации» сообщения. Однако для присоединения дополнительных метаданных к сообщению может быть необходимо иметь какую-то «предварительно опубликованную» точку привязки, которая позволяет произвольному сообщению преобразовывать в полезную нагрузку объекта-обертки, так как например:
public class BaseMessage {
//a couple fields of meta-data that every message should have.
public string TimeStamp;
public int Priority;
//The payload is the real message that the consumer cares about
//and can be any format (JSON, XML, etc).
public string payload;
}
в этом случае, я не хочу «маршрутизация ключа», чтобы содержать имя или пространство имен BaseMessage
. Тип полезной нагрузки до ее сериализации - это то, на чем должен основываться «ключ маршрутизации».
Конечно, все это также предполагает, что потребитель имеет удобный способ де-сериализации как BaseMessage, так и полезной нагрузки.
Итак, какой из перечисленных мной инструментов поддерживает эту потребность? Пожалуйста, покажите пример синтаксиса, где это применимо.
Мне нравится то, что вы говорите, но ваше предположение предполагает, что я сам пишу код проверки. То, что я пытаюсь обнаружить, - это использовать один из перечисленных мной инструментов. И, точнее, на самом деле это не «проверка», которую я ищу. Я ищу поведение AOP или шаблон «decorator», который позволяет мне манипулировать сообщением продюсера, прежде чем он пойдет на провод; Я хотел бы знать, поддерживает ли один из вышеупомянутых инструментов. –
Требование в значительной степени ортогонально к передаче сообщений, и разработчики, возможно, специально исключили это, чтобы позволить пользователю накладывать собственные предпочтения. Пример NServiceBus, представленный @ Andreas-Öhlund, является примером. Эта же ссылка содержит [ValidationMessageMutator] (http://docs.particular.net/samples/messagemutators/#validationmessagemutator), который вам нужен. – Pekka