# Colder.Components
**Repository Path**: idkook/Colder.Components
## Basic Information
- **Project Name**: Colder.Components
- **Description**: No description available
- **Primary Language**: C#
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2022-01-26
- **Last Updated**: 2023-08-07
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
[](https://coldairarrow.visualstudio.com/Colder/_build/latest?definitionId=3&branchName=master)
- [通用基础组件](#通用基础组件)
- [日志](#日志)
- [分布式缓存](#分布式缓存)
- [分布式锁](#分布式锁)
- [分布式Id](#分布式id)
- [自动注入](#自动注入)
- [消息总线](#消息总线)
- [Orleans](#orleans)
- [OpenService(RPC调用)](#openservicerpc调用)
- [WebSocket服务端](#websocket服务端)
# 通用基础组件
**完整使用案例见源码中demos**
## 日志
nuget包:`Colder.Logging.Serilog`
使用方式
```c#
IHostBuilder.ConfigureLoggingDefaults()
```
配置
```javascript
{
"log": { //日志配置
"minlevel": "Trace", //定义详见Microsoft.Extensions.Logging.LogLevel
"console": {
"enabled": true
},
"debug": {
"enabled": true
},
"file": {
"enabled": true
},
"elasticsearch": {
"enabled": false,
"nodes": [ "http://localhost:9200/" ],
"indexformat": "Demo-Logging-{0:yyyyMM}"
},
"overrides": [ //重写日志输出级别
{
"source": "Microsoft.AspNetCore",
"minlevel": "Information"
}
]
}
}
```
## 分布式缓存
nuget包:`Colder.Cache`
使用方式
```c#
IHostBuilder.ConfigureCacheDefaults()
```
配置
```javascript
{
"cache": {
"CacheType": "InMemory",//可选值:InMemory、Redis
"RedisConnectionString":"localhost:6379,password=123456"//Redis连接字符串,格式按照https://stackexchange.github.io/StackExchange.Redis/Configuration.html
}
}
```
## 分布式锁
nuget包:
- `Colder.DistributedLock.Hosting`
- `Colder.DistributedLock.InMemory`
- `Colder.DistributedLock.Redis`
使用方式
```c#
IHostBuilder.ConfigureDistributedLockDefaults()
```
配置
```javascript
{
"distributedLock": {
"LockTypes": "InMemory",//可选值:InMemory、Redis
"RedisEndPoints": ["localhost:6379"] //Redis节点
}
}
```
## 分布式Id
nuget包:`Colder.DistributedId`
使用方式
```c#
IHostBuilder.AddDistributedId()
```
## 自动注入
nuget包:`Colder.Dependency`
服务必须继承ITransientDependency、IScopedDependency或ISingletonDependency
使用方式
```c#
IServiceCollection.AddServices()
```
## 消息总线
nuget包:
- `Colder.MessageBus.Hosting`
- `Colder.MessageBus.InMemory`
- `Colder.MessageBus.RabbitMQ`
- `Colder.MessageBus.MQTT`
使用方式
```c#
IHostBuilder.ConfigureMessageBusDefaults()
```
配置
```javascript
{
"messagebus": {
"Transport": "RabbitMQ",
"Host": "amqp://localhost:5672/",
"Username": "guest",
"Password": "guest",
"RetryCount":3, //失败重试次数
"RetryIntervalMilliseconds":1000, //失败重试间隔毫秒数
"Endpoint":"Endpoint001",//指定节点名,默认为程序入口程序集名
"Concurrency":0//并发处理数,默认根据逻辑处理器数量自动分配
}
}
```
## Orleans
nuget包:`Colder.Orleans.Hosting`
使用方式
```c#
IHostBuilder.ConfigureOrleansDefaults()
```
配置
```javascript
{
"orleans": {
"Provider": "InMemory", //可选值InMemory、AdoNet
"AdoNetInvariant": "Microsoft.Data.SqlClient",
"AdoNetConString": "Data Source=127.0.0.1;Initial Catalog=Orleans;User Id=sa;Password=123456;",
"ClusterId": "", //集群Id,默认入口程序集名
"ServiceId": "", //服务Id,默认入口程序集名
"Ip": "", //本机Ip,默认自动扫描获取本机Ip
"Port": 11111
}
}
```
## OpenService(RPC调用)
nuget包:
- `Colder.OpenService.Abstractions`
- `Colder.OpenService.Client`
- `Colder.OpenService.Hosting`
接口定义
```c#
///
///
///
[Route("hello")]
public interface IHelloOpenService : IOpenService
{
///
///
///
///
///
[Route("say")]
Task SayHello(IdInput idInput);
}
```
服务端
```c#
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((host, services) =>
{
services.AddOpenServiceClient(Assembly.GetEntryAssembly(), new OpenServiceOptions
{
BaseUrl="http://localhost:5000/api/"
});
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup();
});
```
客户端
```c#
static async Task Main(string[] args)
{
IServiceCollection services = new ServiceCollection();
services.AddOpenServiceClient(typeof(IHelloOpenService).Assembly, new OpenServiceOptions
{
BaseUrl = "http://localhost:5000/api/"
});
IServiceProvider serviceProvider = services.BuildServiceProvider();
IHelloOpenService helloOpenService = serviceProvider.GetService();
var response = await helloOpenService.SayHello(new IdInput { Id = "Hello World" });
Console.WriteLine($"请求成功 返回参:{response}");
Console.ReadLine();
}
```
## WebSocket服务端
nuget包:`Colder.WebSockets.Server`
使用方式
```c#
services.AddWebSocketServer(x =>
{
x.OnConnected = async (serviceProvider, connection) =>
{
connection.Id = DateTime.Now.ToString();
await Task.CompletedTask;
};
x.OnReceive = async (serviceProvider, connection, msg) =>
{
var logger = serviceProvider.GetService().CreateLogger(GetType());
logger.LogInformation("收到来自 {Id} 的消息:{Msg}", connection.Id, msg);
await Task.CompletedTask;
};
});
app.UseWebSocketServer();//放到最前面
```