Ver código fonte

1.修复netty和pipeline服务重新启动时候没有优雅的释放导致日志显示报错问题

2.升级相应引用库
tags/v2.3.2
SmallChi(Koike) 5 anos atrás
pai
commit
72acdaedf9
32 arquivos alterados com 368 adições e 142 exclusões
  1. +4
    -4
      simples/JT808.DotNetty.SimpleClient/JT808.DotNetty.SimpleClient.csproj
  2. +4
    -4
      simples/JT808.DotNetty.SimpleServer/JT808.DotNetty.SimpleServer.csproj
  3. +4
    -4
      simples/JT808.Gateway.SimpleClient/JT808.Gateway.SimpleClient.csproj
  4. +4
    -4
      simples/JT808.Gateway.SimpleQueueServer/JT808.Gateway.SimpleQueueServer.csproj
  5. +4
    -4
      simples/JT808.Gateway.SimpleQueueService/JT808.Gateway.SimpleQueueService.csproj
  6. +4
    -4
      simples/JT808.Gateway.SimpleServer/JT808.Gateway.SimpleServer.csproj
  7. +1
    -1
      simples/JT808.Simples.sln
  8. +26
    -8
      src/JT808.DotNetty.Kafka/JT808MsgConsumer.cs
  9. +23
    -6
      src/JT808.DotNetty.Kafka/JT808MsgProducer.cs
  10. +26
    -5
      src/JT808.DotNetty.Kafka/JT808MsgReplyConsumer.cs
  11. +24
    -6
      src/JT808.DotNetty.Kafka/JT808MsgReplyProducer.cs
  12. +26
    -5
      src/JT808.DotNetty.Kafka/JT808SessionConsumer.cs
  13. +24
    -6
      src/JT808.DotNetty.Kafka/JT808SessionProducer.cs
  14. +4
    -4
      src/JT808.Gateway.Abstractions/JT808.Gateway.Abstractions.csproj
  15. +6
    -6
      src/JT808.Gateway.Benchmark/JT808.Gateway.CleintBenchmark/JT808.Gateway.CleintBenchmark.csproj
  16. +4
    -4
      src/JT808.Gateway.Benchmark/JT808.Gateway.ServerBenchmark/JT808.Gateway.ServerBenchmark.csproj
  17. +6
    -6
      src/JT808.Gateway.Client/JT808.Gateway.Client.csproj
  18. +6
    -6
      src/JT808.Gateway.Kafka/JT808.Gateway.Kafka.csproj
  19. +26
    -8
      src/JT808.Gateway.Kafka/JT808MsgConsumer.cs
  20. +23
    -6
      src/JT808.Gateway.Kafka/JT808MsgProducer.cs
  21. +26
    -5
      src/JT808.Gateway.Kafka/JT808MsgReplyConsumer.cs
  22. +24
    -6
      src/JT808.Gateway.Kafka/JT808MsgReplyProducer.cs
  23. +26
    -5
      src/JT808.Gateway.Kafka/JT808SessionConsumer.cs
  24. +24
    -6
      src/JT808.Gateway.Kafka/JT808SessionProducer.cs
  25. +1
    -1
      src/JT808.Gateway.Services/JT808.Gateway.MsgLogging/JT808.Gateway.MsgLogging.csproj
  26. +1
    -1
      src/JT808.Gateway.Services/JT808.Gateway.ReplyMessage/JT808.Gateway.ReplyMessage.csproj
  27. +1
    -1
      src/JT808.Gateway.Services/JT808.Gateway.SessionNotice/JT808.Gateway.SessionNotice.csproj
  28. +1
    -1
      src/JT808.Gateway.Services/JT808.Gateway.Transmit/JT808.Gateway.Transmit.csproj
  29. +4
    -4
      src/JT808.Gateway.Tests/JT808.Gateway.NormalHosting/JT808.Gateway.NormalHosting.csproj
  30. +4
    -4
      src/JT808.Gateway.Tests/JT808.Gateway.QueueHosting/JT808.Gateway.QueueHosting.csproj
  31. +4
    -4
      src/JT808.Gateway.Tests/JT808.Gateway.Test/JT808.Gateway.Test.csproj
  32. +3
    -3
      src/JT808.Gateway/JT808.Gateway.csproj

+ 4
- 4
simples/JT808.DotNetty.SimpleClient/JT808.DotNetty.SimpleClient.csproj Ver arquivo

@@ -7,10 +7,10 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="JT808.DotNetty.Client" Version="2.3.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="3.1.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.1.1" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="3.1.1" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="3.1.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="3.1.3" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.1.3" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="3.1.3" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="3.1.3" />
<PackageReference Include="WebApiClient.Extensions.DependencyInjection" Version="2.0.3" />
</ItemGroup>



