Inhaltsverzeichnis

Verwendung von Protocol Buffers zur Definition von Nachrichtentypen

Damit eine Nachricht über eine andere Laufzeit als die InProcessRuntime gesendet werden kann, muss sie als Protocol Buffers-Nachricht definiert werden. Dies liegt daran, dass die Nachricht mithilfe von Protocol Buffers serialisiert und deserialisiert wird. Diese Anforderung kann in Zukunft durch die Zulassung von Konvertern, benutzerdefinierter Serialisierung oder anderen Mechanismen gelockert werden.

Wie Protocol Buffers in ein .NET-Projekt aufgenommen werden

Die .proto-Datei, die die Nachrichtentypen definiert, muss in das Projekt aufgenommen werden, was automatisch die C#-Klassen für die Nachrichten generiert.

  1. Fügen Sie das Grpc.Tools-Paket in Ihre .csproj-Datei ein
  <PackageReference Include="Grpc.Tools" PrivateAssets="All" />
  1. Erstellen und fügen Sie eine .proto-Datei in das Projekt ein
<ItemGroup>
  <Protobuf Include="messages.proto" GrpcServices="Client;Server" Link="messages.proto" />
</ItemGroup>
  1. Definieren Sie Ihre Nachrichten gemäß der Protocol Buffers Language Guide
syntax = "proto3";

package HelloAgents;

option csharp_namespace = "MyAgentsProtocol";

message TextMessage {
    string Source = 1;
    string Content = 2;
}
  1. Schreiben Sie Code gegen die generierte Klasse für die Handhabung, das Senden und das Veröffentlichen von Nachrichten
using Microsoft.AutoGen.Contracts;
using Microsoft.AutoGen.Core;
using MyAgentsProtocol;

[TypeSubscription("default")]
public class Checker(
    AgentId id,
    IAgentRuntime runtime,
    ) :
        BaseAgent(id, runtime, "MyAgent", null),
        IHandle<TextMessage>
{
    public async ValueTask HandleAsync(TextMessage item, MessageContext messageContext)
    {
        Console.WriteLine($"Received message from {item.Source}: {item.Content}");
    }
}