public void PublishBatch <T>(IEnumerable <T> enumerable, PublishOptions options)
        {
            var activity = MessageDiagnostics.StartMessageOut(options);

            try
            {
                var context = CreateContext <T>(options);

                var batch    = _model.CreateBasicPublishBatch();
                var messages = _serialization.SerializeBatch(enumerable, context.Properties.ContentType);
                foreach (var obj in messages)
                {
                    batch.Add(
                        exchange: context.Exchange,
                        body: obj,
                        mandatory: false,
                        properties: context.Properties,
                        routingKey: context.RoutingKey
                        );
                }

                batch.Publish();
            }
            finally
            {
                MessageDiagnostics.StopMessageOut(activity, options);
            }
        }
示例#2
0
        public byte[] Serialize <T>(T obj, string?mimeType = null)
        {
            var activity = MessageDiagnostics.StartMessageSerialize();

            var serializer = GetSerializer(mimeType);
            var result     = serializer.Serialize(obj);

            MessageDiagnostics.StopMessageSerialize(activity);

            return(result);
        }
示例#3
0
        public T Deserialize <T>(byte[] body, string?mimeType = null)
        {
            var activity = MessageDiagnostics.StartMessageDeserialize();

            var serializer = GetSerializer(mimeType);
            var obj        = serializer.Deserialize <T>(body);

            MessageDiagnostics.StopMessageDeserialize(activity);

            return(obj);
        }
示例#4
0
        public List <byte[]> SerializeBatch <T>(IEnumerable <T> enumerable, string?mimeType = null)
        {
            var activity = MessageDiagnostics.StartMessageSerialize();

            var serializer = GetSerializer(mimeType);
            var list       = new List <byte[]>();

            foreach (var item in enumerable)
            {
                list.Add(serializer.Serialize(item));
            }

            MessageDiagnostics.StopMessageSerialize(activity);

            return(list);
        }
        public void Publish <T>(T obj, PublishOptions options)
        {
            var activity = MessageDiagnostics.StartMessageOut(options);

            try
            {
                var context = CreateContext <T>(options);

                _model.BasicPublish(
                    basicProperties: context.Properties,
                    body: _serialization.Serialize(obj, context.Properties.ContentType),
                    exchange: context.Exchange,
                    routingKey: context.RoutingKey
                    );
            }
            finally
            {
                MessageDiagnostics.StopMessageOut(activity, options);
            }
        }
        public ISubscription Subscribe <T>(Func <T, MessageContext, Task> callback, SubscriptionOptions?options = null)
        {
            var autoAck  = options?.AutoAck ?? true;
            var exchange = options?.Exchange ?? _config.DefaultExchange;

            if (exchange is null)
            {
                throw new InvalidExchangeException();
            }

            var model = CreateModel();

            EnsureExchangeCreated(model, exchange, options.ExchangeType());
            var queueName = EnsureQueueCreated(model, exchange, options?.Queue, options?.RoutingKeys);

            var consumer    = new AsyncEventingBasicConsumer(model);
            var consumerTag = model.BasicConsume(queue: queueName, autoAck: autoAck, consumer: consumer);

            consumer.Received += async(_, eventArgs) =>
            {
                var context  = new MessageContext(eventArgs, autoAck, model);
                var activity = MessageDiagnostics.StartMessageIn(context);

                try
                {
                    var obj = _serialization.Deserialize <T>(eventArgs.Body, eventArgs.BasicProperties.ContentType);
                    await callback(obj, context);
                }
                finally
                {
                    MessageDiagnostics.StopMessageIn(activity, context);
                }
            };

            return(new SubscriptionImpl(model, consumerTag));
        }