+ 4
- 4
simples/JT808.DotNetty.SimpleServer/JT808.DotNetty.SimpleServer.csproj Ver arquivo

@@ -7,10 +7,10 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="JT808.DotNetty.Tcp" Version="2.3.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="3.1.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.1.1" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="3.1.1" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="3.1.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="3.1.3" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.1.3" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="3.1.3" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="3.1.3" />
<PackageReference Include="WebApiClient.Extensions.DependencyInjection" Version="2.0.3" />
</ItemGroup>
<ItemGroup>


+ 4
- 4
simples/JT808.Gateway.SimpleClient/JT808.Gateway.SimpleClient.csproj Ver arquivo

@@ -8,10 +8,10 @@
<ItemGroup>
<PackageReference Include="JT808.Gateway.Abstractions" Version="1.0.0" />
<PackageReference Include="JT808.Gateway.Client" Version="1.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="3.1.2" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.1.2" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="3.1.2" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="3.1.2" />
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="3.1.3" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.1.3" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="3.1.3" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="3.1.3" />
<PackageReference Include="WebApiClient.Extensions.DependencyInjection" Version="2.0.3" />
</ItemGroup>
</Project>

+ 4
- 4
simples/JT808.Gateway.SimpleQueueServer/JT808.Gateway.SimpleQueueServer.csproj Ver arquivo

@@ -8,10 +8,10 @@
<ItemGroup>
<PackageReference Include="JT808.Gateway" Version="1.0.0" />
<PackageReference Include="JT808.Gateway.Kafka" Version="1.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="3.1.2" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.1.2" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="3.1.2" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="3.1.2" />
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="3.1.3" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.1.3" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="3.1.3" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="3.1.3" />
</ItemGroup>
<ItemGroup>


+ 4
- 4
simples/JT808.Gateway.SimpleQueueService/JT808.Gateway.SimpleQueueService.csproj Ver arquivo

@@ -14,10 +14,10 @@
<PackageReference Include="JT808.Gateway.SessionNotice" Version="1.0.0" />
<PackageReference Include="JT808.Gateway.Traffic" Version="1.0.0" />
<PackageReference Include="JT808.Gateway.Transmit" Version="1.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="3.1.2" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.1.2" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="3.1.2" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="3.1.2" />
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="3.1.3" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.1.3" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="3.1.3" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="3.1.3" />
</ItemGroup>

<ItemGroup>


+ 4
- 4
simples/JT808.Gateway.SimpleServer/JT808.Gateway.SimpleServer.csproj Ver arquivo

@@ -12,10 +12,10 @@
<PackageReference Include="JT808.Gateway.SessionNotice" Version="1.0.0" />
<PackageReference Include="JT808.Gateway.Traffic" Version="1.0.0" />
<PackageReference Include="JT808.Gateway.Transmit" Version="1.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="3.1.2" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.1.2" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="3.1.2" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="3.1.2" />
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="3.1.3" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.1.3" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="3.1.3" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="3.1.3" />
</ItemGroup>
<ItemGroup>
<None Update="appsettings.json">


+ 1
- 1
simples/JT808.Simples.sln Ver arquivo

@@ -17,7 +17,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.Gateway.SimpleQueueSe
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.Gateway.SimpleQueueService", "JT808.Gateway.SimpleQueueService\JT808.Gateway.SimpleQueueService.csproj", "{E2D1CFEF-417A-4C44-BC2E-E5A160602485}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JT808.Gateway.SimpleQueueNotification", "JT808.Gateway.SimpleQueueNotification\JT808.Gateway.SimpleQueueNotification.csproj", "{163D2EE2-9A62-4E8A-B203-BF147909E89A}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.Gateway.SimpleQueueNotification", "JT808.Gateway.SimpleQueueNotification\JT808.Gateway.SimpleQueueNotification.csproj", "{163D2EE2-9A62-4E8A-B203-BF147909E89A}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution


+ 26
- 8
src/JT808.DotNetty.Kafka/JT808MsgConsumer.cs Ver arquivo

@@ -10,8 +10,9 @@ using System.Threading.Tasks;

