Exemplo n.º 1
0
        static async Task RunConsumer(RequestResponseFactory factory)
        {
            // get number of consumers to run
            var consumerCount = GetNumberInActionArgs(0);

            var consumers = new Task[consumerCount];

            for (int i = 0; i < consumerCount; i++)
            {
                consumers[i] = Task.Run(() =>
                {
                    var responder = factory.GetResponder <GetLoanOptionsRequestPayload, GetLoanOptionsResponsePayload>(request =>
                    {
                        return(new GetLoanOptionsResponsePayload
                        {
                            Provider = "BRINKLE",
                            LoanAmount = request.CreditScore * 4
                        });
                    });
                    responder.RequestReceived   += m => logger.WriteOutput($"Incoming: SessionId = {m.ReplyToSessionId}");
                    responder.ResponseSending   += m => logger.WriteOutput($"Outgoing: SessionId = {m.SessionId}");
                    responder.ExceptionOccurred += args => logger.WriteOutput($"Fatal: {args.Exception.GetType().Name} {args.Exception.Message}");

                    return(responder.RespondToRequests());
                });
            }

            logger.WriteOutput("Listening on the queue...");
            await Task.WhenAll(consumers);
        }
Exemplo n.º 2
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

            var connectionString = Configuration["ServiceBusConnectionString"];

            factory = new RequestResponseFactory(connectionString, "thequeue", "theotherqueue");
            factory.EnsureEntitiesExist().GetAwaiter().GetResult();

            services.AddSingleton(factory);

            services.AddLogging(builder =>
            {
                builder.AddConsole();
            });
        }
Exemplo n.º 3
0
        static void Main(string[] args)
        {
            Console.WriteLine("Service Bus Test Tool");
            Console.WriteLine("=============================");

            if (!Config.ParseArgs(args, Console.Out))
            {
                return;
            }

            logger = new ConsoleLogger(Console.Out);
            logger.Start();
            Console.CancelKeyPress += Console_CancelKeyPress;

            try
            {
                var factory = new RequestResponseFactory(Config.ConnectionString, Config.QueueSendName, Config.QueueRespondName);
                factory.EnsureEntitiesExist().GetAwaiter().GetResult();

                if (Config.SendRequest)
                {
                    TimeOperation(() => SendRequests(factory)).GetAwaiter().GetResult();
                }
                else if (Config.SendResponse)
                {
                    RunConsumer(factory).GetAwaiter().GetResult();
                }
                else
                {
                    throw new Exception("Fatal: Unrecognized action initiated");
                }
            }
            catch (Exception ex)
            {
                var origColor = Console.ForegroundColor;
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine(ex.Message);
                Console.ForegroundColor = origColor;
            }
        }
Exemplo n.º 4
0
        static async Task SendRequests(RequestResponseFactory factory)
        {
            // get number of requests to make
            var requestsToSend     = GetNumberInActionArgs(0);
            var msDelayBetweenReqs = GetNumberInActionArgs(1);
            var httpEndpoint       = GetActionArg(2);

            if (httpEndpoint != null)
            {
                SetupHttpClient(httpEndpoint);
            }

            var sender = factory.GetSender <GetLoanOptionsRequestPayload, GetLoanOptionsResponsePayload>();

            sender.RequestSending += (r, m) =>
            {
                logger.WriteOutput($"{r.Id:000} REQUEST: CreditScore = {r.CreditScore}, SessionId = {m.ReplyToSessionId}");
            };
            var random = new Random();
            var outstandingRequests = new Task[requestsToSend];

            logger.WriteOutput("Sending requests...");

            for (var i = 0; i < requestsToSend; i++)
            {
                var payload = new GetLoanOptionsRequestPayload
                {
                    Id          = i,
                    CreditScore = random.Next(300, 801)
                };

                var rememberI = i;
                if (httpEndpoint == null)
                {
                    outstandingRequests[i] = sender.SendRequest(payload).ContinueWith(async t =>
                    {
                        if (t.IsFaulted)
                        {
                            foreach (var e in t.Exception.InnerExceptions)
                            {
                                logger.WriteOutput($"{rememberI:000} Failure: {e.Message}");
                            }

                            return;
                        }

                        var response = await t;
                        logger.WriteOutput($"{rememberI:000} RESPONSE: Provider = {response.Provider}, Loan = {response.LoanAmount}");
                    });
                }
                else
                {
                    outstandingRequests[i] = SendHttpRequest(payload).ContinueWith(async t =>
                    {
                        var response = await t;
                        logger.WriteOutput($"{rememberI:000} RESPONSE: Provider = {response.Provider}, Loan = {response.LoanAmount}");
                    });
                }

                await Task.Delay(msDelayBetweenReqs);
            }

            await Task.WhenAll(outstandingRequests);

            logger.Stop();

            if (httpEndpoint == null)
            {
                OutputAppMessage($"Average Round Trip Time (sec): {Math.Round(sender.AverageRTTms / 1000.0, 3)}");
                OutputAppMessage($"Min Round Trip Time (sec): {Math.Round(sender.MinRTTms / 1000.0, 3)}");
                OutputAppMessage($"Max Round Trip Time (sec): {Math.Round(sender.MaxRTTms / 1000.0, 3)}");
            }
            else
            {
                OutputAppMessage($"Average Round Trip Time (sec): {Math.Round(SendOverHttp_AverageRTTms / 1000.0, 3)}");
                OutputAppMessage($"Min Round Trip Time (sec): {Math.Round(SendOverHttp_MinRTTms / 1000.0, 3)}");
                OutputAppMessage($"Max Round Trip Time (sec): {Math.Round(SendOverHttp_MaxRTTms / 1000.0, 3)}");
            }
        }
 public ValuesController(RequestResponseFactory factory)
 {
     this.factory = factory;
 }