// ReSharper disable once SuggestBaseTypeForParameter async Task Dispatch(MulticastTransportOperation transportOperation, HashSet <string> messageIdsOfMulticastedEvents) { var message = await PrepareMessage <SnsPreparedMessage>(transportOperation, messageIdsOfMulticastedEvents) .ConfigureAwait(false); if (message == null) { return; } if (string.IsNullOrEmpty(message.Destination)) { return; } var publishRequest = message.ToPublishRequest(); if (Logger.IsDebugEnabled) { Logger.Debug($"Publishing message with '{message.MessageId}' to topic '{publishRequest.TopicArn}'"); } await snsClient.PublishAsync(publishRequest) .ConfigureAwait(false); if (Logger.IsDebugEnabled) { Logger.Debug($"Published message with '{message.MessageId}' to topic '{publishRequest.TopicArn}'"); } }
Task PublishMessage(MulticastTransportOperation transportOperation) { var messageWrapper = BuildMessageWrapper(transportOperation, TimeSpan.MaxValue, transportOperation.MessageType.ToString()); var topicsToSendTo = SubscriptionManager.GetTypeHierarchy(transportOperation.MessageType); var messageStream = new MemoryStream(); KafkaTransportInfrastructure.GetSerializer().Serialize(messageWrapper, messageStream); var publishTasks = new List <Task>(topicsToSendTo.Count); foreach (var t in topicsToSendTo) { Logger.Debug("Publish to " + t); var topic = producerFactory.GetProducer().Topic(t); publishTasks.Add(topic.Produce(messageStream.ToArray()) .ContinueWith( result => Logger.Info("new partition and offset: " + result.Result.Partition + " " + result.Result.Offset), TaskContinuationOptions.ExecuteSynchronously)); } return(Task.WhenAll(publishTasks)); }
Task PublishMessage(MulticastTransportOperation transportOperation, ConfirmsAwareChannel channel) { var message = transportOperation.Message; var properties = channel.CreateBasicProperties(); properties.Fill(message, transportOperation.DeliveryConstraints, channel.SupportsDelayedDelivery, out _); return(channel.PublishMessage(transportOperation.MessageType, message, properties)); }
Task PublishMessage(MulticastTransportOperation transportOperation, ConfirmsAwareChannel channel, CancellationToken cancellationToken) { var message = transportOperation.Message; var properties = channel.CreateBasicProperties(); properties.Fill(message, transportOperation.Properties); return(channel.PublishMessage(transportOperation.MessageType, message, properties, cancellationToken)); }
public void Should_not_share_constraints_when_not_provided() { var transportOperation = new MulticastTransportOperation(new OutgoingMessage(Guid.NewGuid().ToString(), new Dictionary <string, string>(), new byte[0]), typeof(Guid), new DispatchProperties()); var secondTransportOperation = new MulticastTransportOperation(new OutgoingMessage(Guid.NewGuid().ToString(), new Dictionary <string, string>(), new byte[0]), typeof(Guid), new DispatchProperties()); transportOperation.Properties.DiscardIfNotReceivedBefore = new DiscardIfNotReceivedBefore(TimeSpan.FromDays(1)); Assert.IsEmpty(secondTransportOperation.Properties); Assert.IsNotEmpty(transportOperation.Properties); }
async Task ApplyMulticastOperationMappingIfNecessary(MulticastTransportOperation transportOperation, SnsPreparedMessage snsPreparedMessage) { if (transportOperation == null || snsPreparedMessage == null) { return; } var existingTopicArn = await topicCache.GetTopicArn(transportOperation.MessageType).ConfigureAwait(false); snsPreparedMessage.Destination = existingTopicArn; }
private void DispatchMulticastMessage(MulticastTransportOperation multicastTransportOperation) { try { MessagePublished?.Invoke(multicastTransportOperation); } catch (Exception e) { Console.WriteLine(e); } }
public async Task <List <UnicastTransportOperation> > Convert(MulticastTransportOperation transportOperation) { var subscribers = await subscriptions.GetSubscribers(transportOperation.MessageType).ConfigureAwait(false); return((from subscriber in subscribers select new UnicastTransportOperation( transportOperation.Message, subscriber, transportOperation.RequiredDispatchConsistency, transportOperation.DeliveryConstraints )).ToList()); }
Task PublishMessage(MulticastTransportOperation transportOperation, ConfirmsAwareChannel channel, RabbitMQMessagePriority priority) { var message = transportOperation.Message; var properties = channel.CreateBasicProperties(); properties.Fill(message, transportOperation.DeliveryConstraints, out _); if (priority != null) { properties.Priority = priority.Priority; } return(channel.PublishMessage(transportOperation.MessageType, message, properties)); }
async Task<IEnumerable<UnicastTransportOperation>> ConvertTo(MulticastTransportOperation transportOperation, CancellationToken cancellationToken) { var subscribers = await subscriptionStore.GetSubscribers(transportOperation.MessageType, cancellationToken) .ConfigureAwait(false); return from subscriber in subscribers select new UnicastTransportOperation( transportOperation.Message, subscriber, transportOperation.Properties, transportOperation.RequiredDispatchConsistency ); }
private void DispatcherOnMessagePublished(MulticastTransportOperation operation) { Dictionary <string, MessagePump> subscribers = new Dictionary <string, MessagePump>(); foreach (var infrastructure in infrastructures) { if (infrastructure.SubscriptionManager.subscriptions.Any(subscription => subscription.IsAssignableFrom(operation.MessageType))) { subscribers[infrastructure.MainPump.inputQueue] = infrastructure.MainPump; } } foreach (var subscriber in subscribers.Values) { Task.Run(() => subscriber.Push(operation.Message.Body, operation.Message.MessageId, operation.Message.Headers)); } }
async Task PublishMessage(MulticastTransportOperation transportOperation) { var messageWrapper = BuildMessageWrapper(transportOperation, TimeSpan.MaxValue, transportOperation.MessageType.ToString()); var topicsToSendTo = SubscriptionManager.GetTypeHierarchy(transportOperation.MessageType); var messageStream = new MemoryStream(); KafkaTransportInfrastructure.GetSerializer().Serialize(messageWrapper, messageStream); foreach (var t in topicsToSendTo) { Logger.Debug("Publish to " + t); var topic = producerFactory.GetProducer().Topic(t); await topic.Produce(messageStream.ToArray()).ContinueWith(result => Logger.Info("new partition and offset: " + result.Result.Partition + " " + result.Result.Offset)); } }
async Task SendMessage(MulticastTransportOperation transportOperation) { var generateRoutingKey = DefaultRoutingKeyConvention.GenerateRoutingKey(transportOperation.MessageType); var publisher = await PublisherClient.CreateAsync(); var message = transportOperation.Message; var transportMessage = new PubsubMessage { MessageId = message.MessageId, Data = ByteString.CopyFrom(message.Body) }; transportMessage.Attributes.Add(message.Headers); await publisher.PublishAsync(new TopicName(projectId, generateRoutingKey), new[] { transportMessage }) .ConfigureAwait(false); }
public Task <List <UnicastTransportOperation> > Convert(MulticastTransportOperation transportOperation, CancellationToken cancellationToken = default) { return(Task.FromResult(new List <UnicastTransportOperation>())); }
public Task <List <UnicastTransportOperation> > Convert(MulticastTransportOperation transportOperation) { return(Task.FromResult(new List <UnicastTransportOperation>())); }