namespace JT808.DotNetty.Kafka
{
public class JT808MsgConsumer : IJT808MsgConsumer
public sealed class JT808MsgConsumer : IJT808MsgConsumer
{
private bool disposed = false;
public CancellationTokenSource Cts { get; private set; } = new CancellationTokenSource();

private readonly IConsumer<string, byte[]> consumer;
@@ -35,6 +36,7 @@ namespace JT808.DotNetty.Kafka
{
while (!Cts.IsCancellationRequested)
{
if (disposed) return;
try
{
//如果不指定分区,根据kafka的机制会从多个分区中拉取数据
@@ -42,9 +44,9 @@ namespace JT808.DotNetty.Kafka
var data = consumer.Consume(Cts.Token);
if (logger.IsEnabled(LogLevel.Debug))
{
logger.LogDebug($"Topic: {data.Topic} Key: {data.Key} Partition: {data.Partition} Offset: {data.Offset} TopicPartitionOffset:{data.TopicPartitionOffset}");
logger.LogDebug($"Topic: {data.Topic} Key: {data.Message.Key} Partition: {data.Partition} Offset: {data.Offset} TopicPartitionOffset:{data.TopicPartitionOffset}");
}
callback((data.Key, data.Value));
callback((data.Message.Key, data.Message.Value));
}
catch (ConsumeException ex)
{
@@ -61,21 +63,37 @@ namespace JT808.DotNetty.Kafka
}
}, Cts.Token);
}

public void Subscribe()
{
consumer.Subscribe(TopicName);
}

public void Unsubscribe()
{
if (disposed) return;
consumer.Unsubscribe();
Cts.Cancel();
}
private void Dispose(bool disposing)
{
if (disposed) return;
if (disposing)
{
consumer.Close();
consumer.Dispose();
Cts.Dispose();
}
disposed = true;
}
~JT808MsgConsumer()
{
Dispose(false);
}

public void Dispose()
{
consumer.Close();
consumer.Dispose();
//必须为true
Dispose(true);
//通知垃圾回收机制不再调用终结器(析构器)
GC.SuppressFinalize(this);
}
}
}

+ 23
- 6
src/JT808.DotNetty.Kafka/JT808MsgProducer.cs Ver arquivo

@@ -8,8 +8,9 @@ using System.Threading.Tasks;

namespace JT808.DotNetty.Kafka
{
public class JT808MsgProducer : IJT808MsgProducer
public sealed class JT808MsgProducer : IJT808MsgProducer
{
private bool disposed = false;
public string TopicName { get; }

private readonly IProducer<string, byte[]> producer;
@@ -20,18 +21,34 @@ namespace JT808.DotNetty.Kafka
TopicName = producerConfigAccessor.Value.TopicName;
}

public void Dispose()
{
producer.Dispose();
}

public async Task ProduceAsync(string terminalNo, byte[] data)
{
if (disposed) return;
await producer.ProduceAsync(TopicName, new Message<string, byte[]>
{
Key = terminalNo,
Value = data
});
}
private void Dispose(bool disposing)
{
if (disposed) return;
if (disposing)
{
producer.Dispose();
}
disposed = true;
}
~JT808MsgProducer()
{
Dispose(false);
}
public void Dispose()
{
//必须为true
Dispose(true);
//通知垃圾回收机制不再调用终结器(析构器)
GC.SuppressFinalize(this);
}
}
}

+ 26
- 5
src/JT808.DotNetty.Kafka/JT808MsgReplyConsumer.cs Ver arquivo

@@ -10,8 +10,9 @@ using System.Threading.Tasks;

