public static void UseOneExchangePerClassPublish(this StandardConfigurer <ITransport> configurer, string exchangeName) { if (configurer == null) { throw new ArgumentNullException("Configurer cannot be null"); } // Configure as https://github.com/rebus-org/Rebus.RabbitMq/blob/f34cf6b5b203d9b6d708db0f8937f928b297ab2e/Rebus.RabbitMq/Config/RabbitMqConfigurationExtensions.cs build internal configurer.Decorate(c => { var transport = c.Get <ITransport>(); RabbitMqMangler.EnsureIsRabbitMqTransport(transport); return(new RabbitMqEnhancedTransport(transport, c.Get <IRebusLoggerFactory>())); }); configurer.OtherService <ISubscriptionStorage>().Decorate(c => { return(new RabbitMqEnhacedSubscriptionStorage(exchangeName, c.Get <ISubscriptionStorage>(), c.Get <ITransport>(), c.Get <IRebusLoggerFactory>())); }); configurer.OtherService <IPipeline>().Decorate(c => { var pipeline = c.Get <IPipeline>(); pipeline = new PipelineStepConcatenator(pipeline) .OnReceive(new DeleteDuplicatedLegacyMessagesIncomingStep(c.Get <IRebusLoggerFactory>()), PipelineAbsolutePosition.Front); return(pipeline); }); }
/// <summary> /// Makes Rebus "legacy compatible", i.e. enables wire-level compatibility with older Rebus versions. WHen this is enabled, /// all endpoints need to be old Rebus endpoints or new Rebus endpoints with this feature enabled /// </summary> public static void EnableLegacyCompatibility(this OptionsConfigurer configurer, Encoding encoding, bool propagateAutoCorrelationSagaId = true) { configurer.Register <ISerializer>(c => { return(new LegacyCompatibilitySerializer(encoding ?? LegacyCompatibilitySerializer.DefaultEncoding)); }); configurer.Decorate(c => { var pipeline = c.Get <IPipeline>(); pipeline = new PipelineStepConcatenator(pipeline) .OnReceive(new MapLegacyHeadersIncomingStep(propagateAutoCorrelationSagaId), PipelineAbsolutePosition.Front); // unpack object[] of transport message pipeline = new PipelineStepInjector(pipeline) .OnReceive(new UnpackLegacyMessageIncomingStep(), PipelineRelativePosition.After, typeof(DeserializeIncomingMessageStep)); // pack into object[] pipeline = new PipelineStepInjector(pipeline) .OnSend(new PackLegacyMessageOutgoingStep(), PipelineRelativePosition.Before, typeof(SerializeOutgoingMessageStep)); pipeline = new PipelineStepInjector(pipeline) .OnSend(new MapLegacyHeadersOutgoingStep(propagateAutoCorrelationSagaId), PipelineRelativePosition.Before, typeof(SendOutgoingMessageStep)); return(pipeline); }); }
public static void EnableDiagnosticSources(this OptionsConfigurer configurer) { if (configurer == null) { throw new ArgumentNullException(nameof(configurer)); } configurer.Decorate <IPipeline>(c => { var pipeline = c.Get <IPipeline>(); var injector = new PipelineStepInjector(pipeline); var outgoingStep = new OutgoingDiagnosticsStep(); injector.OnSend(outgoingStep, PipelineRelativePosition.Before, typeof(SendOutgoingMessageStep)); var incomingStep = new IncomingDiagnosticsStep(); var invokerWrapper = new IncomingDiagnosticsHandlerInvokerWrapper(); injector.OnReceive(invokerWrapper, PipelineRelativePosition.After, typeof(ActivateHandlersStep)); var concatenator = new PipelineStepConcatenator(injector); concatenator.OnReceive(incomingStep, PipelineAbsolutePosition.Front); return(concatenator); }); }
/// <summary> /// Makes Rebus "legacy compatible", i.e. enables wire-level compatibility with older Rebus versions. WHen this is enabled, /// all endpoints need to be old Rebus endpoints or new Rebus endpoints with this feature enabled /// </summary> public static void EnableLegacyCompatibility(this OptionsConfigurer configurer) { configurer.Register <ISerializer>(c => { var specialSettings = LegacySubscriptionMessagesBinder.JsonSerializerSettings; var legacyEncoding = Encoding.UTF7; var jsonSerializer = new JsonSerializer(specialSettings, legacyEncoding); return(jsonSerializer); }); configurer.Decorate(c => { var pipeline = c.Get <IPipeline>(); // map headers of incoming message from v1 to v2 pipeline = new PipelineStepConcatenator(pipeline) .OnReceive(new MapLegacyHeadersIncomingStep(), PipelineAbsolutePosition.Front); // unpack object[] of transport message pipeline = new PipelineStepInjector(pipeline) .OnReceive(new UnpackLegacyMessageIncomingStep(), PipelineRelativePosition.After, typeof(DeserializeIncomingMessageStep)); // pack into object[] pipeline = new PipelineStepInjector(pipeline) .OnSend(new PackLegacyMessageOutgoingStep(), PipelineRelativePosition.Before, typeof(SerializeOutgoingMessageStep)); pipeline = new PipelineStepInjector(pipeline) .OnSend(new MapLegacyHeadersOutgoingStep(), PipelineRelativePosition.Before, typeof(SendOutgoingMessageStep)); //pipeline = new PipelineStepInjector(pipeline) // .OnReceive(new HandleLegacySubscriptionRequestIncomingStep(c.Get<ISubscriptionStorage>(), c.Get<LegacySubscriptionMessageSerializer>()), PipelineRelativePosition.Before, typeof(MapLegacyHeadersIncomingStep)); return(pipeline); }); configurer.Decorate(c => { var transport = c.Get <ITransport>(); if (transport is MsmqTransport) { c.Get <IRebusLoggerFactory>() .GetCurrentClassLogger() .Info("MSMQ transport detected - changing to UTF7 for serialized message header encoding"); ((MsmqTransport)transport).UseLegacyHeaderSerialization(); } return(transport); }); }
public void CanInjectStepInTheBack() { var pipeline = new DefaultPipeline() .OnReceive(new Step1()) .OnReceive(new Step2()); var injector = new PipelineStepConcatenator(pipeline) .OnReceive(new InjectedStep(), PipelineAbsolutePosition.Back); var receivePipeline = injector.ReceivePipeline().ToArray(); Assert.That(receivePipeline.Select(s => s.GetType()), Is.EqualTo(new[] { typeof(Step1), typeof(Step2), typeof(InjectedStep), })); }
/// <summary> /// Makes Rebus "legacy compatible", i.e. enables wire-level compatibility with older Rebus versions. WHen this is enabled, /// all endpoints need to be old Rebus endpoints or new Rebus endpoints with this feature enabled /// </summary> public static void EnableLegacyCompatibility(this OptionsConfigurer configurer) { configurer.Register(c => new LegacyFlag()); configurer.Register <ISerializer>(c => { var specialSettings = LegacySubscriptionMessagesBinder.JsonSerializerSettings; var legacyEncoding = Encoding.UTF7; var jsonSerializer = new JsonSerializer(specialSettings, legacyEncoding); return(jsonSerializer); }); configurer.Decorate(c => { var pipeline = c.Get <IPipeline>(); // map headers of incoming message from v1 to v2 pipeline = new PipelineStepConcatenator(pipeline) .OnReceive(new MapLegacyHeadersIncomingStep(), PipelineAbsolutePosition.Front); // unpack object[] of transport message pipeline = new PipelineStepInjector(pipeline) .OnReceive(new UnpackLegacyMessageIncomingStep(), PipelineRelativePosition.After, typeof(DeserializeIncomingMessageStep)); // pack into object[] pipeline = new PipelineStepInjector(pipeline) .OnSend(new PackLegacyMessageOutgoingStep(), PipelineRelativePosition.Before, typeof(SerializeOutgoingMessageStep)); pipeline = new PipelineStepInjector(pipeline) .OnSend(new MapLegacyHeadersOutgoingStep(), PipelineRelativePosition.Before, typeof(SendOutgoingMessageStep)); //pipeline = new PipelineStepInjector(pipeline) // .OnReceive(new HandleLegacySubscriptionRequestIncomingStep(c.Get<ISubscriptionStorage>(), c.Get<LegacySubscriptionMessageSerializer>()), PipelineRelativePosition.Before, typeof(MapLegacyHeadersIncomingStep)); return(pipeline); }); }