自研 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」をオープンソース化

推薦する

インターネットマーケティング:友人の輪はビジネスサークルになる運命にある

タイトルにあるように、友人の輪はビジネスの輪になる運命にあります。このフレーズはオフラインで最もよく...

クラウド コンピューティングの一般的な 7 つのアプリケーション シナリオ

クラウド コンピューティングは、コストを削減し、柔軟性と弾力性を高め、リソースの使用を最適化すること...

ビッグデータが急成長し、我が国のクラウドコンピューティングは「黄金の窓」の時代を迎えている

[[206431]]クラウドコンピューティングは、電力網、交通網、インターネットと同様の「国家インフ...

レガシーアプリケーションを最新化するための Docker ツール

[51CTO.com クイック翻訳] 過去 2 年間、Docker は顧客と緊密に連携し、Docke...

ウェブマスターネットワークからの毎日のレポート:アップルが世界を変えた方法とジャック・マーがアリババを再構築した方法

1. ジャック・マーがアリババを再編:30社に分割し、上場に向けて3社を統合する可能性アリババは、同...

ホームページ最適化の詳細な手順

これまで、ホームページの質の悪さが原因でユーザーが離脱してしまったウェブサイトは数え切れないほどあり...

speedykvm-$7/kvm/1g メモリ/500g ハードディスク/2.5T トラフィック/G ポート/Windows

Incero Computer Room の Speedykvm がリリースされてから、ほぼ 1 か...

検索エンジンと仲良くなる

新規の電子商取引企業のほとんどは、ウェブサイトを作成しても必ずしも顧客が訪問するわけではないことに遅...

人工知能がクラウドコンピューティングの発展に与える影響

クラウド コンピューティングは、組織の業務、情報の保存、意思決定の方法を変え、技術革新と分析研究への...

最速の米国VPS、中国に適した米国VPS

最も速い米国の VPS はどれですか?最速の米国VPS(米国高速VPS、高速米国VPS)、中国のユー...

天一クラウドの「ハードテクノロジーコア」が河北省廊坊市に核酸検査プラットフォームを提供

最近、河北省での流行の再拡大が再び全国の人々を不安にさせている。今回の流行が発生した後、河北省は直ち...

年末レビュー: 2012 年の電子商取引マーケティング ツール トップ 10

2012 年の電子商取引マーケティングは、「制限はないが、広範囲ではない」と言えます。資本引き締めの...

冬は過ぎ去りますが、ウェブマスターにとって春はまだ遠いのでしょうか?

最近のウェブマスターの生活は極めて暗く、給料が高くなる人もいれば、低くなる人もいます。 Baidu ...

Googleブログ検索ランキングに影響を与える要因

Google ブログ検索は、ブログサイトの構築とプロモーションに非常に重要なツールです。一般的に、ブ...