예제 #1
0
        public virtual IMessage Deserialize <T>(AmqpMessage amqpMessage) where T : class
        {
            IAmqpSerializer amqpDeserializer = this.serializerFactory.CreateSerializer(amqpMessage.Properties.ContentType);
            T payload = amqpDeserializer.Deserialize <T>(amqpMessage);
            IDictionary <string, string> headers = this.propertyBuilder.BuildHeadersFromProperties(amqpMessage.Properties);

            return(new Message <T>(payload, new Dictionary <string, string>(headers)));
        }
예제 #2
0
        public void CreateAmqpSerializerWithDefaultSerializerIfMessageContentTypeWasNotFilled()
        {
            var serializers = GetAmqpSerializers();
            var message     = A.Fake <IMessage>();
            var sut         = new AmqpSerializerFactory(new ReadOnlyDictionary <string, IAmqpSerializer>(serializers));

            IAmqpSerializer serializer = sut.CreateSerializer(message);

            serializer.Should().BeOfType <SimpleSerializer>(because: "factory should return default serializer");
        }
예제 #3
0
        public virtual AmqpMessage Serialize(IMessage message)
        {
            IAmqpProperties properties   = this.propertyBuilder.BuildPropertiesFromHeaders(message.Headers);
            string          exchangeName = this.router.GetExchange(message);
            string          routingKey   = this.router.GetRoutingKey(message);

            IAmqpSerializer amqpSerializer = this.serializerFactory.CreateSerializer(message);

            byte[] payload = amqpSerializer.Serialize(message);

            return(new AmqpMessage(properties, exchangeName, routingKey, payload));
        }
예제 #4
0
        public void DefaultSerializerShouldBeChooIfSerializerByContentTypeWasNowFound()
        {
            var serializers = GetAmqpSerializers();
            var message     = A.Fake <IMessage>();

            A.CallTo(() => message.Headers).Returns(new Dictionary <string, string>
            {
                { "content-type", "application/x-binary" }
            });
            var sut = new AmqpSerializerFactory(new ReadOnlyDictionary <string, IAmqpSerializer>(serializers));

            IAmqpSerializer serializer = sut.CreateSerializer(message);

            serializer.Should().BeOfType <SimpleSerializer>(because: "factory should return default serializer");
        }
예제 #5
0
        public void CreateAmqpSerializerWithCustomSerializerDeterminedByContentType()
        {
            var serializers = GetAmqpSerializers();
            var message     = A.Fake <IMessage>();

            A.CallTo(() => message.Headers).Returns(new Dictionary <string, string>
            {
                { "content-type", "application/json" }
            });
            var sut = new AmqpSerializerFactory(new ReadOnlyDictionary <string, IAmqpSerializer>(serializers));

            IAmqpSerializer serializer = sut.CreateSerializer(message);

            serializer.Should().BeOfType <JsonSerializer>(because: "factory should not return default serializer");
        }
예제 #6
0
        public IAmqpSubscriptionBuilder WithSerializer(string contentType, IAmqpSerializer serializer)
        {
            this.Serializers.Add(contentType, serializer);

            return(this);
        }
예제 #7
0
        public IAmqpPublishingBuilder WithDeserializer(string contentType, IAmqpSerializer serializer)
        {
            this.Serializers.Add(contentType, serializer);

            return(this);
        }