Ejemplo n.º 1
0
        public async Task Execute(IMessagingRoot root, IChannelCallback channel, Envelope envelope,
                                  IQueuedOutgoingMessages messages,
                                  DateTime utcNow)
        {
            root.MessageLogger.NoHandlerFor(envelope);

            foreach (var handler in _handlers)
            {
                try
                {
                    await handler.Handle(envelope, root);
                }
                catch (Exception e)
                {
                    root.MessageLogger.LogException(e);
                }
            }

            if (envelope.AckRequested)
            {
                await root.Acknowledgements.SendAcknowledgement(envelope);
            }

            await channel.Complete(envelope);

            envelope.MarkCompletion(false);

            // These two lines are important to make the message tracking work
            // if there is no handler
            root.MessageLogger.ExecutionFinished(envelope);
            root.MessageLogger.MessageSucceeded(envelope);
        }
Ejemplo n.º 2
0
        public void Start(IMessagingRoot root)
        {
            var settings = root.Options;

            _settings = settings;
            _logger   = root.Logger;
            _root     = root;

            organizeTransports(settings, root.Transports);

            assertNoUnknownTransportsInSubscribers(settings);


            assertNoUnknownTransportsInListeners(settings);

            foreach (var transport in root.Transports)
            {
                transport.StartListening(root);
            }

            buildInitialSendingAgents(root);


            GetOrBuild(TransportConstants.RetryUri);
        }
Ejemplo n.º 3
0
        protected internal ISendingAgent StartSending(IMessagingRoot root, ITransportRuntime runtime,
                                                      Uri replyUri)
        {
            var sender = root.Settings.StubAllOutgoingExternalSenders ? new NulloSender(Uri) : CreateSender(root);

            return(runtime.AddSubscriber(replyUri, sender, this));
        }
Ejemplo n.º 4
0
 public override void Initialize(IMessagingRoot root)
 {
     if (AutoProvision)
     {
         InitializeAllObjects();
     }
 }
Ejemplo n.º 5
0
        public void StartListening(IMessagingRoot root)
        {
            var settings = root.Settings;

            if (settings.StateFor(Protocol) == TransportState.Disabled)
            {
                return;
            }

            WorkerQueue = root.Workers;

            var incoming = settings.Listeners.Where(x => x.Scheme == Protocol).ToArray();

            incoming = validateAndChooseReplyChannel(incoming);

            foreach (var uri in incoming)
            {
                var agent = buildListeningAgent(uri, settings);
                agent.Status = _status;

                var listener = uri.IsDurable()
                    ? _durableMessagingFactory.BuildListener(agent, root)
                    : new LightweightListener(WorkerQueue, logger, agent);

                _listeners.Add(listener);

                listener.Start();
            }
        }
Ejemplo n.º 6
0
 public override void Initialize(IMessagingRoot root)
 {
     if (ConnectionString.IsEmpty() && _endpoints.Any())
     {
         throw new InvalidOperationException("No connection string for Azure Service Bus has been configured, or is empty");
     }
 }
Ejemplo n.º 7
0
 public void StartListeners(IMessagingRoot root, ITransportRuntime runtime)
 {
     foreach (var endpoint in endpoints())
     {
         endpoint.StartListening(root, runtime);
     }
 }
Ejemplo n.º 8
0
 void ITransport.StartSenders(IMessagingRoot root, ITransportRuntime runtime)
 {
     foreach (var queue in _queues)
     {
         addQueue(root, runtime, queue);
     }
 }
Ejemplo n.º 9
0
 public void StartListeners(IMessagingRoot root, ITransportRuntime runtime)
 {
     foreach (var listener in _listeners)
     {
         Endpoints.FillDefault(listener);
     }
 }
