Example #1
0
 public async Task <CommandSendReceipt> Send(PulsarApi.MessageMetadata metadata, ReadOnlySequence <byte> payload)
 {
     metadata.ProducerName       = _cachedMetadata.ProducerName;
     _cachedSendPackage.Metadata = metadata;
     _cachedSendPackage.Payload  = payload;
     return(await SendPackage(metadata.SequenceId == 0));
 }
        public static void SetKey(this Metadata metadata, byte[]?key)
        {
            if (key is null)
            {
                return;
            }

            metadata.PartitionKey           = Convert.ToBase64String(key);
            metadata.PartitionKeyB64Encoded = true;
        }
        // Key
        public static byte[]? GetKeyAsBytes(this Metadata metadata)
        {
            if (metadata.PartitionKey is null)
            {
                return(null);
            }

            if (metadata.PartitionKeyB64Encoded)
            {
                return(Convert.FromBase64String(metadata.PartitionKey));
            }

            return(Encoding.UTF8.GetBytes(metadata.PartitionKey));
        }
Example #4
0
        public static ReadOnlySequence <byte> Serialize(BaseCommand command, PulsarApi.MessageMetadata metadata, ReadOnlySequence <byte> payload)
        {
            var commandBytes     = Serialize <BaseCommand>(command);
            var commandSizeBytes = ToBigEndianBytes((uint)commandBytes.Length);

            var metadataBytes     = Serialize(metadata);
            var metadataSizeBytes = ToBigEndianBytes((uint)metadataBytes.Length);

            var sb       = new SequenceBuilder <byte>().Append(metadataSizeBytes).Append(metadataBytes).Append(payload);
            var checksum = Crc32C.Calculate(sb.Build());

            return(sb.Prepend(ToBigEndianBytes(checksum))
                   .Prepend(Constants.MagicNumber)
                   .Prepend(commandBytes)
                   .Prepend(commandSizeBytes)
                   .Prepend(ToBigEndianBytes((uint)sb.Length))
                   .Build());
        }
Example #5
0
        public ProducerChannel(ulong id, string name, SequenceId sequenceId, IConnection connection)
        {
            _cachedMetadata = new PulsarApi.MessageMetadata
            {
                ProducerName = name
            };

            var commandSend = new CommandSend
            {
                ProducerId  = id,
                NumMessages = 1
            };

            _cachedSendPackage = new SendPackage(commandSend, _cachedMetadata);

            _id         = id;
            _sequenceId = sequenceId;
            _connection = connection;
        }
Example #6
0
        public ProducerStream(ulong id, string name, SequenceId sequenceId, Connection connection, IFaultStrategy faultStrategy, IProducerProxy proxy)
        {
            _cachedMetadata = new PulsarApi.MessageMetadata
            {
                ProducerName = name
            };

            var commandSend = new CommandSend
            {
                ProducerId  = id,
                NumMessages = 1
            };

            _cachedSendPackage = new SendPackage(commandSend, _cachedMetadata);

            _id            = id;
            _sequenceId    = sequenceId;
            _connection    = connection;
            _faultStrategy = faultStrategy;
            _proxy         = proxy;
        }
Example #7
0
        public Message Add(MessageIdData messageId, PulsarApi.MessageMetadata metadata, ReadOnlySequence <byte> data)
        {
            if (_trackBatches)
            {
                _batches.AddLast(new Batch(messageId, metadata.NumMessagesInBatch));
            }

            long index = 0;

            for (var i = 0; i < metadata.NumMessagesInBatch; ++i)
            {
                var singleMetadataSize = data.ReadUInt32(index, true);
                index += 4;
                var singleMetadata = Serializer.Deserialize <SingleMessageMetadata>(data.Slice(index, singleMetadataSize));
                index += singleMetadataSize;
                var singleMessageId = new MessageId(messageId.LedgerId, messageId.EntryId, messageId.Partition, i);
                var message         = new Message(singleMessageId, metadata, singleMetadata, data.Slice(index, singleMetadata.PayloadSize));
                _messages.Enqueue(message);
                index += (uint)singleMetadata.PayloadSize;
            }

            return(_messages.Dequeue());
        }
Example #8
0
 public SendPackage(CommandSend command, PulsarApi.MessageMetadata metadata)
 {
     Command  = command;
     Metadata = metadata;
 }
Example #9
0
        private async ValueTask <MessageId> InternalSend(PulsarApi.MessageMetadata metadata, ReadOnlySequence <byte> data, CancellationToken cancellationToken)
        {
            var response = await _channel.Send(metadata, data, cancellationToken).ConfigureAwait(false);

            return(response.MessageId.ToMessageId());
        }
Example #10
0
 public async ValueTask <MessageId> Send(PulsarApi.MessageMetadata metadata, ReadOnlySequence <byte> data, CancellationToken cancellationToken)
 => await _executor.Execute(() => InternalSend(metadata, data, cancellationToken), cancellationToken).ConfigureAwait(false);
 public static DateTimeOffset GetDeliverAtTimeAsDateTimeOffset(this Metadata metadata)
 => DateTimeOffset.FromUnixTimeMilliseconds(metadata.DeliverAtTime);
Example #12
0
 public Task <CommandSendReceipt> Send(PulsarApi.MessageMetadata metadata, byte[] payload) => throw GetException();
 public static void SetKey(this Metadata metadata, string?key)
 {
     metadata.PartitionKey           = key;
     metadata.PartitionKeyB64Encoded = false;
 }
 public static void SetEventTime(this Metadata metadata, DateTimeOffset timestamp)
 => metadata.EventTime = (ulong)timestamp.ToUnixTimeMilliseconds();
 public static DateTimeOffset GetEventTimeAsDateTimeOffset(this Metadata metadata)
 => DateTimeOffset.FromUnixTimeMilliseconds((long)metadata.EventTime);
 public static void SetEventTime(this Metadata metadata, DateTime timestamp)
 => metadata.SetEventTime(new DateTimeOffset(timestamp));
 // Event time
 public static DateTime GetEventTimeAsDateTime(this Metadata metadata)
 => metadata.GetEventTimeAsDateTimeOffset().UtcDateTime;
 public static void SetDeliverAtTime(this Metadata metadata, DateTimeOffset timestamp)
 => metadata.DeliverAtTime = timestamp.ToUnixTimeMilliseconds();
Example #19
0
 public Task <CommandSendReceipt> Send(PulsarApi.MessageMetadata metadata, ReadOnlySequence <byte> payload) => throw GetException();
Example #20
0
 public static byte[]? GetKeyAsBytes(this Metadata metadata)
 => metadata.PartitionKeyB64Encoded ? Convert.FromBase64String(metadata.PartitionKey) : null;