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

推薦する

回答: レンガ職人になるのはいかがですか?レンガ職人のよくある問題、ぜひここで質問してください!

BandwagonHost VPS は中国で非常に人気があり、多くの初心者が BandwagonHo...

Kubernetes クラスタ管理者戦略: ポッドのスケジュールを理解する

このガイドでは、ポッド スケジューリングの技術を習得するために必要な知識とスキルを身に付けることがで...

複合マーケティングにより、SKYCC の売上は引き続き急上昇中でしょうか?

最近、私はSKYCC複合マーケティングソフトウェアのWeiboマーケティングに注目しました。このマー...

簡単な議論:百度の新しいアルゴリズムは静かに登場した

SEO担当者がウェブサイトのランキングを上げるために嘆き、奮闘し、あらゆる手段を試している間に、Ba...

検索エンジンのアルゴリズムはキーワードのランキングが不安定であると判断する

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

VMware、2023年度第4四半期および通期の業績を発表

VMware (NYSE: VMW) は本日、2023 年度第 4 四半期および通年の業績を発表しま...

サンフォーとファーウェイがクラウドベースの未来に向けて協力

我が国の「新インフラ」戦略が加速期に入るにつれ、クラウドコンピューティングは新技術インフラの一部とし...

ビットコインは深いロックインゾーンに入り、コインに投機するという考え方は良くない

最近、インターネット上でビットコインに関する報道が盛んに行われています。多くの報道では、ビットコイン...

VPSBlast [Banwagong] - $6.99/512m メモリ/256mvswap/10gSSD/500g トラフィック/6 データセンター

VPSBlast は IT7 のメイン VPS ブランドです。もちろん、ローエンド VPS ブランド...

ウェブサイト最適化の初期段階で重要な4つの分析タスク

SEO 担当者は、業務依頼を受けてもすぐにウェブサイトの最適化作業を開始するのではなく、まずウェブサ...

無制限帯域幅のベトナム VPS: tothost、20% 割引、最低 $25/年、VMware 仮想化、100Mbps 帯域幅

tothost (~) は現在、ベトナム VPS を 20% 割引で提供しており、月額 2.4 ドル...

2023 年の主要なクラウド コンピューティングとセキュリティのトレンド

研究機関は2023年に強い経済的逆風が吹くと予測しており、企業はより少ないリソースでより多くの成果を...

初心者向けのローカルグループ購入ウェブサイトの構築方法

みなさん、こんにちは。A5 Webmaster Network に投稿するのは今回が初めてです。地元...

Friends Linkプラットフォームは、初心者のウェブマスターがアクセスしやすいプラットフォームです。

Friends Linkプラットフォームは、初心者のウェブマスターがアクセスしやすいプラットフォーム...