Beispiel #1
0
        static async Task RunAsync()
        {
            int process = System.Diagnostics.Process.GetCurrentProcess().Id;

            Console.WriteLine($"サブスクライバーをプロセス {process} で起動しました。");

            // コンソールからパラメーターを受け取る
            Console.WriteLine("bootstrap servers を入力してください(省略時 127.0.0.1):");
            var bootstrapServers = Console.ReadLine();

            if (string.IsNullOrEmpty(bootstrapServers))
            {
                bootstrapServers = "127.0.0.1";
            }

            Console.WriteLine($"コンシューマーグループIDを入力してください(省略時 {Constants.DefaultComsumerGroupID}):");
            var groupID = Console.ReadLine();

            if (string.IsNullOrEmpty(groupID))
            {
                groupID = Constants.DefaultComsumerGroupID;
            }

            Console.WriteLine($"トピックを入力してください(省略時 {Constants.DefaultTopic}):");
            var topic = Console.ReadLine();

            if (string.IsNullOrEmpty(topic))
            {
                topic = Constants.DefaultTopic;
            }

            // キャンセルトークンを生成する
            using var cancelTokenSource = new CancellationTokenSource();

            Console.CancelKeyPress += (_, e) =>
            {
                e.Cancel = true;
                cancelTokenSource.Cancel();
            };

            // 動作設定を生成する
            var subscriberSetting = new MessageSubscriberSetting()
            {
                BootstrapServers = bootstrapServers,
                ConsumerGroupID  = groupID
            };

            // observable パターンでメッセージを監視する
            var factory = new SampleMessageSubscriberFactory(subscriberSetting, new SampleLogger());

            Console.WriteLine($"メッセージの受信処理を開始します。終了するには Ctrl+C を押してください。");

            var subscriber = factory.CreateSubscriber <SampleMessageKey, SampleMessageBody>(topic);

            using var releaser = subscriber.Subscribe(new SampleMessageObserver());

            await subscriber.SubscribeAsync(cancelTokenSource.Token).ConfigureAwait(false);

            Console.WriteLine("メッセージの受信処理を終了しました。");
        }
Beispiel #2
0
 /// <summary>
 /// インスタンスを生成します。
 /// </summary>
 /// <param name="keyDeserializer">キーに対するデシリアライザ</param>
 /// <param name="messageDeserializer">メッセージに対するデシリアライザ</param>
 /// <param name="subscriberSetting">動作設定</param>
 /// <param name="topic">トピック</param>
 /// <param name="logger">ロガー</param>
 public MessageSubscriber(IDeserializer <TKey> keyDeserializer, IDeserializer <TMessage> messageDeserializer, MessageSubscriberSetting subscriberSetting, string topic, ILogger logger) : base()
 {
     KeyDeserializer     = keyDeserializer;
     MessageDeserializer = messageDeserializer;
     SubscriberSetting   = subscriberSetting;
     Topic  = topic;
     Logger = logger ?? Microsoft.Extensions.Logging.Abstractions.NullLogger.Instance;
 }
Beispiel #3
0
        /// <summary>
        /// コンシューマーの動作設定を取得します。
        /// </summary>
        /// <param name="consumerSetting">コンシューマーの動作設定</param>
        /// <returns>動作設定のキーと値の組み合わせ</returns>
        protected IEnumerable <KeyValuePair <string, string> > GetConsumerConfig(MessageSubscriberSetting consumerSetting)
        {
            if (consumerSetting.BootstrapServers == null || consumerSetting.BootstrapServers == "")
            {
                throw new NullReferenceException("ブートストラップサーバーが設定されていません。");
            }

            if (consumerSetting.ConsumerGroupID == null || consumerSetting.ConsumerGroupID == "")
            {
                throw new NullReferenceException("コンシューマーグループIDが設定されていません。");
            }

            return(new ConsumerConfig()
            {
                BootstrapServers = consumerSetting.BootstrapServers,
                GroupId = consumerSetting.ConsumerGroupID,
                EnableAutoCommit = false,
                AutoOffsetReset = AutoOffsetReset.Earliest
            });
        }
 /// <summary>
 /// インスタンスを生成します。
 /// </summary>
 /// <param name="subscriberSetting">サブスクライバーの動作設定</param>
 /// <param name="logger">ロガー</param>
 protected MessageSubscriberFactoryBase(MessageSubscriberSetting subscriberSetting, ILogger logger)
 {
     SubscriberSetting = subscriberSetting;
     Logger            = logger;
 }
Beispiel #5
0
 /// <summary>
 /// インスタンスを生成します。
 /// </summary>
 /// <param name="subscriberSetting">サブスクライバーの動作設定</param>
 /// <param name="logger">ロガー</param>
 internal SampleMessageSubscriberFactory(MessageSubscriberSetting subscriberSetting, ILogger logger)
     : base(subscriberSetting, logger)
 {
 }