public LinkConsumerConfiguration( TimeSpan recoveryInterval, ushort prefetchCount, bool autoAck, int priority, bool cancelOnHaFailover, bool exclusive, ILinkConsumerTopologyHandler topologyHandler, LinkStateHandler<LinkConsumerState> stateHandler, ILinkConsumerErrorStrategy errorStrategy, LinkConsumerMessageHandlerDelegate<byte[]> messageHandler, ILinkSerializer serializer ) { if (recoveryInterval < TimeSpan.Zero) throw new ArgumentOutOfRangeException(nameof(recoveryInterval), "Must be greater than TimeSpan.Zero"); if(prefetchCount == 0) throw new ArgumentOutOfRangeException(nameof(prefetchCount), "Must be greater than 0"); RecoveryInterval = recoveryInterval; PrefetchCount = prefetchCount; AutoAck = autoAck; Priority = priority; CancelOnHaFailover = cancelOnHaFailover; Exclusive = exclusive; MessageHandler = messageHandler ?? throw new ArgumentNullException(nameof(messageHandler)); ErrorStrategy = errorStrategy ?? throw new ArgumentNullException(nameof(errorStrategy)); TopologyHandler = topologyHandler ?? throw new ArgumentNullException(nameof(topologyHandler)); StateHandler = stateHandler ?? throw new ArgumentNullException(nameof(stateHandler)); Serializer = serializer; }
public static LinkConsumerMessageHandlerBuilder Create( LinkConsumerMessageHandlerDelegate <byte[]> onMessage ) => new LinkConsumerMessageHandlerBuilder( (serializer, mapping) => onMessage, false, false );
public ILinkConsumerBuilder Handler(LinkConsumerMessageHandlerDelegate <object> value) { if (value == null) { throw new ArgumentNullException(nameof(value)); } return(new LinkConsumerBuilder( this, messageHandlerBuilder: LinkConsumerMessageHandlerBuilder.Create(value) )); }
public static LinkConsumerMessageHandlerBuilder Create( LinkConsumerMessageHandlerDelegate <object> onMessage ) => new LinkConsumerMessageHandlerBuilder( (serializer, mapping) => msg => { object body; var props = msg.Properties.Clone(); var typeName = props.Type; if (string.IsNullOrWhiteSpace(typeName)) { return(Task.FromException <LinkConsumerAckStrategy>(new LinkCosumerTypeNameMappingException())); } typeName = typeName.Trim(); var bodyType = mapping.Map(typeName); if (bodyType == null) { return(Task.FromException <LinkConsumerAckStrategy>( new LinkCosumerTypeNameMappingException(typeName))); } try { body = serializer.Deserialize(bodyType, msg.Body, props); } catch (Exception ex) { var sException = new LinkDeserializationException(msg, bodyType, ex); return(Task.FromException <LinkConsumerAckStrategy>(sException)); } var concreteMsg = LinkMessageFactory .ConstructConsumedMessage(bodyType, body, props, msg.RecieveProperties, msg.Cancellation); return(onMessage(concreteMsg)); }, true, true );
public ILinkConsumerBuilder Handler <TBody>(LinkConsumerMessageHandlerDelegate <TBody> value) where TBody : class { if (value == null) { throw new ArgumentNullException(nameof(value)); } if (typeof(TBody) == typeof(byte[])) { return(Handler(value as LinkConsumerMessageHandlerDelegate <byte[]>)); } if (typeof(TBody) == typeof(object)) { return(Handler(value as LinkConsumerMessageHandlerDelegate <object>)); } return(new LinkConsumerBuilder( this, messageHandlerBuilder: LinkConsumerMessageHandlerBuilder.Create(value) )); }
public static LinkConsumerMessageHandlerBuilder Create <TBody>( LinkConsumerMessageHandlerDelegate <TBody> onMessage ) where TBody : class { if (typeof(TBody) == typeof(byte[]) || typeof(TBody) == typeof(object)) { throw new ArgumentException("Type of TBody must be concrete and not equal byte[]"); } return(new LinkConsumerMessageHandlerBuilder( (serializer, mapping) => msg => { TBody body; var props = msg.Properties.Clone(); try { body = serializer.Deserialize <TBody>(msg.Body, props); } catch (Exception ex) { var sException = new LinkDeserializationException(msg, typeof(TBody), ex); return Task.FromException <LinkConsumerAckStrategy>(sException); } var concreteMsg = new LinkConsumedMessage <TBody>( body, props, msg.ReceiveProperties, msg.Cancellation ); return onMessage(concreteMsg); }, true, false )); }
public static LinkConsumerMessageHandlerBuilder Create( LinkConsumerMessageHandlerDelegate <object> onMessage ) => new LinkConsumerMessageHandlerBuilder(