Esempio n. 1
0
        public void InitializeChannels(ReceiveLinkDescription[] receiveLinks)
        {
            InitializeConnectionAndSession();

            foreach (var link in receiveLinks)
            {
                // Some sanity checks first
                if (link.Type != LinkType.Receive) continue;
                if (!this.partitions.Contains(link.PartitionId.ToString()))
                {
                    throw new Exception(string.Format(
                        "Partition '{0}' does not exist in this event hub and cannot be initialized.",
                        link.PartitionId));
                }

                string partitionAddress = string.Format(
                    "{0}/ConsumerGroups/{1}/Partitions/{2}",
                    this.settings.EventHubName,
                    link.ConsumerGroup,
                    link.PartitionId);

                var filters = BuildFilter(link);
                var amqpLink = new ReceiverLink(
                   this.amqpSession,
                   string.Format("receiver-{0}-{1}", this.Name, link.PartitionId),
                   new Source()
                   {
                       Address = partitionAddress,
                       FilterSet = filters
                   },
                   null);

                this.channels.Add(link.Name, new ReceiveChannel()
                {
                    Connection = amqpConnection,
                    Session = amqpSession,
                    Link = amqpLink,
                    Name = link.Name,
                    PartitionId = link.PartitionId.ToString()
                });
            }
        }
Esempio n. 2
0
        protected Map BuildFilter(ReceiveLinkDescription receiveLink)
        {
            string filter = string.Empty;
            Map filters = null;

            if (receiveLink.SequenceCheckPoint > -1)
            {
                filter = string.Format(
                "amqp.annotation.x-opt-offset > {0}",
                receiveLink.SequenceCheckPoint);
            }
            else if (receiveLink.TimeCheckPoint > DateTime.MinValue)
            {
                // Get milliseconds since start of 1970
                long msOffset = (long)receiveLink.TimeCheckPoint.Subtract(
                    new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds;
                filter = string.Format(
                    "amqp.annotation.x-opt-enqueuedtimeutc > {0}",
                    msOffset);
            }

            if (!string.IsNullOrWhiteSpace(filter))
            {
                filters = new Map();
                    filters.Add(new Symbol("apache.org:selector-filter:string"),
                        new DescribedValue(
                            new Symbol("apache.org:selector-filter:string"),
                            filter));
            }

            return filters;
        }