JMS微服务远程调用性能测试 vs .Net Core gRPC服务

gRPC性能测试(.net 5)

创建一个最简单的gRPC服务,服务器代码如下:

using Grpc.Core;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace GrpcService1
{
    public class GreeterService : Greeter.GreeterBase
    {
        private readonly ILogger<GreeterService> _logger;
        public GreeterService(ILogger<GreeterService> logger)
        {
            _logger = logger;
        }

        public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context)
        {
            return Task.FromResult(new HelloReply
            {
                Message = "Hello " + request.Name + DateTime.Now.ToString("HH:mm:ss")
            });
        }
    }
}

创建一个c#控制台程序作为gRPC客户端,代码如下:

using System;
using System.Net.Http;
using System.Threading.Tasks;
using Grpc.Net.Client;

namespace GrpcGreeterClient
{
    class Program
    {
        static async Task Main(string[] args)
        {
            System.Threading.Thread.Sleep(3000);

            // The port number(5001) must match the port of the gRPC server.
            using var channel = GrpcChannel.ForAddress("http://localhost:5000");

            var client = new Greeter.GreeterClient(channel);

            System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
            sw.Start();

            for (int i = 0; i < 1000; i++)
            {
                var reply = await client.SayHelloAsync(
                                  new HelloRequest { Name = "GreeterClient" });
                //Console.WriteLine("Greeting: " + reply.Message);
            }
            sw.Stop();
            Console.WriteLine("用时:" + sw.ElapsedMilliseconds + "ms");
            Console.WriteLine("Press any key to exit...");
            Console.ReadKey();
        }
    }
}

同时启动这两个工程,最后客户端调用1000次服务器,用时:1405ms

注:服务器端已经关闭日志,开启日志的话,用时7000多ms

JMS性能测试(.net 5)

创建一个最简单的微服务,代码如下:

using System;
using System.Collections.Generic;
using System.Text;

namespace JMS.MicroServiceHost2.Controllers
{
    public class DemoController : BaseController
    {
        public string Hello(string name)
        {
            return "Hello " + name + DateTime.Now.ToString("HH:mm:ss");
        }
    }
}

创建一个c#控制台程序作为客户端,代码如下:

using System;
using System.Net.Http;
using System.Threading.Tasks;
using Grpc.Net.Client;

namespace GrpcGreeterClient
{
    class Program
    {
        static async Task Main(string[] args)
        {
            System.Threading.Thread.Sleep(3000);

            using (JMS.JMSClient jmsClient = new JMS.JMSClient("47.52.0.186", 8900))
            {
                var service = jmsClient.GetMicroService("DemoService");
                System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
                sw.Start();

                for (int i = 0; i < 1000; i++)
                {
                    var ret = service.Invoke<string>("Hello", "GreeterClient");
                }
                sw.Stop();
                Console.WriteLine("用时:" + sw.ElapsedMilliseconds + "ms");
            }

            Console.WriteLine("Press any key to exit...");
            Console.ReadKey();
        }
    }
}

同时启动这两个工程,最后客户端调用1000次服务器,用时:154ms

 

posted @ 2021-05-17 18:16  IWing  阅读(146)  评论(0编辑  收藏  举报