Ejemplo n.º 10
0
        public void Start(IMessagingRoot root, CapabilityGraph capabilities)
        {
            var settings = root.Settings;

            _lookups  = root.Lookup;
            _settings = settings;
            _logger   = root.Logger;
            _root     = root;

            organizeTransports(settings, root.Transports);

            assertNoUnknownTransportsInSubscribers(settings);


            assertNoUnknownTransportsInListeners(settings);

            foreach (var transport in root.Transports)
            {
                transport.StartListening(root);
            }

            buildInitialSendingAgents(root);



            GetOrBuildChannel(TransportConstants.RetryUri);

            SystemReplyUri =
                capabilities.DefaultReceiverLocation
                ?? tryGetReplyUri("http")
                ?? tryGetReplyUri("tcp")
                ?? _transports.Values.FirstOrDefault(x => x.LocalReplyUri != null)?.LocalReplyUri;
        }
Ejemplo n.º 11
0
        public static async Task <int> put__messages_durable(HttpRequest request, ILocalWorkerSender workers,
                                                             IMessageLogger logger, IMessagingRoot root)
        {
            if (root.ListeningStatus == ListeningStatus.TooBusy)
            {
                return(503);
            }

            try
            {
                // TODO -- optimize the reading here to reduce allocations
                var bytes = await request.Body.ReadBytesAsync(request.ContentLength);

                var envelopes = Envelope.ReadMany(bytes);

                await workers.EnqueueDurably(envelopes);

                return(200);
            }
            catch (Exception e)
            {
                var message = $"Error receiving envelopes from {request.Headers["x-jasper-envelope-sender"]}";
                logger.LogException(e, message: message);

                return(500);
            }
        }
Ejemplo n.º 12
0
            public Task Handle(Envelope envelope, IMessagingRoot root)
            {
                Recorded.Add(envelope);

                root.ShouldNotBeNull();

                return(Task.CompletedTask);
            }
Ejemplo n.º 13
0
 private ISendingAgent buildAgent(LocalQueueSettings queue, IMessagingRoot root)
 {
     return(queue.IsDurable
         ? (ISendingAgent) new DurableLocalSendingAgent(queue, root.Pipeline, root.Settings, root.Persistence,
                                                        root.TransportLogger, root.Serialization, root.MessageLogger)
         : new LightweightLocalSendingAgent(queue, root.TransportLogger, root.Pipeline, root.Settings,
                                            root.MessageLogger));
 }
Ejemplo n.º 14
0
 protected override ISender CreateSender(IMessagingRoot root)
 {
     if (Parent.ConnectionString == null)
     {
         throw new InvalidOperationException("There is no configured connection string for Azure Service Bus, or it is empty");
     }
     return(new AzureServiceBusSender(this, Parent));
 }
Ejemplo n.º 15
0
        public override void AddRoute(MessageTypeRouting routing, IMessagingRoot root)
        {
            if (Agent == null)
            {
                throw new InvalidOperationException($"The agent has not been initialized for this endpoint");
            }

            routing.AddStaticRoute(Agent);
        }
Ejemplo n.º 16
0
        public void StartSenders(IMessagingRoot root, ITransportRuntime runtime)
        {
            var replyUri = ReplyEndpoint()?.ReplyUri();

            foreach (var endpoint in endpoints().Where(x => x.Subscriptions.Any()))
            {
                endpoint.StartSending(root, runtime, replyUri);
            }
        }
Ejemplo n.º 17
0
        public override void AddRoute(MessageTypeRouting routing, IMessagingRoot root)
        {
            if (Agent == null)
            {
                throw new InvalidOperationException();
            }

            routing.AddStaticRoute(Agent);
        }
Ejemplo n.º 18
0
 public MessageRouter(IMessagingRoot root, HandlerGraph handlers)
 {
     _serializers = root.Serialization;
     _subscribers = root.Subscribers;
     _handlers    = handlers;
     _logger      = root.Logger;
     _settings    = root.Settings;
     _workers     = _handlers.Workers;
 }
Ejemplo n.º 19
0
        public override object Resolve(Scope scope)
        {
            if (_root == null)
            {
                _root = scope.GetInstance <IMessagingRoot>();
            }

            return(_root.NewContext());
        }
Ejemplo n.º 20
0
        public void StartListening(IMessagingRoot root)
        {
            _sockets = new WebSocketCollection(root.Workers);

            foreach (var messageType in _handlers.Chains.Select(x => x.MessageType).Where(x => x.CanBeCastTo <ClientMessage>()))
            {
                JsonSerialization.RegisterType(messageType.ToMessageTypeName(), messageType);
            }
        }
