自研 Pulsar Starter:Winfun-Pulsar-Spring-Boot-Starter

自研 Pulsar Starter:Winfun-Pulsar-Spring-Boot-Starter

[[420613]]

マイルストーン

バージョン機能ポイント著者仕上げる
1.0.0 メッセージを送信するための PulsarTemplate をサポートし、メッセージをリッスンするための Consumer をインスタンス化するためのカスタム アノテーションをサポートします。 ハウインファン
1.1.0 コンシューマ スレッド プールの動的なオープン/クローズをサポートし、コンシューマ スレッド プール パラメータのカスタム構成をサポートします。 ハウインファン
1.2.0 Springコンテナが停止したときに、すべてのPulsar関連リソースを解放することをサポートします。 ハウインファンやるべきこと
1.3.0 複数のPulsarデータソースをサポートハウインファンやるべきこと

1. 背景

新世代のクラウドネイティブ メッセージ キューとして、Pulsar は開発者の間でますます人気が高まっています。現在のプロジェクトのほとんどは SpringBoot をベースに開発されていますが、今のところ Pulsar 用の人気があり成熟したスターターは存在しないため、Pulsar API を一般的に使用する際に大量の重複コードを回避するために、独自にスターターを作成する必要があります。

2. デザインアイデア

これは設計の最初のバージョンなので、シンプルさから始め、最初から複雑になりすぎないようにし、Pulsar API のネイティブ機能を維持するようにします。

2.1、パルサークライアント

プロデューサーとコンシューマーの両方が PulsarClient によって作成されることは誰もが知っています。

もちろん、PulsarClient はビジネス ニーズに応じて多くのパラメータをカスタマイズできますが、設計の最初のバージョンでは、より一般的に使用されるパラメータのみがサポートされます。

当社のコンポーネントは次の機能をサポートしています。

  • PulsarClient パラメータ設定の外部化をサポートします。パラメータはapplicatin.propertiesで設定できます。
  • 構成プロンプト情報を提供するために、applicatin.properties をサポートします。
  • 外部構成ファイルを読み取り、パラメータに従って PulsarClient をインスタンス化し、IOC コンテナに挿入します。

2.2 プロデューサー

プロデューサーはメッセージを送信するコンポーネントです。

  • ここでは、要件に応じて対応する Producer インスタンスを作成できるテンプレート クラスを提供します。
  • Producer インスタンスの繰り返し作成を回避するために、Topic<->Producer 関係のキャッシュをサポートします。
  • 同期/非同期メッセージ送信をサポートします。

2.3 消費者

コンシューマーはメッセージを消費するコンポーネントです。

  • ここでは抽象クラスを提供します。開発者は、この実装クラスを統合し、メッセージを消費するための論理メソッドである doReceive メソッドを実装するだけで済みます。
  • さらに、トピック、テナント、名前空間などのカスタム Consmuer 構成をサポートするカスタム アノテーションも提供されます。
  • 上記のカスタム アノテーションを実装クラスに追加すると、コンポーネントは対応する Consumer インスタンスを自動的に認識して生成します。
  • 同期/スレッド プールの非同期消費をサポートします。

3. 使用例

3.1.依存関係の導入

  1. <依存関係>  
  2. <グループID> io.github.howinfun</グループID>  
  3. <artifactId> winfun- pulsar - spring -boot-スターター</artifactId>  
  4. <バージョン> 1.1.0</バージョン>  
  5. </依存関係>  

3.2.設定を追加

  1. pulsar.service-url=pulsar://127.0.0.1:6650
  2. pulsar.tenant=winfun
  3. pulsar.namespace=研究
  4. パルサー操作タイムアウト=30
  5. pulsar.io-スレッド=10
  6. pulsar.リスナースレッド=10

3.3 メッセージの送信

  1. /**
  2. * メッセージを送信
  3. * @著者: winfun
  4. **/
  5. @レストコントローラ
  6. @RequestMapping( "メッセージ" )
  7. パブリッククラスMessageController{
  8.  
  9. オートワイヤード
  10. プライベート PulsarTemplate pulsarTemplate;
  11. オートワイヤード
  12. プライベート PulsarProperties pulsarProperties;
  13.  
  14. /***
  15. * 指定されたトピックにメッセージを送信する
  16. * @author ウィンファン
  17. * @param トピック トピック
  18. * @param メッセージ メッセージ
  19. * @return {@link 文字列 }
  20. **/
  21. @GetMapping( "/{トピック}/{メッセージ}" )
  22. パブリック文字列 send(@PathVariable( "topic" ) 文字列 topic,@PathVariable( "msg" ) 文字列 msg) 例外をスローします {
  23. this.pulsarTemplate.createBuilder().persistent(ブール値.TRUE )
  24. .tenant(this.pulsarProperties.getTenant())
  25. .namespace(this.pulsarProperties.getNamespace())
  26. .topic(トピック)
  27. .send(メッセージ);
  28. 戻る  "成功" ;
  29. }
  30. }

