■ MessageHeader 클래스를 사용해 메시지 헤더에서 데이터를 전파하는 방법을 보여준다.
▶ CustomMessage.cs
1 2 3 4 5 6 7 8 9 |
namespace TestProject; /// <summary> /// 커스텀 메시지 /// </summary> /// <param name="Message">메시지</param> public record CustomMessage(string Message); |
▶ Program.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
using Proto; namespace TestProject; /// <summary> /// 프로그램 /// </summary> class Program { //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Static //////////////////////////////////////////////////////////////////////////////// Private #region 헤더 전파하기 - PropagateHeader(sender) /// <summary> /// 헤더 전파하기 /// </summary> /// <param name="sender">발송자</param> /// <returns>발송자</returns> private static Sender PropagateHeader(Sender sender) { return (context, target, envelope) => sender(context, target, envelope.WithHeader(context.Headers)); } #endregion #region 프로그램 시작하기 - Main() /// <summary> /// 프로그램 시작하기 /// </summary> private static void Main() { MessageHeader messageHeader = MessageHeader .Empty .With("UserID" , "사용자1") .With("Language", "한국어"); ActorSystem actorSystem = new ActorSystem ( ActorSystemConfig.Setup() with { ConfigureRootContext = context => context.WithHeaders(messageHeader) } ); Props props = Props.FromFunc ( context => { if(context.Message is CustomMessage message) { Console.WriteLine($"메시지 : {message.Message}"); foreach((string key, string value) in context.Headers) { Console.WriteLine($" 키 : {key}, 값 : {value}"); } } return Task.CompletedTask; } ); PID pid = actorSystem.Root.Spawn(props); IRootContext rootContext = actorSystem .Root .WithSenderMiddleware(PropagateHeader); rootContext.Send(pid, new CustomMessage("메시지1")); Console.WriteLine("프로그램을 종료하기 위해서 아무 키나 눌러 주시기 바랍니다."); Console.ReadKey(false); } #endregion } |