|
# NewLife.RocketMQ - ä¼ä¸šçº§çº¯æ‰˜ç®¡ RocketMQ 客户端





**纯托管ä¼ä¸šçº§ RocketMQ 客户端**ï¼Œæ”¯æŒ `.NET Framework 4.5+` / `.NET Standard 2.0+` / `.NET Core` / `.NET 5+`。
**完全使用 C# 实现,零外部ä¾èµ–ï¼ˆæ— éœ€ Javaã€gRPCã€Protobuf 第三方库)。**
---
## 产å“简介
NewLife.RocketMQ 是新生命团队开å‘çš„**ä¼ä¸šçº§çº¯æ‰˜ç®¡ RocketMQ 客户端**,专为 .NET 生æ€è®¾è®¡ã€‚å®ƒåŒæ—¶æ”¯æŒ RocketMQ **Remoting å议(4.x/5.x Broker)** å’Œ **gRPC Proxy å议(5.x Proxy)**ï¼Œè¦†ç›–ç”Ÿäº§è€…ã€æ¶ˆè´¹è€…å…¨éƒ¨æ ¸å¿ƒåŠŸèƒ½åŠä¼ä¸šçº§ç‰¹æ€§ï¼Œç»Ÿä¸€é€‚é…阿里云ã€åŽä¸ºäº‘ã€è…¾è®¯äº‘åŠ Apache ACL 认è¯ä½“系。
**æ ¸å¿ƒä¼˜åŠ¿**:
| 特性 | 说明 |
|------|------|
| **åŒå议支æŒ** | Remoting(4.x æˆç†Ÿç¨³å®šï¼‰+ gRPC(5.x é¢å‘未æ¥ï¼‰ï¼Œè‡ªåŠ¨è·¯ç”± |
| **零外部ä¾èµ–** | 内置 Protobuf ç¼–è§£ç 器(ProtoWriter/ProtoReaderï¼‰ï¼Œæ— éœ€ Java 或 gRPC è¿è¡Œæ—¶ |
| **多云适é…** | 统一 `ICloudProvider` 接å£ï¼Œå·²å†…置阿里云/åŽä¸ºäº‘/腾讯云/Apache ACL 四家适é…器 |
| **生产就绪** | 消费é‡è¯•ã€æ»ä¿¡é˜Ÿåˆ—ã€äº‹åŠ¡å›žæŸ¥ã€é¡ºåºæ¶ˆè´¹ã€Pop 消费ç‰ä¼ä¸šçº§ç‰¹æ€§å®Œæ•´æ”¯æŒ |
| **最广框架覆盖** | .NET Framework 4.5+ 到 .NET 10,gRPC 功能在 .NET Standard 2.1+ å¯ç”¨ |
| **高性能** | 基于 NewLife.Net 高性能网络层,连接å¤ç”¨ã€VIP 通é“ã€æ¶ˆæ¯åŽ‹ç¼©ã€å¹¶å‘控制 |
---
## 安装
```powershell
# NuGet 包管ç†å™¨
Install-Package NewLife.RocketMQ
# .NET CLI
dotnet add package NewLife.RocketMQ
```
```xml
<!-- PackageReference -->
<PackageReference Include="NewLife.RocketMQ" Version="3.0.*" />
```
---
## 快速入门
### å‘逿¶ˆæ¯
```csharp
using NewLife.RocketMQ;
var producer = new Producer
{
Topic = "test_topic",
NameServerAddress = "127.0.0.1:9876",
Group = "producer_group"
};
producer.Start();
// åŒæ¥å‘é€
var result = producer.Publish("Hello RocketMQ!");
Console.WriteLine($"消æ¯ID: {result.MsgId}");
// 异æ¥å‘é€
await producer.PublishAsync("å¼‚æ¥æ¶ˆæ¯");
// 批é‡å‘é€
await producer.PublishBatch(new[] { "消æ¯1", "消æ¯2", "消æ¯3" });
```
### 消费消æ¯
```csharp
var consumer = new Consumer
{
Topic = "test_topic",
Group = "consumer_group",
NameServerAddress = "127.0.0.1:9876"
};
consumer.OnConsume = (q, messages) =>
{
foreach (var msg in messages)
{
Console.WriteLine($"收到消æ¯: {msg.BodyString}");
}
return true; // 返回 true 表示消费æˆåŠŸ
};
consumer.Start();
```
### 延迟消æ¯
```csharp
// 18 级预设延迟
producer.PublishDelay("延迟消æ¯", DelayTimeLevels.s30);
// gRPC æ¨¡å¼æ”¯æŒä»»æ„时间延迟(需 netstandard2.1+)
producer.GrpcProxyAddress = "http://127.0.0.1:8081";
await producer.PublishDelayViaGrpcAsync("ä»»æ„延迟", DateTime.Now.AddMinutes(30));
```
### 事务消æ¯
```csharp
var producer = new Producer
{
Topic = "tx_topic",
Group = "tx_group",
NameServerAddress = "127.0.0.1:9876"
};
// 事务回查回调
producer.OnCheckTransaction = (msg, transactionId) =>
{
var success = CheckLocalTransaction(transactionId);
return success ? TransactionState.Commit : TransactionState.Rollback;
};
producer.Start();
// å‘é€åŠæ¶ˆæ¯ → 执行本地事务 → æäº¤/回滚
var sendResult = producer.PublishTransaction("订å•创建");
try
{
ExecuteLocalTransaction(sendResult.TransactionId);
producer.EndTransaction(sendResult, TransactionState.Commit);
}
catch
{
producer.EndTransaction(sendResult, TransactionState.Rollback);
}
```
### é¡ºåºæ¶ˆæ¯
```csharp
// ç›¸åŒ key 的消æ¯è¿›å…¥åŒä¸€é˜Ÿåˆ—
var queue = producer.SelectQueue("order_123");
producer.Publish("é¡ºåºæ¶ˆæ¯1", queue);
producer.Publish("é¡ºåºæ¶ˆæ¯2", queue);
// 消费端å¯ç”¨é¡ºåºæ¶ˆè´¹
consumer.OrderConsume = true;
```
### Request-Reply 模å¼
```csharp
// 生产者å‘é€è¯·æ±‚ï¼ˆåŒæ¥/异æ¥ï¼‰
var response = producer.Request("请求消æ¯", timeout: 5000);
var reply = await producer.RequestAsync("异æ¥è¯·æ±‚", timeout: 5000);
// 消费者回å¤
consumer.OnConsume = (q, messages) =>
{
foreach (var msg in messages)
{
if (!String.IsNullOrEmpty(msg.CorrelationId))
consumer.SendReply(msg, "处ç†ç»“æžœ");
}
return true;
};
```
---
## 消费者高级特性
### 消费é‡è¯•与æ»ä¿¡é˜Ÿåˆ—
```csharp
var consumer = new Consumer
{
Topic = "test_topic",
Group = "consumer_group",
NameServerAddress = "127.0.0.1:9876",
EnableRetry = true, // å¯ç”¨æ¶ˆè´¹é‡è¯•
MaxReconsumeTimes = 3 // 最大é‡è¯•次数,超过进入 %DLQ% æ»ä¿¡é˜Ÿåˆ—
};
consumer.OnConsume = (q, messages) =>
{
foreach (var msg in messages)
{
try { ProcessMessage(msg); }
catch { return false; } // 返回 false 触å‘é‡è¯•
}
return true;
};
```
### Tag / SQL92 过滤
```csharp
// Tag 过滤
consumer.Tags = "TagA || TagB";
// SQL92 表达å¼è¿‡æ»¤
consumer.ExpressionType = "SQL92";
consumer.Subscription = "age > 18 AND city = 'Shanghai'";
```
### 多 Topic 订阅
```csharp
consumer.Topics = "topic1;topic2;topic3";
```
### Pop 消费模å¼
```csharp
// Pop 消费(手动确认)
var messages = await consumer.PopMessageAsync(timeout: 10000);
foreach (var msg in messages)
{
try
{
ProcessMessage(msg);
await consumer.AckMessageAsync(msg);
}
catch
{
await consumer.ChangeInvisibleTimeAsync(msg, 30000); // å»¶é•¿å¤„ç†æ—¶é—´
}
}
```
### æ¶ˆè´¹é™æµ / VIP é€šé“ / 消æ¯åŽ‹ç¼©
```csharp
consumer.MaxConcurrentConsume = 10; // æœ€å¤šåŒæ—¶å¤„ç† 10 æ¡æ¶ˆæ¯
producer.VipChannelEnabled = true; // å¯ç”¨ VIP 通é“(BrokerPort - 2)
producer.CompressOverBytes = 4096; // 消æ¯ä½“超过 4KB 自动 ZLIB 压缩
```
---
## 云厂商接入
### 阿里云消æ¯é˜Ÿåˆ— RocketMQ
```csharp
var producer = new Producer
{
Topic = "test_topic",
NameServerAddress = "http://MQ_INST_xxx.aliyuncs.com:80",
CloudProvider = new AliyunProvider
{
AccessKey = "ä½ çš„AccessKey",
SecretKey = "ä½ çš„SecretKey",
InstanceId = "MQ_INST_xxx" // å¯é€‰ï¼Œè‡ªåŠ¨ä»Žåœ°å€è§£æž
}
};
```
### åŽä¸ºäº‘ DMS for RocketMQ
```csharp
var producer = new Producer
{
Topic = "test_topic",
NameServerAddress = "åŽä¸ºäº‘实例地å€:9876",
CloudProvider = new HuaweiProvider
{
AccessKey = "ä½ çš„AK",
SecretKey = "ä½ çš„SK",
InstanceId = "实例ID",
EnableSsl = true
}
};
```
### 腾讯云 TDMQ RocketMQ
```csharp
var producer = new Producer
{
Topic = "test_topic",
NameServerAddress = "腾讯云实例地å€:9876",
CloudProvider = new TencentProvider
{
AccessKey = "腾讯云SecretId",
SecretKey = "腾讯云SecretKey",
Namespace = "命å空间"
}
};
```
### Apache RocketMQ ACL 认è¯
```csharp
var producer = new Producer
{
Topic = "test_topic",
NameServerAddress = "127.0.0.1:9876",
CloudProvider = new AclProvider
{
AccessKey = "RocketMQ AccessKey",
SecretKey = "RocketMQ SecretKey"
}
};
```
---
## 架构总览
```
MqBase (业务基类)
├── Producer (生产者)
└── Consumer (消费者)
通信层
├── Remoting å议(4.x/5.x Broker)
│ ├── ClusterClient (TCP 长连接,Opaque å¤ç”¨)
│ ├── NameClient (路由å‘现,30s 轮询)
│ └── BrokerClient (心跳/注销)
│
└── gRPC å议(5.x Proxy,netstandard2.1+)
├── GrpcClient (HTTP/2,Unary + Server Streaming)
├── GrpcMessagingService (11 个 RPC 方法)
└── ProtoWriter/ProtoReader (è‡ªç ” Protobuf ç¼–è§£ç )
云厂商适é…层
├── AliyunProvider (阿里云:实例ID路由 + HTTP NameServer)
├── HuaweiProvider (åŽä¸ºäº‘:SSL/TLS + 实例ID路由)
├── TencentProvider (腾讯云:Namespace å‰ç¼€è·¯ç”±)
└── AclProvider (Apache ACL:HMAC-SHA1 ç¾å)
```
è¯¦è§ [架构设计文档](/NewLife/NewLife.RocketMQ/Blob/master/Doc/NewLife.RocketMQæž¶æž„.md)ã€[需求文档](/NewLife/NewLife.RocketMQ/Blob/master/Doc/NewLife.RocketMQ需求.md)。
---
## 功能特性一览
### 生产者
| 功能 | çŠ¶æ€ | 说明 |
|------|:----:|------|
| åŒæ¥/异æ¥/å•å‘å‘é€ | ✅ | Publish / PublishAsync / PublishOneway |
| æ‰¹é‡æ¶ˆæ¯å‘é€ | ✅ | PublishBatch,åˆå¹¶å¤šæ¡æ¶ˆæ¯ä¸ºä¸€ä¸ªè¯·æ±‚ |
| å»¶è¿Ÿæ¶ˆæ¯ | ✅ | 18 级预设 + gRPC ä»»æ„æ—¶é—´å»¶è¿Ÿ |
| äº‹åŠ¡æ¶ˆæ¯ | ✅ | åŠæ¶ˆæ¯ + æäº¤/回滚 + 回查回调 |
| é¡ºåºæ¶ˆæ¯ | ✅ | 指定 MessageQueue å‘é€ |
| Request-Reply | ✅ | åŒæ¥/异æ¥è¯·æ±‚å›žå¤ |
| 消æ¯åŽ‹ç¼© | ✅ | CompressOverBytes 阈值自动 ZLIB |
| 消æ¯è½¨è¿¹ | ✅ | AsyncTraceDispatcher + MessageTraceHook |
### 消费者
| 功能 | çŠ¶æ€ | 说明 |
|------|:----:|------|
| Pull 消费 / 消费调度 | ✅ | 长轮询拉å–,自动分é…队列 |
| 集群消费 / å¹¿æ’æ¶ˆè´¹ | ✅ | Rebalance å¹³å‡åˆ†é… / 本地åç§»æŒä¹…化 |
| Tag / SQL92 过滤 | ✅ | 表达å¼è¿‡æ»¤ |
| 多 Topic 订阅 | ✅ | Topics 属性,按 Topic 分别 Rebalance |
| 消费é‡è¯• + æ»ä¿¡é˜Ÿåˆ— | ✅ | EnableRetry + MaxReconsumeTimes |
| é¡ºåºæ¶ˆè´¹ | ✅ | 队列é”定(OrderConsume) |
| Pop 消费 | ✅ | Pop/Ack/BatchAck/ChangeInvisibleTime |
| æ¶ˆè´¹é™æµ | ✅ | MaxConcurrentConsume ä¿¡å·é‡æŽ§åˆ¶ |
### 管ç†ä¸Žè¿ç»´
| 功能 | çŠ¶æ€ | 说明 |
|------|:----:|------|
| Topic/消费组 CRUD | ✅ | 创建/æ›´æ–°/åˆ é™¤ |
| æ¶ˆæ¯æŸ¥è¯¢ | ✅ | 按 ID / 按 Key |
| 消费统计 / é›†ç¾¤ä¿¡æ¯ | ✅ | GetConsumeStats / GetClusterInfo |
| åç§»é‡ç®¡ç†ä¸Žé‡ç½® | ✅ | 查询/æ›´æ–°/é‡ç½® |
### å议与兼容性
| æœåŠ¡ç«¯ç‰ˆæœ¬ | Remoting | gRPC | 说明 |
|-----------|:--------:|:----:|------|
| RocketMQ 4.0 ~ 4.9 | ✅ | — | 完全兼容 |
| RocketMQ 5.x(Broker) | ✅ | — | Remoting å‘åŽå…¼å®¹ |
| RocketMQ 5.x(Proxy) | — | ✅ | 通过 GrpcProxyAddress å¯ç”¨ |
| 阿里云 4.x | ✅ | — | AliyunProvider é€‚é… |
| åŽä¸ºäº‘ DMS | ✅ | — | HuaweiProvider é€‚é… |
| 腾讯云 TDMQ | ✅ | — | TencentProvider é€‚é… |
---
## 与竞å“对比
| 维度 | NewLife.RocketMQ | Apache rocketmq-client-csharp | 官方 Java 客户端 |
|------|:----------------:|:---------------------------:|:----------------:|
| åè®®æ”¯æŒ | Remoting + gRPC | ä»… gRPC | Remoting + gRPC |
| 4.x 兼容 | ✅ | ⌠| ✅ |
| 外部ä¾èµ– | **é›¶ä¾èµ–** | Google.Protobuf / Grpc.Net ç‰ | 多个ä¾èµ– |
| .NET Framework | ✅ 4.5+ | ⌠| N/A(Java) |
| å¤šäº‘é€‚é… | ✅ 内置四家 | ⌠| ⌠|
| 事务/é‡è¯•/æ»ä¿¡ | ✅ 完整 | ✅ | ✅ |
| ç®¡ç† API | ✅ 完整 | ⌠| ✅ |
| 维护活跃度 | ✅ æŒç»ç»´æŠ¤ | âš ï¸ æ›´æ–°è¾ƒæ…¢ | ✅ 官方维护 |
---
## 测试覆盖
30+ 测试类(xUnitï¼‰ï¼Œè¦†ç›–æ ¸å¿ƒåŠŸèƒ½ã€é«˜çº§ç‰¹æ€§ã€å议兼容ã€äº‘厂商适é…ã€æ€§èƒ½ä¼˜åŒ–ç‰åœºæ™¯ã€‚
---
## å‚与贡献
欢迎æäº¤ Issue å’Œ Pull Requestï¼
1. Fork 本仓库
2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
3. æäº¤æ›´æ”¹ (`git commit -m 'Add some AmazingFeature'`)
4. 推é€åˆ°åˆ†æ”¯ (`git push origin feature/AmazingFeature`)
5. æäº¤ Pull Request
---
## 许å¯åè®®
本项目采用 [MIT License](/NewLife/NewLife.RocketMQ/Blob/master/LICENSE) å¼€æºå议。
---
## 新生命项目矩阵
å„é¡¹ç›®é»˜è®¤æ”¯æŒ net10.0/net9.0/netstandard2.1/netstandard2.0/net4.62/net4.5
| 项目 | 年份 | 说明 |
| :--------------------------------------------------------------: | :---: | ------------------------------------------------------------------------------------------- |
| 基础组件 | | 支撑其它ä¸é—´ä»¶ä»¥åŠäº§å“项目 |
| [NewLife.Core](https://github.com/NewLifeX/X) | 2002 | æ ¸å¿ƒåº“ï¼Œæ—¥å¿—ã€é…ç½®ã€ç¼“å˜ã€ç½‘络ã€åºåˆ—化ã€APM性能追踪 |
| [NewLife.XCode](https://github.com/NewLifeX/NewLife.XCode) | 2005 | 大数æ®ä¸é—´ä»¶ï¼Œå•表百亿级,MySql/SQLite/SqlServer/Oracle/PostgreSql/达梦,自动分表,读写分离 |
| [NewLife.Net](https://github.com/NewLifeX/NewLife.Net) | 2005 | ç½‘ç»œåº“ï¼Œå•æœºåƒä¸‡çº§åžå率(2266万tpsï¼‰ï¼Œå•æœºç™¾ä¸‡çº§è¿žæŽ¥ï¼ˆ400万Tcp长连接) |
| [NewLife.Remoting](https://github.com/NewLifeX/NewLife.Remoting) | 2011 | å议通信库,æä¾›CS应用通信框架,支æŒHttp/RPC通信框架,高åžå,物è”网设备低开销易接入 |
| [NewLife.Cube](https://github.com/NewLifeX/NewLife.Cube) | 2010 | 锿–¹å¿«é€Ÿå¼€å‘å¹³å°ï¼Œé›†æˆäº†ç”¨æˆ·æƒé™ã€SSO登录ã€OAuthæœåŠ¡ç«¯ç‰ï¼Œå•表100äº¿çº§é¡¹ç›®éªŒè¯ |
| [NewLife.Agent](https://github.com/NewLifeX/NewLife.Agent) | 2008 | æœåŠ¡ç®¡ç†ç»„件,把应用安装æˆä¸ºæ“作系统守护进程,WindowsæœåŠ¡ã€Linuxçš„Systemd |
| [NewLife.Zero](https://github.com/NewLifeX/NewLife.Zero) | 2020 | Zero零代脚手架,基于NewLife组件生æ€çš„项目模æ¿NewLife.Templates,Webã€WebApiã€Service |
| ä¸é—´ä»¶ | | 对接知åä¸é—´ä»¶å¹³å° |
| [NewLife.Redis](https://github.com/NewLifeX/NewLife.Redis) | 2017 | Redis客户端,微秒级延迟,百万级åžå,丰富的消æ¯é˜Ÿåˆ—,百亿级数æ®é‡é¡¹ç›®éªŒè¯ |
| [NewLife.RocketMQ](https://github.com/NewLifeX/NewLife.RocketMQ) | 2018 | RocketMQ纯托管客户端,支æŒApache RocketMQ和阿里云消æ¯é˜Ÿåˆ—,åäº¿çº§é¡¹ç›®éªŒè¯ |
| [NewLife.MQTT](https://github.com/NewLifeX/NewLife.MQTT) | 2019 | 物è”网消æ¯å议,MqttClient/MqttServer,客户端支æŒé˜¿é‡Œäº‘物è”网 |
| [NewLife.IoT](https://github.com/NewLifeX/NewLife.IoT) | 2022 | IoTæ ‡å‡†åº“ï¼Œå®šä¹‰ç‰©è”网领域的å„ç§é€šä¿¡åè®®æ ‡å‡†è§„èŒƒ |
| [NewLife.Modbus](https://github.com/NewLifeX/NewLife.Modbus) | 2022 | ModbusTcp/ModbusRTU/ModbusASCII,基于IoTæ ‡å‡†åº“å®žçŽ°ï¼Œæ”¯æŒZeroIoTå¹³å°å’ŒIoTEdge网关 |
| [NewLife.Siemens](https://github.com/NewLifeX/NewLife.Siemens) | 2022 | 西门åPLCå议,基于IoTæ ‡å‡†åº“å®žçŽ°ï¼Œæ”¯æŒIoTå¹³å°å’ŒIoTEdge |
| [NewLife.Map](https://github.com/NewLifeX/NewLife.Map) | 2022 | 地图组件库,å°è£…百度地图ã€é«˜å¾·åœ°å›¾ã€è…¾è®¯åœ°å›¾ã€å¤©åœ°å›¾ |
| [NewLife.Audio](https://github.com/NewLifeX/NewLife.Audio) | 2023 | 音频编解ç 库,PCM/ADPCMA/G711A/G722U/WAV/AAC |
| 产å“å¹³å° | | 产å“å¹³å°çº§ï¼Œç¼–译部署å³ç”¨ï¼Œä¸ªæ€§åŒ–自定义 |
| [Stardust](https://github.com/NewLifeX/Stardust) | 2018 | æ˜Ÿå°˜ï¼Œåˆ†å¸ƒå¼æœåС平å°ï¼ŒèŠ‚ç‚¹ç®¡ç†ã€APM监控ä¸å¿ƒã€é…ç½®ä¸å¿ƒã€æ³¨å†Œä¸å¿ƒã€å‘布ä¸å¿ƒ |
| [AntJob](https://github.com/NewLifeX/AntJob) | 2019 | èš‚èšè°ƒåº¦ï¼Œåˆ†å¸ƒå¼å¤§æ•°æ®è®¡ç®—å¹³å°ï¼ˆå®žæ—¶/ç¦»çº¿ï¼‰ï¼Œèš‚èšæ¬å®¶åˆ†ç‰‡æ€æƒ³ï¼Œä¸‡äº¿çº§æ•°æ®é‡é¡¹ç›®éªŒè¯ |
| [NewLife.ERP](https://github.com/NewLifeX/NewLife.ERP) | 2021 | ä¼ä¸šERP,产å“管ç†ã€å®¢æˆ·ç®¡ç†ã€é”€å”®ç®¡ç†ã€ä¾›åº”å•†ç®¡ç† |
| [CrazyCoder](https://github.com/NewLifeX/XCoder) | 2006 | ç 神工具,众多开å‘者工具,网络ã€ä¸²å£ã€åŠ è§£å¯†ã€æ£åˆ™è¡¨è¾¾å¼ã€Modbusã€MQTT |
| [EasyIO](https://github.com/NewLifeX/EasyIO) | 2023 | 简易文件å˜å‚¨ï¼Œæ”¯æŒåˆ†å¸ƒå¼ç³»ç»Ÿä¸æ–‡ä»¶é›†ä¸å˜å‚¨ |
| [XProxy](https://github.com/NewLifeX/XProxy) | 2005 | 产å“级åå‘代ç†ï¼ŒNAT代ç†ã€Httpä»£ç† |
| [HttpMeter](https://github.com/NewLifeX/HttpMeter) | 2022 | Http压力测试工具 |
| [GitCandy](https://github.com/NewLifeX/GitCandy) | 2015 | Gitæºä»£ç 管ç†ç³»ç»Ÿ |
| [SmartOS](https://github.com/NewLifeX/SmartOS) | 2014 | åµŒå…¥å¼æ“作系统,完全独立自主,支æŒARM Cortex-M芯片架构 |
| [SmartA2](https://github.com/NewLifeX/SmartA2) | 2019 | 嵌入å¼å·¥ä¸šè®¡ç®—机,物è”网边缘网关,高性能.NET8主机,应用于工业ã€å†œä¸šã€äº¤é€šã€åŒ»ç–— |
| FIoT物è”ç½‘å¹³å° | 2020 | 物è”网整体解决方案,建ç‘ã€çޝä¿ã€å†œä¸šï¼Œè½¯ç¡¬ä»¶åŠå¤§æ•°æ®åˆ†æžä¸€ä½“åŒ–ï¼Œå•æœºå万级点ä½é¡¹ç›®éªŒè¯ |
| UWBé«˜ç²¾åº¦å®¤å†…å®šä½ | 2020 | 厘米级(10~20cm)高精度室内定ä½ï¼Œè½¯ç¡¬ä»¶ä¸€ä½“化,与其它系统è”åŠ¨ï¼Œå¤§åž‹å±•åŽ…é¡¹ç›®éªŒè¯ |
---
## 新生命开å‘团队

新生命团队(NewLife)æˆç«‹äºŽ2002年,是新时代物è”网行业解决方案æä¾›è€…,致力于æä¾›è½¯ç¡¬ä»¶åº”用方案咨询ã€ç³»ç»Ÿæž¶æž„è§„åˆ’ä¸Žå¼€å‘æœåŠ¡ã€‚
团队主导的80多个开æºé¡¹ç›®å·²è¢«å¹¿æ³›åº”用于å„行业,Nuget累计下载é‡é«˜è¾¾**400余万次**。
团队开å‘的大数æ®ä¸é—´ä»¶ **NewLife.XCode**ã€èš‚èšè°ƒåº¦è®¡ç®—å¹³å° **AntJob**ã€æ˜Ÿå°˜åˆ†å¸ƒå¼å¹³å° **Stardust**ã€ç¼“å˜é˜Ÿåˆ—组件 **NewLife.Redis** 以åŠç‰©è”ç½‘å¹³å° **FIoT**ï¼Œå‡æˆåŠŸåº”ç”¨äºŽç”µåŠ›ã€é«˜æ ¡ã€äº’è”网ã€ç”µä¿¡ã€äº¤é€šã€ç‰©æµã€å·¥æŽ§ã€åŒ»ç–—ã€æ–‡åšç‰è¡Œä¸šï¼Œä¸ºå®¢æˆ·æä¾›äº†å¤§é‡å…ˆè¿›ã€å¯é ã€å®‰å…¨ã€é«˜è´¨é‡ã€æ˜“扩展的产å“å’Œç³»ç»Ÿé›†æˆæœåŠ¡ã€‚
æˆ‘ä»¬å°†ä¸æ–通过æœåŠ¡çš„æŒç»æ”¹è¿›ï¼Œæˆä¸ºå®¢æˆ·é•¿æœŸä¿¡èµ–çš„åˆä½œä¼™ä¼´ï¼Œé€šè¿‡ä¸æ–的创新和å‘展,æˆä¸ºå›½å†…优秀的 IoT æœåŠ¡ä¾›åº”å•†ã€‚
**新生命团队始于2002年,部分开æºé¡¹ç›®å…·æœ‰20年以上漫长历å²ï¼Œæºç 库ä¿ç•™æœ‰2010å¹´ä»¥æ¥æ‰€æœ‰ä¿®æ”¹è®°å½•**
- 网站:<https://newlifex.com>
- å¼€æºï¼š<https://github.com/newlifex>
- QQ群:1600800 / 1600838
- 微信公众å·ï¼š

|