Ejemplo n.º 21
0
 public TopicRoute(ITopicRule rule, WriterCollection <IMessageSerializer> writers, ITopicRouter router,
                   IMessagingRoot root, MessageTypeRouting messageTypeRouting)
 {
     _rule               = rule;
     _writers            = writers;
     _router             = router;
     _root               = root;
     _messageTypeRouting = messageTypeRouting;
 }
Ejemplo n.º 22
0
        public HandlerPipeline(MessagingSerializationGraph serializers, HandlerGraph graph, IMessageLogger logger,
                               IEnumerable <IMissingHandler> missingHandlers, IMessagingRoot root)
        {
            _serializer      = serializers;
            _graph           = graph;
            _root            = root;
            _missingHandlers = missingHandlers.ToArray();

            Logger = logger;
        }
Ejemplo n.º 23
0
        private ISendingAgent addQueue(IMessagingRoot root, ITransportRuntime runtime, LocalQueueSettings queue)
        {
            queue.Agent = buildAgent(queue, root);
            _agents     = _agents.AddOrUpdate(queue.Name, buildAgent(queue, root));

            runtime.AddSendingAgent(buildAgent(queue, root));
            runtime.AddSubscriber(queue);

            return(queue.Agent);
        }
Ejemplo n.º 24
0
        protected internal override void StartListening(IMessagingRoot root, ITransportRuntime runtime)
        {
            if (!IsListener)
            {
                return;
            }

            var listener = new RabbitMqListener(root.TransportLogger, this, Parent);

            runtime.AddListener(listener, this);
        }
Ejemplo n.º 25
0
        protected internal override void StartListening(IMessagingRoot root, ITransportRuntime runtime)
        {
            if (!IsListener)
            {
                return;
            }

            var listener = createListener(root);

            runtime.AddListener(listener, this);
        }
Ejemplo n.º 26
0
        public void StartSenders(IMessagingRoot root, ITransportRuntime runtime)
        {
            var pipeline = root.Pipeline;

            foreach (var endpoint in Endpoints)
            {
                endpoint.Start(pipeline, root.MessageLogger);

                runtime.AddSubscriber(endpoint);
            }
        }
Ejemplo n.º 27
0
        protected internal override void StartListening(IMessagingRoot root, ITransportRuntime runtime)
        {
            if (!IsListener)
            {
                return;
            }

            var listener = new ConfluentKafkaListener(this, root.TransportLogger, root.Cancellation);

            runtime.AddListener(listener, this);
        }
Ejemplo n.º 28
0
        public HandlerPipeline(MessagingSerializationGraph serializers, HandlerGraph graph, IMessageLogger logger,
                               NoHandlerContinuation noHandlers, IMessagingRoot root)
        {
            _serializer   = serializers;
            _graph        = graph;
            _noHandlers   = noHandlers;
            _root         = root;
            _cancellation = root.Cancellation;

            Logger = logger;
        }
Ejemplo n.º 29
0
        public MessageTypeRouting(Type messageType, IMessagingRoot root)
        {
            Writers         = root.Serialization.WriterFor(messageType);
            MessageType     = messageType;
            MessageTypeName = messageType.ToMessageTypeName();
            _customizations = _customizations.AddRange(findMessageTypeCustomizations(messageType));

            LocalQueue = determineLocalSendingAgent(messageType, root);

            _root = root;
        }
Ejemplo n.º 30
0
 public void StartListening(IMessagingRoot root)
 {
     if (_runtime.HttpAddresses.Any())
     {
         var candidate = _runtime.HttpAddresses.Select(x => x.ToUri()).FirstOrDefault(x => x.Host == "localhost" || x.Host == "127.0.0.1")?.ToMachineUri();
         if (candidate != null)
         {
             LocalReplyUri = candidate.ToString().TrimEnd('/').AppendUrl(_httpSettings.RelativeUrl).ToUri();
         }
     }
 }