@@ -7,10 +7,10 @@ | |||||
</PropertyGroup> | </PropertyGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<PackageReference Include="JT808.DotNetty.Client" Version="2.3.1" /> | <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" /> | <PackageReference Include="WebApiClient.Extensions.DependencyInjection" Version="2.0.3" /> | ||||
</ItemGroup> | </ItemGroup> | ||||
@@ -7,10 +7,10 @@ | |||||
</PropertyGroup> | </PropertyGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<PackageReference Include="JT808.DotNetty.Tcp" Version="2.3.1" /> | <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" /> | <PackageReference Include="WebApiClient.Extensions.DependencyInjection" Version="2.0.3" /> | ||||
</ItemGroup> | </ItemGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
@@ -8,10 +8,10 @@ | |||||
<ItemGroup> | <ItemGroup> | ||||
<PackageReference Include="JT808.Gateway.Abstractions" Version="1.0.0" /> | <PackageReference Include="JT808.Gateway.Abstractions" Version="1.0.0" /> | ||||
<PackageReference Include="JT808.Gateway.Client" 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" /> | <PackageReference Include="WebApiClient.Extensions.DependencyInjection" Version="2.0.3" /> | ||||
</ItemGroup> | </ItemGroup> | ||||
</Project> | </Project> |
@@ -8,10 +8,10 @@ | |||||
<ItemGroup> | <ItemGroup> | ||||
<PackageReference Include="JT808.Gateway" Version="1.0.0" /> | <PackageReference Include="JT808.Gateway" Version="1.0.0" /> | ||||
<PackageReference Include="JT808.Gateway.Kafka" 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> | ||||
<ItemGroup> | <ItemGroup> | ||||
@@ -14,10 +14,10 @@ | |||||
<PackageReference Include="JT808.Gateway.SessionNotice" Version="1.0.0" /> | <PackageReference Include="JT808.Gateway.SessionNotice" Version="1.0.0" /> | ||||
<PackageReference Include="JT808.Gateway.Traffic" Version="1.0.0" /> | <PackageReference Include="JT808.Gateway.Traffic" Version="1.0.0" /> | ||||
<PackageReference Include="JT808.Gateway.Transmit" 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> | ||||
<ItemGroup> | <ItemGroup> | ||||
@@ -12,10 +12,10 @@ | |||||
<PackageReference Include="JT808.Gateway.SessionNotice" Version="1.0.0" /> | <PackageReference Include="JT808.Gateway.SessionNotice" Version="1.0.0" /> | ||||
<PackageReference Include="JT808.Gateway.Traffic" Version="1.0.0" /> | <PackageReference Include="JT808.Gateway.Traffic" Version="1.0.0" /> | ||||
<PackageReference Include="JT808.Gateway.Transmit" 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> | ||||
<ItemGroup> | <ItemGroup> | ||||
<None Update="appsettings.json"> | <None Update="appsettings.json"> | ||||
@@ -17,7 +17,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.Gateway.SimpleQueueSe | |||||
EndProject | EndProject | ||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.Gateway.SimpleQueueService", "JT808.Gateway.SimpleQueueService\JT808.Gateway.SimpleQueueService.csproj", "{E2D1CFEF-417A-4C44-BC2E-E5A160602485}" | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JT808.Gateway.SimpleQueueService", "JT808.Gateway.SimpleQueueService\JT808.Gateway.SimpleQueueService.csproj", "{E2D1CFEF-417A-4C44-BC2E-E5A160602485}" | ||||
EndProject | 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 | EndProject | ||||
Global | Global | ||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution | GlobalSection(SolutionConfigurationPlatforms) = preSolution | ||||
@@ -10,8 +10,9 @@ using System.Threading.Tasks; | |||||
namespace JT808.DotNetty.Kafka | 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(); | public CancellationTokenSource Cts { get; private set; } = new CancellationTokenSource(); | ||||
private readonly IConsumer<string, byte[]> consumer; | private readonly IConsumer<string, byte[]> consumer; | ||||
@@ -35,6 +36,7 @@ namespace JT808.DotNetty.Kafka | |||||
{ | { | ||||
while (!Cts.IsCancellationRequested) | while (!Cts.IsCancellationRequested) | ||||
{ | { | ||||
if (disposed) return; | |||||
try | try | ||||
{ | { | ||||
//如果不指定分区,根据kafka的机制会从多个分区中拉取数据 | //如果不指定分区,根据kafka的机制会从多个分区中拉取数据 | ||||
@@ -42,9 +44,9 @@ namespace JT808.DotNetty.Kafka | |||||
var data = consumer.Consume(Cts.Token); | var data = consumer.Consume(Cts.Token); | ||||
if (logger.IsEnabled(LogLevel.Debug)) | 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) | catch (ConsumeException ex) | ||||
{ | { | ||||
@@ -61,21 +63,37 @@ namespace JT808.DotNetty.Kafka | |||||
} | } | ||||
}, Cts.Token); | }, Cts.Token); | ||||
} | } | ||||
public void Subscribe() | public void Subscribe() | ||||
{ | { | ||||
consumer.Subscribe(TopicName); | consumer.Subscribe(TopicName); | ||||
} | } | ||||
public void Unsubscribe() | public void Unsubscribe() | ||||
{ | { | ||||
if (disposed) return; | |||||
consumer.Unsubscribe(); | 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() | public void Dispose() | ||||
{ | { | ||||
consumer.Close(); | |||||
consumer.Dispose(); | |||||
//必须为true | |||||
Dispose(true); | |||||
//通知垃圾回收机制不再调用终结器(析构器) | |||||
GC.SuppressFinalize(this); | |||||
} | } | ||||
} | } | ||||
} | } |
@@ -8,8 +8,9 @@ using System.Threading.Tasks; | |||||
namespace JT808.DotNetty.Kafka | namespace JT808.DotNetty.Kafka | ||||
{ | { | ||||
public class JT808MsgProducer : IJT808MsgProducer | |||||
public sealed class JT808MsgProducer : IJT808MsgProducer | |||||
{ | { | ||||
private bool disposed = false; | |||||
public string TopicName { get; } | public string TopicName { get; } | ||||
private readonly IProducer<string, byte[]> producer; | private readonly IProducer<string, byte[]> producer; | ||||
@@ -20,18 +21,34 @@ namespace JT808.DotNetty.Kafka | |||||
TopicName = producerConfigAccessor.Value.TopicName; | TopicName = producerConfigAccessor.Value.TopicName; | ||||
} | } | ||||
public void Dispose() | |||||
{ | |||||
producer.Dispose(); | |||||
} | |||||
public async Task ProduceAsync(string terminalNo, byte[] data) | public async Task ProduceAsync(string terminalNo, byte[] data) | ||||
{ | { | ||||
if (disposed) return; | |||||
await producer.ProduceAsync(TopicName, new Message<string, byte[]> | await producer.ProduceAsync(TopicName, new Message<string, byte[]> | ||||
{ | { | ||||
Key = terminalNo, | Key = terminalNo, | ||||
Value = data | 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); | |||||
} | |||||
} | } | ||||
} | } |
@@ -10,8 +10,9 @@ using System.Threading.Tasks; | |||||
namespace JT808.DotNetty.Kafka | 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(); | public CancellationTokenSource Cts { get; private set; } = new CancellationTokenSource(); | ||||
private readonly IConsumer<string, byte[]> consumer; | private readonly IConsumer<string, byte[]> consumer; | ||||
@@ -35,6 +36,7 @@ namespace JT808.DotNetty.Kafka | |||||
{ | { | ||||
while (!Cts.IsCancellationRequested) | while (!Cts.IsCancellationRequested) | ||||
{ | { | ||||
if (disposed) return; | |||||
try | try | ||||
{ | { | ||||
//如果不指定分区,根据kafka的机制会从多个分区中拉取数据 | //如果不指定分区,根据kafka的机制会从多个分区中拉取数据 | ||||
@@ -42,9 +44,9 @@ namespace JT808.DotNetty.Kafka | |||||
var data = consumer.Consume(Cts.Token); | var data = consumer.Consume(Cts.Token); | ||||
if (logger.IsEnabled(LogLevel.Debug)) | 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) | catch (ConsumeException ex) | ||||
{ | { | ||||
@@ -69,13 +71,32 @@ namespace JT808.DotNetty.Kafka | |||||
public void Unsubscribe() | public void Unsubscribe() | ||||
{ | { | ||||
if (disposed) return; | |||||
consumer.Unsubscribe(); | 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() | public void Dispose() | ||||
{ | { | ||||
consumer.Close(); | |||||
consumer.Dispose(); | |||||
//必须为true | |||||
Dispose(true); | |||||
//通知垃圾回收机制不再调用终结器(析构器) | |||||
GC.SuppressFinalize(this); | |||||
} | } | ||||
} | } | ||||
} | } |
@@ -8,8 +8,9 @@ using System.Threading.Tasks; | |||||
namespace JT808.DotNetty.Kafka | namespace JT808.DotNetty.Kafka | ||||
{ | { | ||||
public class JT808MsgReplyProducer : IJT808MsgReplyProducer | |||||
public sealed class JT808MsgReplyProducer : IJT808MsgReplyProducer | |||||
{ | { | ||||
private bool disposed = false; | |||||
public string TopicName { get;} | public string TopicName { get;} | ||||
private IProducer<string, byte[]> producer; | private IProducer<string, byte[]> producer; | ||||
@@ -20,18 +21,35 @@ namespace JT808.DotNetty.Kafka | |||||
TopicName = producerConfigAccessor.Value.TopicName; | TopicName = producerConfigAccessor.Value.TopicName; | ||||
} | } | ||||
public void Dispose() | |||||
{ | |||||
producer.Dispose(); | |||||
} | |||||
public async Task ProduceAsync(string terminalNo, byte[] data) | public async Task ProduceAsync(string terminalNo, byte[] data) | ||||
{ | { | ||||
if (disposed) return; | |||||
await producer.ProduceAsync(TopicName, new Message<string, byte[]> | await producer.ProduceAsync(TopicName, new Message<string, byte[]> | ||||
{ | { | ||||
Key = terminalNo, | Key = terminalNo, | ||||
Value = data | 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); | |||||
} | |||||
} | } | ||||
} | } |
@@ -10,8 +10,9 @@ using System.Threading.Tasks; | |||||
namespace JT808.DotNetty.Kafka | 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(); | public CancellationTokenSource Cts { get; private set; } = new CancellationTokenSource(); | ||||
private readonly IConsumer<string, string> consumer; | private readonly IConsumer<string, string> consumer; | ||||
@@ -35,6 +36,7 @@ namespace JT808.DotNetty.Kafka | |||||
{ | { | ||||
while (!Cts.IsCancellationRequested) | while (!Cts.IsCancellationRequested) | ||||
{ | { | ||||
if (disposed) return; | |||||
try | try | ||||
{ | { | ||||
//如果不指定分区,根据kafka的机制会从多个分区中拉取数据 | //如果不指定分区,根据kafka的机制会从多个分区中拉取数据 | ||||
@@ -42,9 +44,9 @@ namespace JT808.DotNetty.Kafka | |||||
var data = consumer.Consume(Cts.Token); | var data = consumer.Consume(Cts.Token); | ||||
if (logger.IsEnabled(LogLevel.Debug)) | 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) | catch (ConsumeException ex) | ||||
{ | { | ||||
@@ -69,13 +71,32 @@ namespace JT808.DotNetty.Kafka | |||||
public void Unsubscribe() | public void Unsubscribe() | ||||
{ | { | ||||
if (disposed) return; | |||||
consumer.Unsubscribe(); | 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() | public void Dispose() | ||||
{ | { | ||||
consumer.Close(); | |||||
consumer.Dispose(); | |||||
//必须为true | |||||
Dispose(true); | |||||
//通知垃圾回收机制不再调用终结器(析构器) | |||||
GC.SuppressFinalize(this); | |||||
} | } | ||||
} | } | ||||
} | } |
@@ -8,8 +8,9 @@ using System.Threading.Tasks; | |||||
namespace JT808.DotNetty.Kafka | namespace JT808.DotNetty.Kafka | ||||
{ | { | ||||
public class JT808SessionProducer : IJT808SessionProducer | |||||
public sealed class JT808SessionProducer : IJT808SessionProducer | |||||
{ | { | ||||
private bool disposed = false; | |||||
public string TopicName { get; } | public string TopicName { get; } | ||||
private readonly IProducer<string, string> producer; | private readonly IProducer<string, string> producer; | ||||
@@ -20,18 +21,35 @@ namespace JT808.DotNetty.Kafka | |||||
TopicName = producerConfigAccessor.Value.TopicName; | TopicName = producerConfigAccessor.Value.TopicName; | ||||
} | } | ||||
public void Dispose() | |||||
{ | |||||
producer.Dispose(); | |||||
} | |||||
public async Task ProduceAsync(string notice,string terminalNo) | public async Task ProduceAsync(string notice,string terminalNo) | ||||
{ | { | ||||
if (disposed) return; | |||||
await producer.ProduceAsync(TopicName, new Message<string, string> | await producer.ProduceAsync(TopicName, new Message<string, string> | ||||
{ | { | ||||
Key = notice, | Key = notice, | ||||
Value = terminalNo | 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); | |||||
} | |||||
} | } | ||||
} | } |
@@ -30,13 +30,13 @@ | |||||
</ItemGroup> | </ItemGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<PackageReference Include="Google.Protobuf" Version="3.11.4" /> | <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> | <PrivateAssets>all</PrivateAssets> | ||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> | <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> | ||||
</PackageReference> | </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> | ||||
<ItemGroup> | <ItemGroup> | ||||
<None Include="..\..\LICENSE" Pack="true" PackagePath="" /> | <None Include="..\..\LICENSE" Pack="true" PackagePath="" /> | ||||
@@ -12,18 +12,18 @@ | |||||
</ItemGroup> | </ItemGroup> | ||||
<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> | ||||
<ItemGroup> | <ItemGroup> | ||||
<ProjectReference Include="..\..\JT808.Gateway.Client\JT808.Gateway.Client.csproj" /> | <ProjectReference Include="..\..\JT808.Gateway.Client\JT808.Gateway.Client.csproj" /> | ||||
</ItemGroup> | </ItemGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<None Include="..\..\LICENSE" Pack="true" PackagePath="" /> | |||||
<None Include="..\..\..\LICENSE" Pack="true" PackagePath="" /> | |||||
</ItemGroup> | </ItemGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<None Include="wwwroot\echarts.min.js"> | <None Include="wwwroot\echarts.min.js"> | ||||
@@ -6,10 +6,10 @@ | |||||
</PropertyGroup> | </PropertyGroup> | ||||
<ItemGroup> | <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> | ||||
<ItemGroup> | <ItemGroup> | ||||
@@ -22,12 +22,12 @@ | |||||
</PropertyGroup> | </PropertyGroup> | ||||
<ItemGroup> | <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> | ||||
<ItemGroup> | <ItemGroup> | ||||
<None Include="..\..\LICENSE" Pack="true" PackagePath="" /> | <None Include="..\..\LICENSE" Pack="true" PackagePath="" /> | ||||
@@ -20,12 +20,12 @@ | |||||
<Version>$(JT808GatewayPackageVersion)</Version> | <Version>$(JT808GatewayPackageVersion)</Version> | ||||
</PropertyGroup> | </PropertyGroup> | ||||
<ItemGroup> | <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> | ||||
<ItemGroup> | <ItemGroup> | ||||
@@ -11,8 +11,9 @@ using System.Threading.Tasks; | |||||
namespace JT808.Gateway.Kafka | 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(); | public CancellationTokenSource Cts { get; private set; } = new CancellationTokenSource(); | ||||
private readonly IConsumer<string, byte[]> consumer; | private readonly IConsumer<string, byte[]> consumer; | ||||
@@ -36,6 +37,7 @@ namespace JT808.Gateway.Kafka | |||||
{ | { | ||||
while (!Cts.IsCancellationRequested) | while (!Cts.IsCancellationRequested) | ||||
{ | { | ||||
if (disposed) return; | |||||
try | try | ||||
{ | { | ||||
//如果不指定分区,根据kafka的机制会从多个分区中拉取数据 | //如果不指定分区,根据kafka的机制会从多个分区中拉取数据 | ||||
@@ -43,9 +45,9 @@ namespace JT808.Gateway.Kafka | |||||
var data = consumer.Consume(Cts.Token); | var data = consumer.Consume(Cts.Token); | ||||
if (logger.IsEnabled(LogLevel.Debug)) | 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) | catch (ConsumeException ex) | ||||
{ | { | ||||
@@ -62,21 +64,37 @@ namespace JT808.Gateway.Kafka | |||||
} | } | ||||
}, Cts.Token); | }, Cts.Token); | ||||
} | } | ||||
public void Subscribe() | public void Subscribe() | ||||
{ | { | ||||
consumer.Subscribe(TopicName); | consumer.Subscribe(TopicName); | ||||
} | } | ||||
public void Unsubscribe() | public void Unsubscribe() | ||||
{ | { | ||||
if (disposed) return; | |||||
consumer.Unsubscribe(); | 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() | public void Dispose() | ||||
{ | { | ||||
consumer.Close(); | |||||
consumer.Dispose(); | |||||
//必须为true | |||||
Dispose(true); | |||||
//通知垃圾回收机制不再调用终结器(析构器) | |||||
GC.SuppressFinalize(this); | |||||
} | } | ||||
} | } | ||||
} | } |
@@ -9,8 +9,9 @@ using System.Threading.Tasks; | |||||
namespace JT808.Gateway.Kafka | namespace JT808.Gateway.Kafka | ||||
{ | { | ||||
public class JT808MsgProducer : IJT808MsgProducer | |||||
public sealed class JT808MsgProducer : IJT808MsgProducer | |||||
{ | { | ||||
private bool disposed = false; | |||||
public string TopicName { get; } | public string TopicName { get; } | ||||
private readonly IProducer<string, byte[]> producer; | private readonly IProducer<string, byte[]> producer; | ||||
@@ -21,18 +22,34 @@ namespace JT808.Gateway.Kafka | |||||
TopicName = producerConfigAccessor.Value.TopicName; | TopicName = producerConfigAccessor.Value.TopicName; | ||||
} | } | ||||
public void Dispose() | |||||
{ | |||||
producer.Dispose(); | |||||
} | |||||
public async ValueTask ProduceAsync(string terminalNo, byte[] data) | public async ValueTask ProduceAsync(string terminalNo, byte[] data) | ||||
{ | { | ||||
if (disposed) return; | |||||
await producer.ProduceAsync(TopicName, new Message<string, byte[]> | await producer.ProduceAsync(TopicName, new Message<string, byte[]> | ||||
{ | { | ||||
Key = terminalNo, | Key = terminalNo, | ||||
Value = data | 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); | |||||
} | |||||
} | } | ||||
} | } |
@@ -11,8 +11,9 @@ using System.Threading.Tasks; | |||||
namespace JT808.Gateway.Kafka | 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(); | public CancellationTokenSource Cts { get; private set; } = new CancellationTokenSource(); | ||||
private readonly IConsumer<string, byte[]> consumer; | private readonly IConsumer<string, byte[]> consumer; | ||||
@@ -36,6 +37,7 @@ namespace JT808.Gateway.Kafka | |||||
{ | { | ||||
while (!Cts.IsCancellationRequested) | while (!Cts.IsCancellationRequested) | ||||
{ | { | ||||
if (disposed) return; | |||||
try | try | ||||
{ | { | ||||
//如果不指定分区,根据kafka的机制会从多个分区中拉取数据 | //如果不指定分区,根据kafka的机制会从多个分区中拉取数据 | ||||
@@ -43,9 +45,9 @@ namespace JT808.Gateway.Kafka | |||||
var data = consumer.Consume(Cts.Token); | var data = consumer.Consume(Cts.Token); | ||||
if (logger.IsEnabled(LogLevel.Debug)) | 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) | catch (ConsumeException ex) | ||||
{ | { | ||||
@@ -70,13 +72,32 @@ namespace JT808.Gateway.Kafka | |||||
public void Unsubscribe() | public void Unsubscribe() | ||||
{ | { | ||||
if (disposed) return; | |||||
consumer.Unsubscribe(); | 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() | public void Dispose() | ||||
{ | { | ||||
consumer.Close(); | |||||
consumer.Dispose(); | |||||
//必须为true | |||||
Dispose(true); | |||||
//通知垃圾回收机制不再调用终结器(析构器) | |||||
GC.SuppressFinalize(this); | |||||
} | } | ||||
} | } | ||||
} | } |
@@ -9,8 +9,9 @@ using System.Threading.Tasks; | |||||
namespace JJT808.Gateway.Kafka | namespace JJT808.Gateway.Kafka | ||||
{ | { | ||||
public class JT808MsgReplyProducer : IJT808MsgReplyProducer | |||||
public sealed class JT808MsgReplyProducer : IJT808MsgReplyProducer | |||||
{ | { | ||||
private bool disposed = false; | |||||
public string TopicName { get;} | public string TopicName { get;} | ||||
private IProducer<string, byte[]> producer; | private IProducer<string, byte[]> producer; | ||||
@@ -21,18 +22,35 @@ namespace JJT808.Gateway.Kafka | |||||
TopicName = producerConfigAccessor.Value.TopicName; | TopicName = producerConfigAccessor.Value.TopicName; | ||||
} | } | ||||
public void Dispose() | |||||
{ | |||||
producer.Dispose(); | |||||
} | |||||
public async ValueTask ProduceAsync(string terminalNo, byte[] data) | public async ValueTask ProduceAsync(string terminalNo, byte[] data) | ||||
{ | { | ||||
if (disposed) return; | |||||
await producer.ProduceAsync(TopicName, new Message<string, byte[]> | await producer.ProduceAsync(TopicName, new Message<string, byte[]> | ||||
{ | { | ||||
Key = terminalNo, | Key = terminalNo, | ||||
Value = data | 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); | |||||
} | |||||
} | } | ||||
} | } |
@@ -11,8 +11,9 @@ using System.Threading.Tasks; | |||||
namespace JT808.Gateway.Kafka | 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(); | public CancellationTokenSource Cts { get; private set; } = new CancellationTokenSource(); | ||||
private readonly IConsumer<string, string> consumer; | private readonly IConsumer<string, string> consumer; | ||||
@@ -36,6 +37,7 @@ namespace JT808.Gateway.Kafka | |||||
{ | { | ||||
while (!Cts.IsCancellationRequested) | while (!Cts.IsCancellationRequested) | ||||
{ | { | ||||
if (disposed) return; | |||||
try | try | ||||
{ | { | ||||
//如果不指定分区,根据kafka的机制会从多个分区中拉取数据 | //如果不指定分区,根据kafka的机制会从多个分区中拉取数据 | ||||
@@ -43,9 +45,9 @@ namespace JT808.Gateway.Kafka | |||||
var data = consumer.Consume(Cts.Token); | var data = consumer.Consume(Cts.Token); | ||||
if (logger.IsEnabled(LogLevel.Debug)) | 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) | catch (ConsumeException ex) | ||||
{ | { | ||||
@@ -70,13 +72,32 @@ namespace JT808.Gateway.Kafka | |||||
public void Unsubscribe() | public void Unsubscribe() | ||||
{ | { | ||||
if (disposed) return; | |||||
consumer.Unsubscribe(); | 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() | public void Dispose() | ||||
{ | { | ||||
consumer.Close(); | |||||
consumer.Dispose(); | |||||
//必须为true | |||||
Dispose(true); | |||||
//通知垃圾回收机制不再调用终结器(析构器) | |||||
GC.SuppressFinalize(this); | |||||
} | } | ||||
} | } | ||||
} | } |
@@ -9,8 +9,9 @@ using System.Threading.Tasks; | |||||
namespace JT808.Gateway.Kafka | namespace JT808.Gateway.Kafka | ||||
{ | { | ||||
public class JT808SessionProducer : IJT808SessionProducer | |||||
public sealed class JT808SessionProducer : IJT808SessionProducer | |||||
{ | { | ||||
private bool disposed = false; | |||||
public string TopicName { get; } | public string TopicName { get; } | ||||
private readonly IProducer<string, string> producer; | private readonly IProducer<string, string> producer; | ||||
@@ -21,18 +22,35 @@ namespace JT808.Gateway.Kafka | |||||
TopicName = producerConfigAccessor.Value.TopicName; | TopicName = producerConfigAccessor.Value.TopicName; | ||||
} | } | ||||
public void Dispose() | |||||
{ | |||||
producer.Dispose(); | |||||
} | |||||
public async ValueTask ProduceAsync(string notice,string terminalNo) | public async ValueTask ProduceAsync(string notice,string terminalNo) | ||||
{ | { | ||||
if (disposed) return; | |||||
await producer.ProduceAsync(TopicName, new Message<string, string> | await producer.ProduceAsync(TopicName, new Message<string, string> | ||||
{ | { | ||||
Key = notice, | Key = notice, | ||||
Value = terminalNo | 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); | |||||
} | |||||
} | } | ||||
} | } |
@@ -22,7 +22,7 @@ | |||||
<PackageLicenseFile>LICENSE</PackageLicenseFile> | <PackageLicenseFile>LICENSE</PackageLicenseFile> | ||||
</PropertyGroup> | </PropertyGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="3.1.2" /> | |||||
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="3.1.3" /> | |||||
</ItemGroup> | </ItemGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<None Include="..\..\..\LICENSE" Pack="true" PackagePath="" /> | <None Include="..\..\..\LICENSE" Pack="true" PackagePath="" /> | ||||
@@ -21,7 +21,7 @@ | |||||
<PackageLicenseFile>LICENSE</PackageLicenseFile> | <PackageLicenseFile>LICENSE</PackageLicenseFile> | ||||
</PropertyGroup> | </PropertyGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="3.1.2" /> | |||||
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="3.1.3" /> | |||||
</ItemGroup> | </ItemGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<None Include="..\..\..\LICENSE" Pack="true" PackagePath="" /> | <None Include="..\..\..\LICENSE" Pack="true" PackagePath="" /> | ||||
@@ -22,7 +22,7 @@ | |||||
<PackageLicenseFile>LICENSE</PackageLicenseFile> | <PackageLicenseFile>LICENSE</PackageLicenseFile> | ||||
</PropertyGroup> | </PropertyGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="3.1.2" /> | |||||
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="3.1.3" /> | |||||
</ItemGroup> | </ItemGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<None Include="..\..\..\LICENSE" Pack="true" PackagePath="" /> | <None Include="..\..\..\LICENSE" Pack="true" PackagePath="" /> | ||||
@@ -22,7 +22,7 @@ | |||||
<PackageLicenseFile>LICENSE</PackageLicenseFile> | <PackageLicenseFile>LICENSE</PackageLicenseFile> | ||||
</PropertyGroup> | </PropertyGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="3.1.2" /> | |||||
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="3.1.3" /> | |||||
</ItemGroup> | </ItemGroup> | ||||
<ItemGroup> | <ItemGroup> | ||||
<None Include="..\..\..\LICENSE" Pack="true" PackagePath="" /> | <None Include="..\..\..\LICENSE" Pack="true" PackagePath="" /> | ||||
@@ -7,10 +7,10 @@ | |||||
<ItemGroup> | <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> | ||||
<ItemGroup> | <ItemGroup> | ||||
@@ -6,10 +6,10 @@ | |||||
</PropertyGroup> | </PropertyGroup> | ||||
<ItemGroup> | <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> | ||||
<ItemGroup> | <ItemGroup> | ||||
@@ -7,15 +7,15 @@ | |||||
</PropertyGroup> | </PropertyGroup> | ||||
<ItemGroup> | <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" Version="2.4.1" /> | ||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.1"> | <PackageReference Include="xunit.runner.visualstudio" Version="2.4.1"> | ||||
<PrivateAssets>all</PrivateAssets> | <PrivateAssets>all</PrivateAssets> | ||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> | <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> | ||||
</PackageReference> | </PackageReference> | ||||
<PackageReference Include="coverlet.collector" Version="1.2.0"> | |||||
<PackageReference Include="coverlet.collector" Version="1.2.1"> | |||||
<PrivateAssets>all</PrivateAssets> | <PrivateAssets>all</PrivateAssets> | ||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> | <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> | ||||
</PackageReference> | </PackageReference> | ||||
@@ -21,9 +21,9 @@ | |||||
</PropertyGroup> | </PropertyGroup> | ||||
<ItemGroup> | <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> | ||||
<ItemGroup> | <ItemGroup> | ||||