Ejemplo n.º 1
0
        private async Task BroadcastCommandMessageToPartition(BrokeredMessage bm, Partition partition, int[] relativeIds)
        {
            TopicClient forwardClient    = null;
            var         connectionString = ServiceBusConnection.FromIssuer(partition.Namespace, partition.Owner, partition.OwnerSecret);
            var         controlMessage   = bm.GetBody <ControlMessage>();
            var         commandMessage   = new CommandMessage {
                Command = controlMessage.Command, Parameters = controlMessage.Parameters
            };

            foreach (var topicName in relativeIds.Select(id => string.Format(PARTITION_COMMAND_TOPIC, id)))
            {
                try
                {
                    forwardClient = TopicClient.CreateFromConnectionString(connectionString, topicName);

                    using (var forwardMessage = new BrokeredMessage(commandMessage)
                    {
                        ContentType = CommandMessage.CONTENT_TYPE
                    })
                    {
                        forwardMessage.Properties[MessageProperty.BROADCAST] = 0;
                        forwardMessage.ReplyTo = bm.ReplyTo;

                        await _messagingPolicy.ExecuteAsync(() => forwardClient.SendAsync(forwardMessage));
                    }
                }
                finally
                {
                    if (forwardClient != null)
                    {
                        _catchAllPolicy.Execute(() => { forwardClient.Close(); });
                    }
                }
            }
        }
Ejemplo n.º 2
0
        public async Task SendEventAsync(EventMessage eventMessage)
        {
            AssertThingsAccess();

            if (eventMessage == null)
            {
                throw new ArgumentNullException("eventMessage");
            }

            using (var bm = new BrokeredMessage(eventMessage)
            {
                ContentType = EventMessage.CONTENT_TYPE
            })
            {
                bm.ReplyTo = _from.ToString();
                await _messagingPolicy.ExecuteAsync(() => _topicClient.SendAsync(bm));
            }
        }