示例#1
0
        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));
        }
示例#4
0
        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));
        }
示例#5
0
        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)));
        }