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

推薦する

フォーラム管理には革新的な考え方を取り入れる必要があります。フォーラム管理を革新する方法

フォーラムの管理は、常にモデレーターにとって大きな問題でした。モデレーターの考えは、管理が厳しすぎる...

爽やかなページを作るための優れたウェブサイトのビジュアルデザインの6つのポイント

月収10万元の起業の夢を実現するミニプログラム起業支援プランすべてのウェブサイトには魅力があり、それ...

外部リンクを構築するための3段階、3ステップの戦略は、ウェブサイトの成功に役立ちます

検索エンジンにとって、外部リンクはウェブサイトの一部であり、ウェブサイトにとって、外部リンクはウェブ...

360 Search が「Haosou」検索エンジンを開始

360 Searchは1月7日、独立ブランドhaosou.comを正式に立ち上げました。元のドメイン...

Yidianyun:香港CN2クラウドはたった1.5元(更新料15元)、高防御専用サーバーは199元(24コア/32Gメモリ/240gSSD/30M帯域幅)

新興企業である易電雲計算は、主にクラウドサーバー、クラウドストレージ、独立サーバーなどの事業を手掛け...

なぜウェブサイトの SEO を改善できないのでしょうか?

今日、ある人がフォーラムに、自分のウェブサイトは以前のものを超えることは決してできず、他の人はただウ...

ウェブサイトの重みはランキングに直接関係しますか?

権威の高いウェブサイトを追い求める人は多く、外部リンクを貼るにしても、友好的なリンクを他者と交換する...

ユーザーエクスペリエンスとは何ですか?

昨日、友達と飲んでいたとき、誰かがユーザーエクスペリエンスについて話し始めました。実際、さまざまな批...

SEOに関する誤解をまとめました

現在、我が国ではインターネットの発展に伴い、さまざまな業界での競争がますます激しくなっています。オン...

分類情報ウェブサイトを巧みに利用して、従来の業界のSEOトラフィックを迅速に収益化します。

序文: 1. トラフィック収益化とコンバージョン率の研究に注力しており、1~2年ごとにトラフィック収...

ウールとギャング:インターネット クラウドソーシングをファッションに導入

「編み物」といえば、多くの人は次のような光景を思い浮かべるでしょう。庭のロッキングチェアに座り、老眼...

ローカルウェブサイト運営に関する経験と洞察を共有する

私はずっと、ウェブサイトのメンバーの熟練度とユーザーの粘着性をどのように向上させるかについて考えてい...

Kubernetes を一緒に学ぶ: ワークロードのハイライト

容器コンテナ:コンテナは、コンテナ イメージの実行状態です。これは標準のコンテナ ランタイム上で実行...

GenAI はクラウド コンピューティングの ROI を向上できますか?

既存の企業は、クラウド コンピューティングの導入を検討する際にジレンマに直面します。メリットは魅力的...

信頼性の高いホスティングサービス5USD/月/768MB RAM/100GB HDD/1TBトラフィック

reliablehostingservices.net は 2010 年に設立され、ドメイン名は 2...