Thrifty Project
Thrifty.Net — это порт Swift(от Facebook) для .Net, библиотека на основе атрибутов для создания Thrift-сериализуемых типов и сервисов.
Вместо IDL-файла и CLI генерации IDL можно написать объект C# с атрибутами.
OS | Тестирование |
---|---|
Linux |
|
Windows |
|
Соединение «конец-в-конец» без пула соединений
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 — это порт библиотеки Apache Commons Object Pooling для .Net, для реализации пула соединений экономного клиента.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )