Ejemplo n.º 1
0
        protected override void Given()
        {
            Config  = Substitute.For <IMessagingConfig>();
            Monitor = Substitute.For <IMessageMonitor>();

            Logging.ToConsole();
        }
Ejemplo n.º 2
0
 protected override Task Given()
 {
     Config        = Substitute.For <IMessagingConfig>();
     Monitor       = Substitute.For <IMessageMonitor>();
     LoggerFactory = Substitute.For <ILoggerFactory>();
     return(Task.CompletedTask);
 }
Ejemplo n.º 3
0
        /// <summary>
        /// Creates a new instance of <see cref="IMessagingBus"/>.
        /// </summary>
        /// <returns>
        /// The created instance of <see cref="IMessagingBus"/>
        /// </returns>
        public IMessagingBus BuildSubscribers()
        {
            IMessagingConfig config = CreateConfig();

            config.Validate();

            ILoggerFactory loggerFactory =
                ServicesBuilder?.LoggerFactory?.Invoke() ?? ServiceResolver.ResolveService <ILoggerFactory>();

            JustSayingBus      bus    = CreateBus(config, loggerFactory);
            JustSayingFluently fluent = CreateFluent(bus, loggerFactory);

            if (ServicesBuilder?.NamingStrategy != null)
            {
                fluent.WithNamingStrategy(ServicesBuilder.NamingStrategy);
            }

            if (ServicesBuilder?.MessageContextAccessor != null)
            {
                fluent.WithMessageContextAccessor(ServicesBuilder.MessageContextAccessor());
            }

            if (SubscriptionBuilder != null)
            {
                SubscriptionBuilder.Configure(fluent);
            }

            return(bus);
        }
Ejemplo n.º 4
0
        private JustSayingBus CreateBus(IMessagingConfig config, ILoggerFactory loggerFactory)
        {
            IMessageSerializationRegister register =
                ServicesBuilder?.SerializationRegister?.Invoke() ?? ServiceResolver.ResolveService <IMessageSerializationRegister>();

            return(new JustSayingBus(config, register, loggerFactory));
        }
Ejemplo n.º 5
0
        private JustSayingBus CreateBus(IMessagingConfig config, ILoggerFactory loggerFactory)
        {
            IMessageSerializationRegister register = ServiceResolver.ResolveService <IMessageSerializationRegister>();
            IMessageMonitor monitor = ServiceResolver.ResolveOptionalService <IMessageMonitor>() ?? new NullOpMessageMonitor();

            var bus = new JustSayingBus(config, register, loggerFactory, monitor);

            return(bus);
        }
        private JustSayingBus CreateBus(IMessagingConfig config, ILoggerFactory loggerFactory)
        {
            IMessageSerializationRegister register =
                ServicesBuilder?.SerializationRegister?.Invoke() ?? ServiceResolver.ResolveService <IMessageSerializationRegister>();

            var bus = new JustSayingBus(config, register, loggerFactory);

            bus.Monitor = CreateMessageMonitor();
            bus.MessageContextAccessor = CreateMessageContextAccessor();

            return(bus);
        }