3.4.消費メッセージ

  1. /**
  2. * @著者: winfun
  3. * @日付: 2021/8/20 午後 8:13
  4. **/
  5. 翻訳者
  6. @PulsarListener(トピック = { "テストトピック2" },
  7. スレッドプール = @ThreadPool(
  8. コアスレッド = 2、
  9. 最大コアスレッド数 = 3、
  10. threadPoolName = "テストスレッドプール" ))
  11. パブリッククラス ConsumerListener は BaseMessageListener を拡張します {
  12.  
  13. /**
  14. * 消費メッセージ
  15. * @param 消費者 消費者
  16. * @param msg メッセージ
  17. */
  18. @オーバーライド
  19. 保護されたvoid doReceived(Consumer<String> consumer, Message<String> msg) {
  20. log.info( "消費成功メッセージ: {}" , msg.getValue());
  21. 試す {
  22. 消費者はメッセージを確認します。
  23. } キャッチ (PulsarClientException e) {
  24. e.printStackTrace();
  25. }
  26. }
  27.  
  28. /***
  29. * 非同期消費を有効にするかどうか
  30. * @return {@link ブール値 }
  31. **/
  32. @オーバーライド
  33. パブリックブールenableAsync() {
  34. Boolean.TRUEを返します
  35. }
  36. }

4. ソースコード

ここではソースコードを分析しませんが、Github で確認できます。コードに関してご提案やご意見がございましたら、ぜひ MR をご提出ください。

<<:  クラウド データベースの選択に必読: 自分に合ったものが必ず見つかります!

>>:  マイクロソフト、クラウド環境向けセキュリティ評価アプリケーション「Cloud Katana」をオープンソース化

推薦する

OpenLiteSpeed+PHP+MariaDB/MySQL+WordPress+LiteSpeedCache を構築するワンクリック スクリプト

WordPress は、更新が速く、プラグイン、テーマ、開発者が多数存在するため、現在、世界で最も人...

過去 10 年間の中国の電子商取引の変化を簡単に見てみると、あなたはどれだけ貢献したのでしょうか?

10年前、オンラインショッピングを嘲笑したり、強く反対していた人々も、今ではその急速な発展に打ち負か...

簡単な議論:インターネット時代の資源協力をいかに実現するか

最近のインターネット経済の熱気は、小米の成功により、誰もがインターネットマーケティングを追求するきっ...

SEOの真の意味を10の側面から簡単に解説

最近、正確に言うと、過去 4 か月間、Baidu のアップデートはかなり混乱しています。純粋に手作業...

新しい東洋のライブ交通パスワード

「イースタンセレクション」のファン数がゼロから100万人に増えるまでに6カ月かかり、100万人から2...

10月26日の百度のKステーションはあなたが思っているものとは違う

2012年10月26日夜22時15分、老狗の目の前で百度がKされ、私はそれを現場で捕まえた。「天津s...

Alibaba Cloud 江江衛:Yitian + Feitian + CIPU の組み合わせはパフォーマンスが 20% 以上向上し、良好なパフォーマンスを発揮

11月3日、2022年雲奇大会において、アリババクラウドインテリジェンス副社長兼基本製品責任者の江江...

パンデミックがクラウドコンピューティングの災害復旧について教えてくれること

クラウド コンピューティングは、オンデマンドのインフラストラクチャと「無制限」の規模で予期しない状況...

オンラインマーケティングをより効率的に行うにはどうすればよいでしょうか?

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています入札プロモ...

SEM スキル: Baidu Union マーケティング情報をご紹介します

Baidu Union は、Baidu プロモーションの中核製品であり、検索プロモーション製品の拡張...

エンタープライズEDMマーケティングプランの設計スキルを解読する

ますます多くの企業が企業のメールマーケティングを選択し、EDMの才能を採用し、EDMマーケティングメ...

Weiboマーケティングをビジネスに活用する方法

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービス1. 企業がWeiboマ...

ショッピングガイドサイト運営の核心:ユーザー視点からの分析

Baiduでショッピングガイドのウェブサイトを検索すると、たくさんあることがわかりますが、よく見ると...

ユーザーのニーズに基づかないSEOはフーリガンだ

5月4日頃、百度は大規模なアルゴリズムのアップグレードとアップデートを実施しました。百度のアルゴリズ...