コード例 #1
0
        private static IHandlingRule FakeHandlingRule(string pattern, QueueName queueName, QueueOptions queueOptions)
        {
            var messageSpec    = new MessageNamePatternSpecification(pattern);
            var messageHandler = new DelegateMessageHandler((o, ctx) => { });

            return(new HandlingRule(messageSpec, messageHandler, queueName, queueOptions));
        }
コード例 #2
0
        /// <summary>
        /// Adds a handling rule based on the supplied message specification and
        /// action delegate
        /// </summary>
        /// <typeparam name="TContent">The type of deserialized message
        /// content expected</typeparam>
        /// <param name="configuration">The configuration object to which the
        /// handling rule is being added</param>
        /// <param name="specification">The message specification used to match
        /// messages for the handler</param>
        /// <param name="handleContent">An action delegate that will be used to
        /// handle messages</param>
        /// <param name="queueName">(Optional) The name of the queue to which
        /// the handler will be attached</param>
        /// <param name="queueOptions">(Optional) Options for how queued messages for the handler
        /// should be processed</param>
        public static void AddHandlingRule <TContent>(this PlatibusConfiguration configuration,
                                                      IMessageSpecification specification, Action <TContent, IMessageContext> handleContent,
                                                      QueueName queueName = null, QueueOptions queueOptions = null)
        {
            var messageHandler = DelegateMessageHandler.For(handleContent);
            var handlingRule   = new HandlingRule(specification, messageHandler, queueName, queueOptions);

            configuration.AddHandlingRule(handlingRule);
        }
コード例 #3
0
        /// <summary>
        /// Adds a handling rule based on the a name pattern and function delegate
        /// </summary>
        /// <typeparam name="TContent">The type of deserialized message
        /// content expected</typeparam>
        /// <param name="configuration">The configuration object to which the
        /// handling rule is being added</param>
        /// <param name="namePattern">A regular expression used to match message
        /// names for the handler</param>
        /// <param name="handleContent">A function delegate that will be used to
        /// handle messages</param>
        /// <param name="queueName">(Optional) The name of the queue to which
        /// the handler will be attached</param>
        /// <param name="queueOptions">(Optional) Options for how queued messages for the handler
        /// should be processed</param>
        public static void AddHandlingRule <TContent>(this PlatibusConfiguration configuration, string namePattern,
                                                      Func <TContent, IMessageContext, CancellationToken, Task> handleContent,
                                                      QueueName queueName = null, QueueOptions queueOptions = null)
        {
            var specification  = new MessageNamePatternSpecification(namePattern);
            var messageHandler = DelegateMessageHandler.For(handleContent);
            var handlingRule   = new HandlingRule(specification, messageHandler, queueName, queueOptions);

            configuration.AddHandlingRule(handlingRule);
        }
コード例 #4
0
        /// <summary>
        /// Adds a handling rule based on message name pattern matching
        /// </summary>
        /// <typeparam name="TContent">The type of deserialized message
        /// content expected</typeparam>
        /// <param name="configuration">The configuration object to which the
        /// handling rule is being added</param>
        /// <param name="namePattern">A regular expression used to match
        /// message names</param>
        /// <param name="handlerFactory">A factory method for getting an instance of the handler
        /// (may return a singleton or scoped handler instance)</param>
        /// <param name="queueName">(Optional) The name of the queue to which
        /// the handler will be attached</param>
        /// <param name="queueOptions">(Optional) Options for how queued messages for the handler
        /// should be processed</param>
        public static void AddHandlingRule <TContent>(this PlatibusConfiguration configuration,
                                                      string namePattern, Func <IMessageHandler <TContent> > handlerFactory,
                                                      QueueName queueName = null, QueueOptions queueOptions = null)
        {
            var specification  = new MessageNamePatternSpecification(namePattern);
            var messageHandler = new DelegateMessageHandler((content, context, ct) =>
            {
                var handler = GenericMessageHandlerAdapter.For(handlerFactory());
                return(handler.HandleMessage(content, context, ct));
            });
            var handlingRule = new HandlingRule(specification, messageHandler, queueName, queueOptions);

            configuration.AddHandlingRule(handlingRule);
        }
コード例 #5
0
        public async Task When_Enlisted_Incomplete_Transaction_Then_Not_Acknowledged()
        {
            var message = "Hello, world!";
            var mockMessageContext = new Mock<IMessageContext>();
            var cancellationTokenSource = new CancellationTokenSource();
            var messageHandler = new DelegateMessageHandler((msg, msgCtx) =>
            {
                using (var scope = new TransactionScope())
                {
                    msgCtx.EnlistInCurrentTransaction();
                }
            });

            await messageHandler.HandleMessage(message, mockMessageContext.Object, cancellationTokenSource.Token);
            mockMessageContext.Verify(msgCtx => msgCtx.Acknowledge(), Times.Never());
        }
コード例 #6
0
        public async Task MessageNotAcknowledgedWhenContextEnlistedInIncompleteTransaction()
        {
            const string message                 = "Hello, world!";
            var          mockMessageContext      = new Mock <IMessageContext>();
            var          cancellationTokenSource = new CancellationTokenSource();
            var          messageHandler          = new DelegateMessageHandler((msg, msgCtx) =>
            {
                using (new TransactionScope())
                {
                    msgCtx.EnlistInCurrentTransaction();
                }
            });

            await messageHandler.HandleMessage(message, mockMessageContext.Object, cancellationTokenSource.Token);

            mockMessageContext.Verify(msgCtx => msgCtx.Acknowledge(), Times.Never());
        }
コード例 #7
0
        public async Task SendsHeader()
        {
            const string fakeid = "FakeId";

            var context = Substitute.For <ICorridContext>();

            context.Id.Returns(fakeid);

            var handler = new DelegateMessageHandler(
                (request, ct) =>
            {
                Assert.That(request.Headers.GetValues(CorridConstants.XCorrelationIdHeader).Single() == fakeid, Is.True);
                return(Task.FromResult(new HttpResponseMessage()));
            });

            var sut    = new CorridHttpClientHandler(handler, context);
            var client = new HttpClient(sut);
            await client.SendAsync(new HttpRequestMessage(HttpMethod.Get, "http://example.com"), CancellationToken.None);
        }