1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/endink-Thrifty

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Thrifty Project

Thrifty.Net — это порт Swift(от Facebook) для .Net, библиотека на основе атрибутов для создания Thrift-сериализуемых типов и сервисов.

Вместо IDL-файла и CLI генерации IDL можно написать объект C# с атрибутами.

Thrifty = Thrift + Netty

OS Тестирование
Linux test ok test ok
Windows test ok test ok

Thrifty Benchmark

Соединение «конец-в-конец» без пула соединений

BenchmarkDotNet=v0.10.8, OS=Windows 10 Redstone 1 (10.0.14393)
Processor=Intel Core i5-6300HQ CPU 2.30GHz (Skylake), ProcessorCount=4
Frequency=2250001 Hz, Resolution=444.4442 ns, Timer=TSC
dotnet cli version=1.0.4
  [Host]     : .NET Core 4.6.25211.01, 64bit RyuJIT [AttachedDebugger]
  DefaultJob : .NET Core 4.6.25211.01, 64bit RyuJIT
Метод Среднее значение Ошибка Стандартное отклонение
'LogCase.Log (Direct)' 1,054 мс 0,0090 мс 0,0084 мс
'LogCase.GetMessages (Direct)' 1,047 мс 0,0109 мс 0,0091 мс

Поиск служб с использованием Eureka, без пула подключений

BenchmarkDotNet=v0.10.8, OS=Windows 10 Redstone 1 (10.0.14393)
Processor=Intel Core i5-6300HQ CPU 2.30GHz (Skylake), ProcessorCount=4
Frequency=2250001 Hz, Resolution=444.4442 ns, Timer=TSC
dotnet cli version=1.0.4
  [Host]     : .NET Core 4.6.25211.01, 64bit RyuJIT [AttachedDebugger]
  DefaultJob : .NET Core 4.6.25211.01, 64bit RyuJIT
Метод Среднее значение Ошибка Стандартное отклонение
'LogCase.Log (Eureka)' 1,104 мс 0,0210 мс 0,0207 мс
'LogCase.GetMessages (Eureka)' 1,108 мс 0,0182 мс 0,0161 мс

Поиск служб с использованием Eureka и с пулом подключений

BenchmarkDotNet=v0.10.8, OS=Windows 10 Redstone 1 (10.0.14393)
Processor=Intel Core i5-6300HQ CPU 2.30GHz (Skylake), ProcessorCount=4
Frequency=2250001 Hz, Resolution=444.4442 ns, Timer=TSC
dotnet cli version=1.0.4
  [Host]     : .NET Core 4.6.25211.01, 64bit RyuJIT [AttachedDebugger]
  DefaultJob : .NET Core 4.6.25211.01, 64bit RyuJIT
Метод Среднее значение Ошибка Стандартное отклонение Медиана
'LogCase.GetMessages (Eureka&Pool)' 302,1 мкс 6,023 мкс 14,55 мкс 298,5 мкс
'LogCase.Log (Eureka&Pool)' 294,9 мкс 6,789 мкс 19,70 мкс 289,2 мкс

Сериализация

Thrifty Codec преобразует POCO в Thrift и обратно. Thrift поддерживает свойства, методы и конструкции с атрибутами. Например:

    [ThriftStruct]
    public class LogEntry
    {

        [ThriftConstructor]
        public LogEntry([ThriftField(1)]String category, [ThriftField(2)]String message)
        {
            this.Category = category;
            this.Message = message;
        }

        [ThriftField(1)]
        public String Category { get; }

        [ThriftField(2)]
        public String Message { get; }
    }

Сервис

Thrifty Service атрибут сервисов для экспорта с помощью Thrift. Например:

    [ThriftService("scribe")]
    public interface IScribe
    {
        [ThriftMethod("getMessages")]
        List<LogEntry> GetMessages();

        [ThriftMethod]
        ResultCode Log(List<LogEntry> messages);
    }

    public class Scribe : IScribe
    {
        public List<LogEntry> GetMessages()
        {
            return new List<LogEntry>();
        }
    } ```
{
    new LogEntry { Category = "c1", Message = Guid.NewGuid().ToString() },
    new LogEntry { Category = "c2", Message = Guid.NewGuid().ToString() },
    new LogEntry { Category = "c3", Message = Guid.NewGuid().ToString() }
};
}

public ResultCode Log(List<LogEntry> messages)
{
    return ResultCode.TRY_LATER;
}
}

Запуск сервера

var factory = new LoggerFactory();
factory.AddConsole(LogLevel.Debug);
var serverConfig = new ThriftyServerOptions
{
    QueueTimeout = TimeSpan.FromMinutes(1),
    TaskExpirationTimeout = TimeSpan.FromMinutes(1),
    ConnectionLimit = 10000
};


var bootStrap = new ThriftyBootstrap(new object[] { new Scribe() },
    serverConfig, new InstanceDescription("Sample", "EurekaInstance1", "127.0.0.1"), factory);

bootStrap
    .SslConfig(new SslConfig
    {
        CertFile = "server.pfx",
        CertPassword = "abc@123",
        CertFileProvider = new EmbeddedFileProvider(typeof(Program).GetTypeInfo().Assembly)
    })
   .AddService(typeof(IScribe), version: "1.0.0")
   //true to register into eureka , disable eureka , set to false
   .EurekaConfig(true, 
                 new EurekaClientConfig { EurekaServerServiceUrls = "http://192.168.0.10:8761/eureka" })
   // bind any
   .Bind(IPAddress.Any.ToString(), 3366)
   .StartAsync();

Использование клиента

var factory = new LoggerFactory();
using (var client = new ThriftyClient(new ThriftyClientOptions
{
    LoggerFactory = factory,
    ConnectionPoolEnabled = true, // default is true
    EurekaEnabled = true, //default is true
    Eureka = new ThriftyClientEurekaConfig { EurekaServerServiceUrls = "http://192.168.0.10:8761/eureka" } //optional
}))
{
    /** *************if without eureka:*****************
     * 
        var service = client.Create<Thrifty.IScribe>("127.0.0.1:3366",
        new ClientSslConfig
        {
            CertFile = "ca.crt",
            FileProvider = new EmbeddedFileProvider(typeof(ClientProgram).GetTypeInfo().Assembly)
        });
     */
    var service = client.Create<Thrifty.IScribe>("1.0.0", "EurekaInstance1",
        new ClientSslConfig
        {
            CertFile = "ca.crt",
            FileProvider = new EmbeddedFileProvider(typeof(ClientProgram).GetTypeInfo().Assembly)
        });
    var logs = service.GetMessages();
    ...
}

Документы

документы здесь (сейчас доступны только китайские документы).

Зависимость (наш другой проект)

Chopin

Chopin — это порт библиотеки Apache Commons Object Pooling для .Net, для реализации пула соединений экономного клиента.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Thrifty — это RPC-фреймворк, основанный на .NET атрибутах и реализующий стандартный Thrift протокол. Thrifty = Thrift + Netty. Поддерживает стандартные типы данных Thrift и предоставляет сопоставление Thrift с C#. Помимо стандартного отображения, предлагает дополнительные доступные типы C#. Включает встроенное обнаружение и регистрацию сервисо... Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/endink-Thrifty.git
git@api.gitlife.ru:oschina-mirror/endink-Thrifty.git
oschina-mirror
endink-Thrifty
endink-Thrifty
master