public RabbitMqMessageConsumeTopology(IMessageTopology <TMessage> messageTopology, IMessageExchangeTypeSelector <TMessage> exchangeTypeSelector, IRabbitMqMessagePublishTopology <TMessage> publishTopology) { _messageTopology = messageTopology; _publishTopology = publishTopology; ExchangeTypeSelector = exchangeTypeSelector; _specifications = new List <IRabbitMqConsumeTopologySpecification>(); }
public async Task <ISendEndpoint> GetPublishSendEndpoint <T>(T message) where T : class { IRabbitMqMessagePublishTopology <T> publishTopology = _host.Topology.Publish <T>(); if (!publishTopology.TryGetPublishAddress(_host.Address, out var publishAddress)) { throw new PublishException($"An address for publishing message type {TypeMetadataCache<T>.ShortName} was not found."); } return(await _index.Get(new TypeKey(typeof(T), publishAddress), typeKey => CreateSendEndpoint(typeKey, publishTopology)).ConfigureAwait(false)); }
public Task <ISendTransport> CreatePublishTransport <T>(IModelContextSupervisor modelContextSupervisor) where T : class { LogContext.SetCurrentIfNull(_hostConfiguration.LogContext); IRabbitMqMessagePublishTopology <T> publishTopology = _topologyConfiguration.Publish.GetMessageTopology <T>(); var settings = publishTopology.GetSendSettings(_hostConfiguration.HostAddress); var brokerTopology = publishTopology.GetBrokerTopology(); IPipe <ModelContext> configureTopology = new ConfigureTopologyFilter <SendSettings>(settings, brokerTopology).ToPipe(); return(CreateSendTransport(modelContextSupervisor, configureTopology, publishTopology.Exchange.ExchangeName)); }
public Task <ISendTransport> CreatePublishTransport <T>() where T : class { IRabbitMqMessagePublishTopology <T> publishTopology = _hostTopology.Publish <T>(); var sendSettings = publishTopology.GetSendSettings(_hostConfiguration.HostAddress); var brokerTopology = publishTopology.GetBrokerTopology(); var supervisor = CreateModelContextSupervisor(); IPipe <ModelContext> pipe = new ConfigureTopologyFilter <SendSettings>(sendSettings, brokerTopology).ToPipe(); var transport = CreateSendTransport(supervisor, pipe, publishTopology.Exchange.ExchangeName); return(Task.FromResult(transport)); }
public Task <ISendTransport> GetPublishTransport <T>(Uri publishAddress) where T : class { IRabbitMqMessagePublishTopology <T> publishTopology = _publishTopology.GetMessageTopology <T>(); var sendSettings = publishTopology.GetSendSettings(); var brokerTopology = publishTopology.GetBrokerTopology(_publishTopology.BrokerTopologyOptions); IAgent <ModelContext> modelSource = GetModelSource(); var sendTransport = new RabbitMqSendTransport(modelSource, new ConfigureTopologyFilter <SendSettings>(sendSettings, brokerTopology), sendSettings.ExchangeName); _host.Add(sendTransport); return(Task.FromResult <ISendTransport>(sendTransport)); }
Task <CachedSendEndpoint <TypeKey> > CreateSendEndpoint <T>(TypeKey typeKey, IRabbitMqMessagePublishTopology <T> publishTopology) where T : class { var sendSettings = publishTopology.GetSendSettings(); var builder = new PublishEndpointBrokerTopologyBuilder(_host.Topology.PublishTopology.BrokerTopologyOptions); publishTopology.Apply(builder); var topology = builder.BuildTopologyLayout(); var modelCache = new RabbitMqModelCache(_host); var sendTransport = new RabbitMqSendTransport(modelCache, new ConfigureTopologyFilter <SendSettings>(sendSettings, topology), sendSettings.ExchangeName); sendTransport.ConnectSendObserver(_sendObservable); var sendEndpoint = new SendEndpoint(sendTransport, _serializer, typeKey.Address, _sourceAddress, SendPipe.Empty); return(Task.FromResult(new CachedSendEndpoint <TypeKey>(typeKey, sendEndpoint))); }