Ejemplo n.º 7
0
        public JustSayingBus(IMessagingConfig config, IMessageSerialisationRegister serialisationRegister, ILoggerFactory loggerFactory)
        {
            _log = loggerFactory.CreateLogger("JustSaying");

            Config  = config;
            Monitor = new NullOpMessageMonitor();

            _subscribersByRegionAndQueue = new Dictionary <string, Dictionary <string, INotificationSubscriber> >();
            _publishersByRegionAndTopic  = new Dictionary <string, Dictionary <string, IMessagePublisher> >();
            SerialisationRegister        = serialisationRegister;
            _publishers  = new HashSet <IPublisher>();
            _subscribers = new HashSet <ISubscriber>();
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Creates a new instance of <see cref="IMessagingBus"/>.
        /// </summary>
        /// <returns>
        /// The created instance of <see cref="IMessagingBus"/>
        /// </returns>
        public IMessagingBus BuildSubscribers()
        {
            IMessagingConfig config = MessagingConfig.Build();

            config.Validate();

            ILoggerFactory loggerFactory = ServiceResolver.ResolveService <ILoggerFactory>();

            JustSayingBus          bus     = CreateBus(config, loggerFactory);
            IAwsClientFactoryProxy proxy   = CreateFactoryProxy();
            IVerifyAmazonQueues    creator = new AmazonQueueCreator(proxy, loggerFactory);

            SubscriptionBuilder.Configure(bus, ServiceResolver, creator, proxy, loggerFactory);

            return(bus);
        }
Ejemplo n.º 9
0
        private static readonly Logger Log = LogManager.GetLogger("JustSaying"); //ToDo: danger!

        public JustSayingBus(IMessagingConfig config, IMessageSerialisationRegister serialisationRegister)
        {
            if (config.PublishFailureReAttempts == 0)
            {
                Log.Warn("You have not set a re-attempt value for publish failures. If the publish location is 'down' you may loose messages!");
            }

            Log.Info(string.Format("Registering with stack."));

            Config  = config;
            Monitor = new NullOpMessageMonitor();

            _notificationSubscribers = new Dictionary <string, INotificationSubscriber>();
            _messagePublishers       = new Dictionary <string, Dictionary <Type, IMessagePublisher> >();
            SerialisationRegister    = serialisationRegister;
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Gets the next informed queue's message.
        /// Once the message is dequeued, it is deleted from the queue.
        /// Depending on the service, this method may take a few seconds to return, waiting for new messages before completion.
        /// If no message is found, returns null.
        /// </summary>
        /// <param name="config">The queue configuration.</param>
        /// <exception cref="InvalidOperationException">Occurs when the connection to the server fails.</exception>
        public static string Dequeue(string queueName, IMessagingConfig config)
        {
            queueName = queueName.ToLower();
            Utils.ValidateQueueName(queueName, true);
            string message = null;

            using (var client = new Messaging(config))
            {
                var transporter = client.GetTransporter(queueName);
                transporter.DequeueSingleMessage(queueName, (msg) =>
                {
                    message = msg;
                    return(true);
                });
            }
            return(message);
        }
Ejemplo n.º 11
0
        /// <summary>
        /// Creates a new instance of <see cref="IMessagePublisher"/>.
        /// </summary>
        /// <returns>
        /// The created instance of <see cref="IMessagePublisher"/>
        /// </returns>
        public IMessagePublisher BuildPublisher()
        {
            IMessagingConfig config = MessagingConfig.Build();

            config.Validate();

            ILoggerFactory loggerFactory = ServiceResolver.ResolveService <ILoggerFactory>();

            JustSayingBus          bus   = CreateBus(config, loggerFactory);
            IAwsClientFactoryProxy proxy = CreateFactoryProxy();

            if (PublicationsBuilder != null)
            {
                PublicationsBuilder.Configure(bus, proxy, loggerFactory);
            }

            return(bus);
        }
Ejemplo n.º 12
0
        /// <summary>
        /// Creates a new instance of <see cref="IMessagePublisher"/>.
        /// </summary>
        /// <returns>
        /// The created instance of <see cref="IMessagePublisher"/>
        /// </returns>
        public IMessagePublisher BuildPublisher()
        {
            IMessagingConfig config = CreateConfig();

            config.Validate();

            ILoggerFactory loggerFactory =
                ServicesBuilder?.LoggerFactory?.Invoke() ?? ServiceResolver.ResolveService <ILoggerFactory>();

            JustSayingBus      publisher = CreateBus(config, loggerFactory);
            JustSayingFluently fluent    = CreateFluent(publisher, loggerFactory);

            if (PublicationsBuilder != null)
            {
                PublicationsBuilder.Configure(fluent);
            }

            return(publisher);
        }
Ejemplo n.º 13
0
        public JustSayingBus(
            IMessagingConfig config,
            IMessageSerializationRegister serializationRegister,
            ILoggerFactory loggerFactory)
        {
            _loggerFactory = loggerFactory;
            _startupTasks  = new List <Func <Task> >();
            _log           = _loggerFactory.CreateLogger("JustSaying");

            Config  = config;
            Monitor = new NullOpMessageMonitor();
            MessageContextAccessor = new MessageContextAccessor();
            SerializationRegister  = serializationRegister;
            MiddlewareMap          = new MiddlewareMap();

            _publishersByType          = new Dictionary <Type, IMessagePublisher>();
            _subscriptionGroupSettings =
                new ConcurrentDictionary <string, SubscriptionGroupConfigBuilder>(StringComparer.Ordinal);
            _defaultSubscriptionGroupSettings = new SubscriptionGroupSettingsBuilder();
        }
Ejemplo n.º 14
0
    public JustSayingBus(
        IMessagingConfig config,
        IMessageSerializationRegister serializationRegister,
        ILoggerFactory loggerFactory,
        IMessageMonitor monitor)
    {
        _loggerFactory = loggerFactory ?? throw new ArgumentNullException(nameof(loggerFactory));
        _monitor       = monitor ?? throw new ArgumentNullException(nameof(monitor));

        _startupTasks = new List <Func <CancellationToken, Task> >();
        _log          = _loggerFactory.CreateLogger("JustSaying");

        Config = config;
        SerializationRegister = serializationRegister;
        MiddlewareMap         = new MiddlewareMap();

        _publishersByType          = new Dictionary <Type, IMessagePublisher>();
        _subscriptionGroupSettings =
            new ConcurrentDictionary <string, SubscriptionGroupConfigBuilder>(StringComparer.Ordinal);
        _defaultSubscriptionGroupSettings = new SubscriptionGroupSettingsBuilder();
    }
Ejemplo n.º 15
0
        /// <summary>
        /// Gets the next informed queue's message and deserializes it to an object.
        /// Once the message is dequeued, it is deleted from the queue.
        /// Depending on the service, this method may take a few seconds to return, waiting for new messages before completion.
        /// If no message is found, returns null.
        /// </summary>
        /// <typeparam name="T">The type to which the message will be deserialized to.</typeparam>
        /// <param name="config">The queue configuration.</param>
        /// <exception cref="InvalidOperationException">Occurs when the connection to the server fails.</exception>
        public static T Dequeue <T>(string queueName, IMessagingConfig config)
        {
            queueName = queueName.ToLower();
            Utils.ValidateQueueName(queueName, true);

            object    deserialized = null;
            Exception exToThrow    = null;

            using (var client = new Messaging(config))
            {
                var transporter = client.GetTransporter(queueName);
                transporter.DequeueSingleMessage(queueName, (msg) =>
                {
                    if (msg == null)
                    {
                        deserialized = null;
                        return(true);
                    }

                    try
                    {
                        deserialized = Utils.DeserializeObject <T>(msg);
                        return(true);
                    }
                    catch (Exception e)
                    {
                        exToThrow = e;
                        return(false);
                    }
                });
            }
            if (exToThrow != null)
            {
                throw new InvalidCastException("Error parsing the object. Message requeued.", exToThrow);
            }

            return((T)deserialized);
        }
        /// <summary>
        /// Creates a new instance of <see cref="IMessagingBus"/>.
        /// </summary>
        /// <returns>
        /// The created instance of <see cref="IMessagingBus"/>
        /// </returns>
        public IMessagingBus BuildSubscribers()
        {
            IMessagingConfig config = CreateConfig();

            config.Validate();

            ILoggerFactory loggerFactory =
                ServicesBuilder?.LoggerFactory?.Invoke() ?? ServiceResolver.ResolveService <ILoggerFactory>();

            JustSayingBus       bus     = CreateBus(config, loggerFactory);
            IVerifyAmazonQueues creator = CreateQueueCreator(loggerFactory);

            if (ServicesBuilder?.MessageContextAccessor != null)
            {
                bus.MessageContextAccessor = ServicesBuilder.MessageContextAccessor();
            }

            if (SubscriptionBuilder != null)
            {
                SubscriptionBuilder.Configure(bus, ServiceResolver, creator, loggerFactory);
            }

            return(bus);
        }
Ejemplo n.º 17
0
 /// <summary>
 /// Sends an object to the configured service.
 /// </summary>
 /// <param name="objMessage">The object to be serialized and sent as message.</param>
 /// <param name="config">The queue configuration.</param>
 /// <exception cref="InvalidOperationException">Occurs when the connection to the server fails.</exception>
 public static void Enqueue(string queueName, object objMessage, IMessagingConfig config)
 {
     Enqueue(queueName, Utils.SerializeObject(objMessage), config);
 }
Ejemplo n.º 18
0
 protected virtual void Given()
 {
     Config  = Substitute.For <IMessagingConfig>();
     Monitor = new TrackingLoggingMonitor(LoggerFactory.CreateLogger <TrackingLoggingMonitor>());
 }
 protected virtual void Given()
 {
     Config  = Substitute.For <IMessagingConfig>();
     Monitor = Substitute.For <IMessageMonitor>();
 }
Ejemplo n.º 20
0
 /// <summary>
 /// Sends an object to the configured service.
 /// </summary>
 /// <param name="objMessage">The object to be serialized and sent as message.</param>
 /// <param name="config">The queue configuration.</param>
 /// <exception cref="InvalidOperationException">Occurs when the connection to the server fails.</exception>
 public static void Enqueue(string queueName, string message, IMessagingConfig config)
 {
     using (var client = new Messaging(config))
         client.EnqueueMessage(queueName, message);
 }
Ejemplo n.º 21
0
 public Messaging(IMessagingConfig config)
 {
     _config  = config ?? throw new ArgumentNullException(nameof(config));
     _brokers = new Dictionary <string, IBrokerTransport>(StringComparer.OrdinalIgnoreCase);
 }
Ejemplo n.º 22
0
 protected virtual void Given()
 {
     Config        = Substitute.For <IMessagingConfig>();
     LoggerFactory = Substitute.For <ILoggerFactory>();
 }
 protected override void Given()
 {
     Config        = Substitute.For <IMessagingConfig>();
     Monitor       = Substitute.For <IMessageMonitor>();
     LoggerFactory = Substitute.For <ILoggerFactory>();
 }
Ejemplo n.º 24
0
 protected override void Given()
 {
     Config = Substitute.For <IMessagingConfig>();
 }