初始化

This commit is contained in:
2025-11-21 08:48:01 +08:00
commit b4d684a84c
202 changed files with 28585 additions and 0 deletions

318
duoge/Person.cs Normal file
View File

@@ -0,0 +1,318 @@
// <auto-generated>
// Generated by the protocol buffer compiler. DO NOT EDIT!
// source: person.proto
// </auto-generated>
#pragma warning disable 1591, 0612, 3021, 8981
#region Designer generated code
using pb = global::Google.Protobuf;
using pbc = global::Google.Protobuf.Collections;
using pbr = global::Google.Protobuf.Reflection;
using scg = global::System.Collections.Generic;
namespace Tutorial {
/// <summary>Holder for reflection information generated from person.proto</summary>
public static partial class PersonReflection {
#region Descriptor
/// <summary>File descriptor for person.proto</summary>
public static pbr::FileDescriptor Descriptor {
get { return descriptor; }
}
private static pbr::FileDescriptor descriptor;
static PersonReflection() {
byte[] descriptorData = global::System.Convert.FromBase64String(
string.Concat(
"CgxwZXJzb24ucHJvdG8SCHR1dG9yaWFsIjEKBlBlcnNvbhIMCgRuYW1lGAEg",
"ASgJEgoKAmlkGAIgASgFEg0KBWVtYWlsGAMgASgJYgZwcm90bzM="));
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
new pbr::FileDescriptor[] { },
new pbr::GeneratedClrTypeInfo(null, null, new pbr::GeneratedClrTypeInfo[] {
new pbr::GeneratedClrTypeInfo(typeof(global::Tutorial.Person), global::Tutorial.Person.Parser, new[]{ "Name", "Id", "Email" }, null, null, null, null)
}));
}
#endregion
}
#region Messages
/// <summary>
/// 定义一个Person消息类型
/// </summary>
[global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")]
public sealed partial class Person : pb::IMessage<Person>
#if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
, pb::IBufferMessage
#endif
{
private static readonly pb::MessageParser<Person> _parser = new pb::MessageParser<Person>(() => new Person());
private pb::UnknownFieldSet _unknownFields;
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public static pb::MessageParser<Person> Parser { get { return _parser; } }
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public static pbr::MessageDescriptor Descriptor {
get { return global::Tutorial.PersonReflection.Descriptor.MessageTypes[0]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
pbr::MessageDescriptor pb::IMessage.Descriptor {
get { return Descriptor; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public Person() {
OnConstruction();
}
partial void OnConstruction();
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public Person(Person other) : this() {
name_ = other.name_;
id_ = other.id_;
email_ = other.email_;
_unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public Person Clone() {
return new Person(this);
}
/// <summary>Field number for the "name" field.</summary>
public const int NameFieldNumber = 1;
private string name_ = "";
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public string Name {
get { return name_; }
set {
name_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
}
}
/// <summary>Field number for the "id" field.</summary>
public const int IdFieldNumber = 2;
private int id_;
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public int Id {
get { return id_; }
set {
id_ = value;
}
}
/// <summary>Field number for the "email" field.</summary>
public const int EmailFieldNumber = 3;
private string email_ = "";
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public string Email {
get { return email_; }
set {
email_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
}
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public override bool Equals(object other) {
return Equals(other as Person);
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public bool Equals(Person other) {
if (ReferenceEquals(other, null)) {
return false;
}
if (ReferenceEquals(other, this)) {
return true;
}
if (Name != other.Name) return false;
if (Id != other.Id) return false;
if (Email != other.Email) return false;
return Equals(_unknownFields, other._unknownFields);
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public override int GetHashCode() {
int hash = 1;
if (Name.Length != 0) hash ^= Name.GetHashCode();
if (Id != 0) hash ^= Id.GetHashCode();
if (Email.Length != 0) hash ^= Email.GetHashCode();
if (_unknownFields != null) {
hash ^= _unknownFields.GetHashCode();
}
return hash;
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public override string ToString() {
return pb::JsonFormatter.ToDiagnosticString(this);
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public void WriteTo(pb::CodedOutputStream output) {
#if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
output.WriteRawMessage(this);
#else
if (Name.Length != 0) {
output.WriteRawTag(10);
output.WriteString(Name);
}
if (Id != 0) {
output.WriteRawTag(16);
output.WriteInt32(Id);
}
if (Email.Length != 0) {
output.WriteRawTag(26);
output.WriteString(Email);
}
if (_unknownFields != null) {
_unknownFields.WriteTo(output);
}
#endif
}
#if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
if (Name.Length != 0) {
output.WriteRawTag(10);
output.WriteString(Name);
}
if (Id != 0) {
output.WriteRawTag(16);
output.WriteInt32(Id);
}
if (Email.Length != 0) {
output.WriteRawTag(26);
output.WriteString(Email);
}
if (_unknownFields != null) {
_unknownFields.WriteTo(ref output);
}
}
#endif
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public int CalculateSize() {
int size = 0;
if (Name.Length != 0) {
size += 1 + pb::CodedOutputStream.ComputeStringSize(Name);
}
if (Id != 0) {
size += 1 + pb::CodedOutputStream.ComputeInt32Size(Id);
}
if (Email.Length != 0) {
size += 1 + pb::CodedOutputStream.ComputeStringSize(Email);
}
if (_unknownFields != null) {
size += _unknownFields.CalculateSize();
}
return size;
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public void MergeFrom(Person other) {
if (other == null) {
return;
}
if (other.Name.Length != 0) {
Name = other.Name;
}
if (other.Id != 0) {
Id = other.Id;
}
if (other.Email.Length != 0) {
Email = other.Email;
}
_unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
public void MergeFrom(pb::CodedInputStream input) {
#if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
input.ReadRawMessage(this);
#else
uint tag;
while ((tag = input.ReadTag()) != 0) {
if ((tag & 7) == 4) {
// Abort on any end group tag.
return;
}
switch(tag) {
default:
_unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
break;
case 10: {
Name = input.ReadString();
break;
}
case 16: {
Id = input.ReadInt32();
break;
}
case 26: {
Email = input.ReadString();
break;
}
}
}
#endif
}
#if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
uint tag;
while ((tag = input.ReadTag()) != 0) {
if ((tag & 7) == 4) {
// Abort on any end group tag.
return;
}
switch(tag) {
default:
_unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
break;
case 10: {
Name = input.ReadString();
break;
}
case 16: {
Id = input.ReadInt32();
break;
}
case 26: {
Email = input.ReadString();
break;
}
}
}
}
#endif
}
#endregion
}
#endregion Designer generated code

9
duoge/Person1.cs Normal file
View File

@@ -0,0 +1,9 @@
namespace duoge
{
//internal class Person
//{
// public string? Name { get; internal set; }
// public int Id { get; internal set; }
// public string? Email { get; internal set; }
//}
}

135
duoge/Program.cs Normal file
View File

@@ -0,0 +1,135 @@
using System.Text;
using Confluent.Kafka;
using Google.Protobuf;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Tutorial;
namespace duoge
{
internal class Program
{
static void Main(string[] args)
{
string json = @"{ 'name': 'John Doe', 'id': 123, 'email': 'john@example.com' }";
JObject jsonObject = JObject.Parse(json);
Person person = new Person();
person.Name = (string)jsonObject["name"];
person.Id = (int)jsonObject["id"];
person.Email = (string)jsonObject["email"];
Console.WriteLine("Name: " + person.Name); // 输出转换后的ProtoBuf对象信息
byte[] bbb1 = Encoding.UTF8.GetBytes(json);
byte[] bbb = person.ToByteArray();
Person PPP = Person.Parser.ParseFrom(bbb);
// 方法1使用静态Parser推荐
Person restoredPerson1 = Person.Parser.ParseFrom(bbb);
// 方法2创建新的Parser实例
var parser = new MessageParser<Person>(() => new Person());
Person restoredPerson2 = parser.ParseFrom(bbb);
// 方法3使用扩展方法
Person restoredPerson3 = Person.Parser.ParseFrom(bbb.AsMemory<byte>().ToArray());
Console.WriteLine("Hello, World!");
}
static void MMM()
{
string[] _topics = ["", ""];
List<IConsumer<string, string>> _consumers = new List<IConsumer<string, string>>();
// 为每个主题创建一个消费者
foreach (var topic in _topics)
{
var consumerConfig = new ConsumerConfig
{
BootstrapServers = "localhost:9092",
GroupId = $"consumer-group-{topic}",
AutoOffsetReset = AutoOffsetReset.Earliest,
EnableAutoCommit = false
};
var consumer = new ConsumerBuilder<string, string>(consumerConfig).Build();
consumer.Subscribe(topic);
_consumers.Add(consumer);
// 为每个消费者启动一个独立的任务
Task.Run(() => ConsumeMessages(consumer, topic));
}
}
static private async Task ConsumeMessages(IConsumer<string, string> consumer, string topic)
{
try
{
var consumeResult = consumer.Consume();
if (consumeResult != null)
{
Console.WriteLine($"收到消息 - 主题: {topic}, 键: {consumeResult.Message.Key}, 值: {consumeResult.Message.Value}");
// 手动提交偏移量
consumer.Commit(consumeResult);
}
}
catch (ConsumeException ex)
{
}
catch (OperationCanceledException)
{
}
}
//private async Task ProcessMessage(string topic, string key, string value)
//{
// // 根据不同的主题执行不同的处理逻辑
// switch (topic)
// {
// case "topic-1":
// await ProcessTopic1Message(key, value);
// break;
// case "topic-2":
// await ProcessTopic2Message(key, value);
// break;
// // ... 其他主题的处理逻辑
// default:
// _logger.LogInformation($"处理默认主题消息: {topic}, Key: {key}, Value: {value}");
// break;
// }
//}
//private async Task ProcessTopic1Message(string key, string value)
//{
// // 主题1的具体处理逻辑
// await Task.Delay(100); // 模拟处理耗时
// _logger.LogInformation($"处理主题1消息: Key={key}, Value={value}");
//}
//private async Task ProcessTopic2Message(string key, string value)
//{
// // 主题2的具体处理逻辑
// await Task.Delay(100); // 模拟处理耗时
// _logger.LogInformation($"处理主题2消息: Key={key}, Value={value}");
//}
//public Task StopAsync(CancellationToken cancellationToken)
//{
// _logger.LogInformation("停止Kafka消费者服务...");
// _cancellationTokenSource.Cancel();
// foreach (var consumer in _consumers)
// {
// consumer.Close();
// consumer.Dispose();
// }
// return Task.CompletedTask;
//}
}
}

16
duoge/duoge.csproj Normal file
View File

@@ -0,0 +1,16 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Confluent.Kafka" Version="2.11.1" />
<PackageReference Include="Google.Protobuf" Version="3.32.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
</ItemGroup>
</Project>

10
duoge/person.proto Normal file
View File

@@ -0,0 +1,10 @@
syntax = "proto3";
package tutorial;
// 定义一个Person消息类型
message Person {
string name = 1;
int32 id = 2;
string email = 3;
}