namespace JT808.DotNetty.Kafka
{
public class JT808MsgReplyConsumer : IJT808MsgReplyConsumer
public sealed class JT808MsgReplyConsumer : IJT808MsgReplyConsumer
{
private bool disposed = false;
public CancellationTokenSource Cts { get; private set; } = new CancellationTokenSource();

private readonly IConsumer<string, byte[]> consumer;
@@ -35,6 +36,7 @@ namespace JT808.DotNetty.Kafka
{
while (!Cts.IsCancellationRequested)
{
if (disposed) return;
try
{
//如果不指定分区,根据kafka的机制会从多个分区中拉取数据
@@ -42,9 +44,9 @@ namespace JT808.DotNetty.Kafka
var data = consumer.Consume(Cts.Token);
if (logger.IsEnabled(LogLevel.Debug))
{
logger.LogDebug($"Topic: {data.Topic} Key: {data.Key} Partition: {data.Partition} Offset: {data.Offset} TopicPartitionOffset:{data.TopicPartitionOffset}");
logger.LogDebug($"Topic: {data.Topic} Key: {data.Message.Key} Partition: {data.Partition} Offset: {data.Offset} TopicPartitionOffset:{data.TopicPartitionOffset}");
}
callback((data.Key, data.Value));
callback((data.Message.Key, data.Message.Value));
}
catch (ConsumeException ex)
{
@@ -69,13 +71,32 @@ namespace JT808.DotNetty.Kafka

public void Unsubscribe()
{
if (disposed) return;
consumer.Unsubscribe();
Cts.Cancel();
}

private void Dispose(bool disposing)
{
if (disposed) return;
if (disposing)
{
consumer.Close();
consumer.Dispose();
Cts.Dispose();
}
disposed = true;
}
~JT808MsgReplyConsumer()
{
Dispose(false);
}
public void Dispose()
{
consumer.Close();
consumer.Dispose();
//必须为true
Dispose(true);
//通知垃圾回收机制不再调用终结器(析构器)
GC.SuppressFinalize(this);
}
}
}

+ 24
- 6
src/JT808.DotNetty.Kafka/JT808MsgReplyProducer.cs Ver arquivo

@@ -8,8 +8,9 @@ using System.Threading.Tasks;

namespace JT808.DotNetty.Kafka
{
public class JT808MsgReplyProducer : IJT808MsgReplyProducer
public sealed class JT808MsgReplyProducer : IJT808MsgReplyProducer
{
private bool disposed = false;
public string TopicName { get;}

private IProducer<string, byte[]> producer;
@@ -20,18 +21,35 @@ namespace JT808.DotNetty.Kafka
TopicName = producerConfigAccessor.Value.TopicName;
}

public void Dispose()
{
producer.Dispose();
}

public async Task ProduceAsync(string terminalNo, byte[] data)
{
if (disposed) return;
await producer.ProduceAsync(TopicName, new Message<string, byte[]>
{
Key = terminalNo,
Value = data
});
}

private void Dispose(bool disposing)
{
if (disposed) return;
if (disposing)
{
producer.Dispose();
}
disposed = true;
}
~JT808MsgReplyProducer()
{
Dispose(false);
}
public void Dispose()
{
//必须为true
Dispose(true);
//通知垃圾回收机制不再调用终结器(析构器)
GC.SuppressFinalize(this);
}
}
}

+ 26
- 5
src/JT808.DotNetty.Kafka/JT808SessionConsumer.cs Ver arquivo

@@ -10,8 +10,9 @@ using System.Threading.Tasks;

namespace JT808.DotNetty.Kafka
{
public class JT808SessionConsumer : IJT808SessionConsumer
public sealed class JT808SessionConsumer : IJT808SessionConsumer
{
private bool disposed = false;
public CancellationTokenSource Cts { get; private set; } = new CancellationTokenSource();

private readonly IConsumer<string, string> consumer;
@@ -35,6 +36,7 @@ namespace JT808.DotNetty.Kafka
{
while (!Cts.IsCancellationRequested)
{
if (disposed) return;
try
{
//如果不指定分区,根据kafka的机制会从多个分区中拉取数据
@@ -42,9 +44,9 @@ namespace JT808.DotNetty.Kafka
var data = consumer.Consume(Cts.Token);
if (logger.IsEnabled(LogLevel.Debug))
{
logger.LogDebug($"Topic: {data.Topic} Key: {data.Key} Partition: {data.Partition} Offset: {data.Offset} TopicPartitionOffset:{data.TopicPartitionOffset}");
logger.LogDebug($"Topic: {data.Topic} Key: {data.Message.Key} Partition: {data.Partition} Offset: {data.Offset} TopicPartitionOffset:{data.TopicPartitionOffset}");
}
callback((data.Key, data.Value));
callback((data.Message.Key, data.Message.Value));
}
catch (ConsumeException ex)
{
@@ -69,13 +71,32 @@ namespace JT808.DotNetty.Kafka

public void Unsubscribe()
{
if (disposed) return;
consumer.Unsubscribe();
Cts.Cancel();
}

private void Dispose(bool disposing)
{
if (disposed) return;
if (disposing)
{
consumer.Close();
consumer.Dispose();
Cts.Dispose();
}
disposed = true;
}
~JT808SessionConsumer()
{
Dispose(false);
}
public void Dispose()
{
consumer.Close();
consumer.Dispose();
//必须为true
Dispose(true);
//通知垃圾回收机制不再调用终结器(析构器)
GC.SuppressFinalize(this);
}
}
}

+ 24
- 6
src/JT808.DotNetty.Kafka/JT808SessionProducer.cs Ver arquivo

@@ -8,8 +8,9 @@ using System.Threading.Tasks;

namespace JT808.DotNetty.Kafka
{
public class JT808SessionProducer : IJT808SessionProducer
public sealed class JT808SessionProducer : IJT808SessionProducer
{
private bool disposed = false;
public string TopicName { get; }

private readonly IProducer<string, string> producer;
@@ -20,18 +21,35 @@ namespace JT808.DotNetty.Kafka
TopicName = producerConfigAccessor.Value.TopicName;
}

public void Dispose()
{
producer.Dispose();
}

public async Task ProduceAsync(string notice,string terminalNo)
{
if (disposed) return;
await producer.ProduceAsync(TopicName, new Message<string, string>
{
Key = notice,
Value = terminalNo
});
}

private void Dispose(bool disposing)
{
if (disposed) return;
if (disposing)
{
producer.Dispose();
}
disposed = true;
}
~JT808SessionProducer()
{
Dispose(false);
}
public void Dispose()
{
//必须为true
Dispose(true);
//通知垃圾回收机制不再调用终结器(析构器)
GC.SuppressFinalize(this);
}
}
}

+ 4
- 4
src/JT808.Gateway.Abstractions/JT808.Gateway.Abstractions.csproj Ver arquivo

@@ -30,13 +30,13 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Google.Protobuf" Version="3.11.4" />
<PackageReference Include="Grpc.Core" Version="2.27.0" />
<PackageReference Include="Grpc.Tools" Version="2.27.0">
<PackageReference Include="Grpc.Core" Version="2.28.1" />
<PackageReference Include="Grpc.Tools" Version="2.28.1">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="JT808" Version="2.2.8" />
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="3.1.2" />
<PackageReference Include="JT808" Version="2.2.10" />
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="3.1.3" />
</ItemGroup>
<ItemGroup>
<None Include="..\..\LICENSE" Pack="true" PackagePath="" />


+ 6
- 6
src/JT808.Gateway.Benchmark/JT808.Gateway.CleintBenchmark/JT808.Gateway.CleintBenchmark.csproj Ver arquivo

@@ -12,18 +12,18 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="3.1.2" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.1.2" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.1.2" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="3.1.2" />
<PackageReference Include="NLog.Extensions.Logging" Version="1.6.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="3.1.3" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.1.3" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.1.3" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="3.1.3" />
<PackageReference Include="NLog.Extensions.Logging" Version="1.6.2" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\..\JT808.Gateway.Client\JT808.Gateway.Client.csproj" />
</ItemGroup>
<ItemGroup>
<None Include="..\..\LICENSE" Pack="true" PackagePath="" />
<None Include="..\..\..\LICENSE" Pack="true" PackagePath="" />
</ItemGroup>
<ItemGroup>
<None Include="wwwroot\echarts.min.js">


+ 4
- 4
src/JT808.Gateway.Benchmark/JT808.Gateway.ServerBenchmark/JT808.Gateway.ServerBenchmark.csproj Ver arquivo

@@ -6,10 +6,10 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.1.2" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="3.1.2" />
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.9.10" />
<PackageReference Include="NLog.Extensions.Logging" Version="1.6.1" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.1.3" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="3.1.3" />
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.10.8" />
<PackageReference Include="NLog.Extensions.Logging" Version="1.6.2" />
</ItemGroup>

<ItemGroup>


+ 6
- 6
src/JT808.Gateway.Client/JT808.Gateway.Client.csproj Ver arquivo

@@ -22,12 +22,12 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="JT808" Version="2.2.8" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="3.1.2" />
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="3.1.2" />
<PackageReference Include="System.IO.Pipelines" Version="4.7.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="3.1.2" />
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="3.1.2" />
<PackageReference Include="JT808" Version="2.2.10" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="3.1.3" />
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="3.1.3" />
<PackageReference Include="System.IO.Pipelines" Version="4.7.1" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="3.1.3" />
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="3.1.3" />
</ItemGroup>
<ItemGroup>
<None Include="..\..\LICENSE" Pack="true" PackagePath="" />


+ 6
- 6
src/JT808.Gateway.Kafka/JT808.Gateway.Kafka.csproj Ver arquivo

@@ -20,12 +20,12 @@
<Version>$(JT808GatewayPackageVersion)</Version>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Confluent.Kafka" Version="1.3.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="3.1.2" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="3.1.2" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="3.1.2" />
<PackageReference Include="Microsoft.Extensions.Options" Version="3.1.2" />
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="3.1.2" />
<PackageReference Include="Confluent.Kafka" Version="1.4.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="3.1.3" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="3.1.3" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="3.1.3" />
<PackageReference Include="Microsoft.Extensions.Options" Version="3.1.3" />
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="3.1.3" />
</ItemGroup>

<ItemGroup>


+ 26
- 8
src/JT808.Gateway.Kafka/JT808MsgConsumer.cs Ver arquivo

@@ -11,8 +11,9 @@ using System.Threading.Tasks;

namespace JT808.Gateway.Kafka
{
public class JT808MsgConsumer : IJT808MsgConsumer
public sealed class JT808MsgConsumer : IJT808MsgConsumer
{
private bool disposed = false;
public CancellationTokenSource Cts { get; private set; } = new CancellationTokenSource();

private readonly IConsumer<string, byte[]> consumer;
@@ -36,6 +37,7 @@ namespace JT808.Gateway.Kafka
{
while (!Cts.IsCancellationRequested)
{
if (disposed) return;
try
{
//如果不指定分区,根据kafka的机制会从多个分区中拉取数据
@@ -43,9 +45,9 @@ namespace JT808.Gateway.Kafka
var data = consumer.Consume(Cts.Token);
if (logger.IsEnabled(LogLevel.Debug))
{
logger.LogDebug($"Topic: {data.Topic} Key: {data.Key} Partition: {data.Partition} Offset: {data.Offset} TopicPartitionOffset:{data.TopicPartitionOffset}");
logger.LogDebug($"Topic: {data.Topic} Key: {data.Message.Key} Partition: {data.Partition} Offset: {data.Offset} TopicPartitionOffset:{data.TopicPartitionOffset}");
}
callback((data.Key, data.Value));
callback((data.Message.Key, data.Message.Value));
}
catch (ConsumeException ex)
{
@@ -62,21 +64,37 @@ namespace JT808.Gateway.Kafka
}
}, Cts.Token);
}

public void Subscribe()
{
consumer.Subscribe(TopicName);
}

public void Unsubscribe()
{
if (disposed) return;
consumer.Unsubscribe();
Cts.Cancel();
}
private void Dispose(bool disposing)
{
if (disposed) return;
if (disposing)
{
consumer.Close();
consumer.Dispose();
Cts.Dispose();
}
disposed = true;
}
~JT808MsgConsumer()
{
Dispose(false);
}

public void Dispose()
{
consumer.Close();
consumer.Dispose();
//必须为true
Dispose(true);
//通知垃圾回收机制不再调用终结器(析构器)
GC.SuppressFinalize(this);
}
}
}

+ 23
- 6
src/JT808.Gateway.Kafka/JT808MsgProducer.cs Ver arquivo

@@ -9,8 +9,9 @@ using System.Threading.Tasks;

namespace JT808.Gateway.Kafka
{
public class JT808MsgProducer : IJT808MsgProducer
public sealed class JT808MsgProducer : IJT808MsgProducer
{
private bool disposed = false;
public string TopicName { get; }

private readonly IProducer<string, byte[]> producer;
@@ -21,18 +22,34 @@ namespace JT808.Gateway.Kafka
TopicName = producerConfigAccessor.Value.TopicName;
}

public void Dispose()
{
producer.Dispose();
}

public async ValueTask ProduceAsync(string terminalNo, byte[] data)
{
if (disposed) return;
await producer.ProduceAsync(TopicName, new Message<string, byte[]>
{
Key = terminalNo,
Value = data
});
}
private void Dispose(bool disposing)
{
if (disposed) return;
if (disposing)
{
producer.Dispose();
}
disposed = true;
}
~JT808MsgProducer()
{
Dispose(false);
}
public void Dispose()
{
//必须为true
Dispose(true);
//通知垃圾回收机制不再调用终结器(析构器)
GC.SuppressFinalize(this);
}
}
}

+ 26
- 5
src/JT808.Gateway.Kafka/JT808MsgReplyConsumer.cs Ver arquivo

@@ -11,8 +11,9 @@ using System.Threading.Tasks;

namespace JT808.Gateway.Kafka
{
public class JT808MsgReplyConsumer : IJT808MsgReplyConsumer
public sealed class JT808MsgReplyConsumer : IJT808MsgReplyConsumer
{
private bool disposed = false;
public CancellationTokenSource Cts { get; private set; } = new CancellationTokenSource();

private readonly IConsumer<string, byte[]> consumer;
@@ -36,6 +37,7 @@ namespace JT808.Gateway.Kafka
{
while (!Cts.IsCancellationRequested)
{
if (disposed) return;
try
{
//如果不指定分区,根据kafka的机制会从多个分区中拉取数据
@@ -43,9 +45,9 @@ namespace JT808.Gateway.Kafka
var data = consumer.Consume(Cts.Token);
if (logger.IsEnabled(LogLevel.Debug))
{
logger.LogDebug($"Topic: {data.Topic} Key: {data.Key} Partition: {data.Partition} Offset: {data.Offset} TopicPartitionOffset:{data.TopicPartitionOffset}");
logger.LogDebug($"Topic: {data.Topic} Key: {data.Message.Key} Partition: {data.Partition} Offset: {data.Offset} TopicPartitionOffset:{data.TopicPartitionOffset}");
}
callback((data.Key, data.Value));
callback((data.Message.Key, data.Message.Value));
}
catch (ConsumeException ex)
{
@@ -70,13 +72,32 @@ namespace JT808.Gateway.Kafka

public void Unsubscribe()
{
if (disposed) return;
consumer.Unsubscribe();
Cts.Cancel();
}

private void Dispose(bool disposing)
{
if (disposed) return;
if (disposing)
{
consumer.Close();
consumer.Dispose();
Cts.Dispose();
}
disposed = true;
}
~JT808MsgReplyConsumer()
{
Dispose(false);
}
public void Dispose()
{
consumer.Close();
consumer.Dispose();
//必须为true
Dispose(true);
//通知垃圾回收机制不再调用终结器(析构器)
GC.SuppressFinalize(this);
}
}
}

+ 24
- 6
src/JT808.Gateway.Kafka/JT808MsgReplyProducer.cs Ver arquivo

@@ -9,8 +9,9 @@ using System.Threading.Tasks;

namespace JJT808.Gateway.Kafka
{
public class JT808MsgReplyProducer : IJT808MsgReplyProducer
public sealed class JT808MsgReplyProducer : IJT808MsgReplyProducer
{
private bool disposed = false;
public string TopicName { get;}

private IProducer<string, byte[]> producer;
@@ -21,18 +22,35 @@ namespace JJT808.Gateway.Kafka
TopicName = producerConfigAccessor.Value.TopicName;
}

public void Dispose()
{
producer.Dispose();
}

public async ValueTask ProduceAsync(string terminalNo, byte[] data)
{
if (disposed) return;
await producer.ProduceAsync(TopicName, new Message<string, byte[]>
{
Key = terminalNo,
Value = data
});
}

private void Dispose(bool disposing)
{
if (disposed) return;
if (disposing)
{
producer.Dispose();
}
disposed = true;
}
~JT808MsgReplyProducer()
{
Dispose(false);
}
public void Dispose()
{
//必须为true
Dispose(true);
//通知垃圾回收机制不再调用终结器(析构器)
GC.SuppressFinalize(this);
}
}
}

+ 26
- 5
src/JT808.Gateway.Kafka/JT808SessionConsumer.cs Ver arquivo

@@ -11,8 +11,9 @@ using System.Threading.Tasks;

namespace JT808.Gateway.Kafka
{
public class JT808SessionConsumer : IJT808SessionConsumer
public sealed class JT808SessionConsumer : IJT808SessionConsumer
{
private bool disposed = false;
public CancellationTokenSource Cts { get; private set; } = new CancellationTokenSource();

private readonly IConsumer<string, string> consumer;
@@ -36,6 +37,7 @@ namespace JT808.Gateway.Kafka
{
while (!Cts.IsCancellationRequested)
{
if (disposed) return;
try
{
//如果不指定分区,根据kafka的机制会从多个分区中拉取数据
@@ -43,9 +45,9 @@ namespace JT808.Gateway.Kafka
var data = consumer.Consume(Cts.Token);
if (logger.IsEnabled(LogLevel.Debug))
{
logger.LogDebug($"Topic: {data.Topic} Key: {data.Key} Partition: {data.Partition} Offset: {data.Offset} TopicPartitionOffset:{data.TopicPartitionOffset}");
logger.LogDebug($"Topic: {data.Topic} Key: {data.Message.Key} Partition: {data.Partition} Offset: {data.Offset} TopicPartitionOffset:{data.TopicPartitionOffset}");
}
callback((data.Key, data.Value));
callback((data.Message.Key, data.Message.Value));
}
catch (ConsumeException ex)
{
@@ -70,13 +72,32 @@ namespace JT808.Gateway.Kafka

public void Unsubscribe()
{
if (disposed) return;
consumer.Unsubscribe();
Cts.Cancel();
}

private void Dispose(bool disposing)
{
if (disposed) return;
if (disposing)
{
consumer.Close();
consumer.Dispose();
Cts.Dispose();
}
disposed = true;
}
~JT808SessionConsumer()
{
Dispose(false);
}
public void Dispose()
{
consumer.Close();
consumer.Dispose();
//必须为true
Dispose(true);
//通知垃圾回收机制不再调用终结器(析构器)
GC.SuppressFinalize(this);
}
}
}

+ 24
- 6
src/JT808.Gateway.Kafka/JT808SessionProducer.cs Ver arquivo

@@ -9,8 +9,9 @@ using System.Threading.Tasks;

namespace JT808.Gateway.Kafka
{
public class JT808SessionProducer : IJT808SessionProducer
public sealed class JT808SessionProducer : IJT808SessionProducer
{
private bool disposed = false;
public string TopicName { get; }

private readonly IProducer<string, string> producer;
@@ -21,18 +22,35 @@ namespace JT808.Gateway.Kafka
TopicName = producerConfigAccessor.Value.TopicName;
}

public void Dispose()
{
producer.Dispose();
}

public async ValueTask ProduceAsync(string notice,string terminalNo)
{
if (disposed) return;
await producer.ProduceAsync(TopicName, new Message<string, string>
{
Key = notice,
Value = terminalNo
});
}

private void Dispose(bool disposing)
{
if (disposed) return;
if (disposing)
{
producer.Dispose();
}
disposed = true;
}
~JT808SessionProducer()
{
Dispose(false);
}
public void Dispose()
{
//必须为true
Dispose(true);
//通知垃圾回收机制不再调用终结器(析构器)
GC.SuppressFinalize(this);
}
}
}

+ 1
- 1
src/JT808.Gateway.Services/JT808.Gateway.MsgLogging/JT808.Gateway.MsgLogging.csproj Ver arquivo

@@ -22,7 +22,7 @@
<PackageLicenseFile>LICENSE</PackageLicenseFile>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="3.1.2" />
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="3.1.3" />
</ItemGroup>
<ItemGroup>
<None Include="..\..\..\LICENSE" Pack="true" PackagePath="" />


+ 1
- 1
src/JT808.Gateway.Services/JT808.Gateway.ReplyMessage/JT808.Gateway.ReplyMessage.csproj Ver arquivo

@@ -21,7 +21,7 @@
<PackageLicenseFile>LICENSE</PackageLicenseFile>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="3.1.2" />
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="3.1.3" />
</ItemGroup>
<ItemGroup>
<None Include="..\..\..\LICENSE" Pack="true" PackagePath="" />


+ 1
- 1
src/JT808.Gateway.Services/JT808.Gateway.SessionNotice/JT808.Gateway.SessionNotice.csproj Ver arquivo

@@ -22,7 +22,7 @@
<PackageLicenseFile>LICENSE</PackageLicenseFile>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="3.1.2" />
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="3.1.3" />
</ItemGroup>
<ItemGroup>
<None Include="..\..\..\LICENSE" Pack="true" PackagePath="" />


+ 1
- 1
src/JT808.Gateway.Services/JT808.Gateway.Transmit/JT808.Gateway.Transmit.csproj Ver arquivo

@@ -22,7 +22,7 @@
<PackageLicenseFile>LICENSE</PackageLicenseFile>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="3.1.2" />
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="3.1.3" />
</ItemGroup>
<ItemGroup>
<None Include="..\..\..\LICENSE" Pack="true" PackagePath="" />


+ 4
- 4
src/JT808.Gateway.Tests/JT808.Gateway.NormalHosting/JT808.Gateway.NormalHosting.csproj Ver arquivo

@@ -7,10 +7,10 @@


<ItemGroup>
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.1.2" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="3.1.2" />
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.9.10" />
<PackageReference Include="NLog.Extensions.Logging" Version="1.6.1" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.1.3" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="3.1.3" />
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.10.8" />
<PackageReference Include="NLog.Extensions.Logging" Version="1.6.2" />
</ItemGroup>
<ItemGroup>


+ 4
- 4
src/JT808.Gateway.Tests/JT808.Gateway.QueueHosting/JT808.Gateway.QueueHosting.csproj Ver arquivo

@@ -6,10 +6,10 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.1.2" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="3.1.2" />
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.9.10" />
<PackageReference Include="NLog.Extensions.Logging" Version="1.6.1" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.1.3" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="3.1.3" />
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.10.8" />
<PackageReference Include="NLog.Extensions.Logging" Version="1.6.2" />
</ItemGroup>

<ItemGroup>


+ 4
- 4
src/JT808.Gateway.Tests/JT808.Gateway.Test/JT808.Gateway.Test.csproj Ver arquivo

@@ -7,15 +7,15 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="3.1.2" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.5.0" />
<PackageReference Include="System.IO.Pipelines" Version="4.7.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="3.1.3" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.6.0" />
<PackageReference Include="System.IO.Pipelines" Version="4.7.1" />
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.1">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="coverlet.collector" Version="1.2.0">
<PackageReference Include="coverlet.collector" Version="1.2.1">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>


+ 3
- 3
src/JT808.Gateway/JT808.Gateway.csproj Ver arquivo

@@ -21,9 +21,9 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Options" Version="3.1.2" />
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="3.1.2" />
<PackageReference Include="System.IO.Pipelines" Version="4.7.0" />
<PackageReference Include="Microsoft.Extensions.Options" Version="3.1.3" />
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="3.1.3" />
<PackageReference Include="System.IO.Pipelines" Version="4.7.1" />
</ItemGroup>

<ItemGroup>


Carregando…
Cancelar
Salvar