SpringBoot-ニュース

1.メッセージサービスの基本概念

1.メッセージサービスの2つの重要な概念:
メッセージブローカー(メッセージサーバー)と宛先(宛先)。メッセージ送信者がメッセージを送信すると、メッセージブローカーに引き継がれ、メッセージブローカーはメッセージの配信を保証します。指定された宛先へ。

2.メッセージキューには、主に2つの形式の宛先があります。

(1)キュー:ポイントツーポイント通信。

  • 送信者はメッセージを送信し、メッセージブローカーはそれをキューに入れ、必要に応じて、メッセージ受信者はキューからメッセージコンテンツを取得します。

(2)トピック:メッセージのパブリッシュ/サブスクライブ通信。

  • 送信者がトピックにメッセージを送信し、複数の受信者がこのトピックをサブスクライブすると、メッセージが到着すると同時にメッセージが受信されます。

3.メッセージキューは主に次のように完了できます。
(1)非同期処理
アプリケーション要求を順番に処理する必要がないため、システム全体のスループットが向上します。
ここに画像の説明を挿入

(2)
アプリケーション間のデカップリングアプリケーションを関連付ける場合、あまり多くのインターフェースを埋め込む必要がないため、カップリングの程度が大幅に低下する可能性があります。
ここに画像の説明を挿入

(3)トラフィックのピーク削減
スパイクビジネスを処理する場合、バックエンドサーバーは独自の機能に従ってビジネスを処理できます。これにより、サーバーへのプレッシャーをある程度軽減し、サーバーの破壊を防ぐことができます。
ここに画像の説明を挿入
4.メッセージサービスプロトコルの仕様

(1)JMS(Javaメッセージサービス)JAVAメッセージサービス

  • Java API
  • JMSはJAVAAPIレベルで標準を定義します。Javaシステムでは、複数のクライアントがアプリケーション変更コードなしでJMSを介して対話できますが、クロスプラットフォームのサポートは不十分です。
  • JVMメッセージブローカーの仕様に基づくと、ActiveMQとHornetMQはJMSの実装です。

(2)AMQP(Advanced Message Queuing Protocol)

  • ネットワークレベルのプロトコル
  • 高度なメッセージキュープロトコルもメッセージブローカー仕様であり、JMSと互換性があります
  • AMQPは、ワイヤーレベルレイヤーのプロトコル標準を定義します。当然、クロスプラットフォームおよびクロス言語の特性があります。
  • RabbitMQはAMQPの実装です。

(3)JMSとAMQPの比較

JMS AMQP
定義 Java API ネットワークレベルのプロトコル
クロスプラットフォーム/言語ですか 番号 はい
メッセージモデル (1)ポイントツーポイント
(2)パブリッシュ/サブスクライブ
(1)直接交換
(2)ファンアウト交換
(3)トピックの変更
(4)ヘッダー交換
(5)システム交換の
最後の4つは、JMSのpub / subモデルと大差ありませんが、ルーティングメカニズムのみがより詳細になっています。
サポートメッセージタイプ TextMessage、
MapMessage、
BytesMessage、
StreamMessage、
ObjectMessage、
Message(メッセージヘッダーと属性のみ)
byte []実際のアプリケーションでは、シリアル化して送信できる複雑なメッセージがあります。

5.Springによるメッセージサービスのサポート

  • spring-jmsはJMSのサポートを提供します
  • spring-rabbitはAMQPのサポートを提供し、メッセージブローカーに接続するためにConnectionFactoryの実装を必要とします
  • メッセージを送信するためにJmsTemplate、RabbitTemplateを提供します
  • @JmsListener(JMS)、@ RabbitListener(AMQP)アノテーションは、メソッドでメッセージエージェントによって公開されたメッセージを監視します
  • @ EnableJms、@ EnableRabbit有効化サポート

6、メッセージサービスのSpringBoot構成

  • JmsAutoConfiguration
  • RabbitAutoConfiguration

次に、AMQPの実装-RabbitMQ

RabbitMQは、erlang言語に基づいて開発されたAMQP(Advanved Message Queue Protocol)のオープンソース実装です。

1.基本的な考え方

(1)メッセージ
メッセージは、メッセージヘッダーとメッセージ本文で構成されます。メッセージ本文は不透明であり、メッセージヘッダーは、ルーティングキー(ルーティングキー)、優先度(他のメッセージに対する優先度)、配信モード(メッセージに永続ストレージが必要な場合があることを示す)など、一連のオプションの属性で構成されます。等

(2)パブリッシャー
メッセージのプロデューサーは、メッセージをエクスチェンジに公開するクライアントアプリケーションです。

(3)Exchange
サーバーのスイッチは、プロデューサーから送信されたメッセージを受信し、これらのメッセージをサーバーのキューにルーティングするために使用されます。スイッチは、メッセージの宛先を決定します。Exchangeには、ダイレクト(デフォルト)、ファンアウト、トピック、ヘッダーの4種類があります。

(4)
メッセージを保存するために使用されるキューメッセージキュー。これは、メッセージのコンテナーであり、メッセージの終わりです。メッセージは1つ以上のキューに入れることができます。メッセージはキューにあり、コンシューマーがこのキューに接続してメッセージを削除するのを待っています。

(5)バインディング
バインディング。メッセージキューと交換の間の関連付けに使用されます。バインディングは、交換とメッセージキューをルーティングキーで接続するルーティングルールです。ExchangeとQueueのバインディングは、多対多の関係になる可能性があります。

(6)
TCP接続などの接続ネットワーク接続。

(7)チャネル
、多重化接続における独立した双方向データストリームチャネル。チャネルは、実際のTCP接続内で確立された仮想接続です。AMQPコマンドはチャネルを介して送信されます。メッセージの公開、キューへのサブスクライブ、メッセージの受信のいずれであっても、これらのアクションはすべてチャネルを介して完了します。オペレーティングシステムがTCPを確立して破棄するのは非常にコストがかかるため、TCP接続を再利用するためにチャネルの概念が導入されています。

(8)コンシューマー
メッセージコンシューマー、メッセージキューからメッセージを取得できるクライアントアプリケーション。

(9)仮想ホスト
仮想ホスト。スイッチ、メッセージキュー、および関連オブジェクトのバッチを表します。仮想ホストは、同じ認証および暗号化環境を共有する独立したサーバードメインです。各仮想ホストは、基本的に、独自のキュー、スイッチ、バインディング、およびアクセス許可メカニズムを備えたRabbitMQサーバーのミニバージョンです。VhostはAMQPの概念の基礎であり、接続時に指定する必要があります。RabbitMQの
デフォルトのvhostはです/

(10)ブローカー
はメッセージキューサーバーエンティティを表します
ここに画像の説明を挿入

2.RabbitMQの操作メカニズム

(1)
AMQPでのメッセージルーティングAMQPのメッセージルーティングプロセスとJava開発者が精通しているJMSの間には、いくつかの違いがあります。ExchangeとBindingの役割がAMQPに追加されました。プロデューサーはメッセージをExchangeに公開し、BindingはExchangeのメッセージを送信するキューを決定します。

(2)Exchange
Exchangeには、メッセージを配信する際のさまざまな配信戦略があります。現在、ダイレクト、ファンアウト、トピック、およびヘッダーの4つのタイプがあります。ヘッダーは、現在ほとんど使用されていないルーティングキーではなく、AMQPメッセージヘッダーを介してメッセージキューと一致します。

直接:メッセージ内のルーティングキーは、キュー名と完全に一致する必要があります。

ファンアウト:(パブリッシュ/サブスクライブ)ファンアウトタイプの交換に送信される各メッセージは、すべてのバインドされたキューに配信されます。ファンアウトスイッチは、サブネットブロードキャストのようにルーティングキーを処理せず、サブネット内の各ホストがメッセージのコピーを取得します。ファンアウトタイプは、メッセージを転送するのに最も速いタイプです。

トピック:ルーティングキーをパターンに一致させます。2つのワイルドカード:#0個以上の単語に*一致し、1つの単語に一致します。
ここに画像の説明を挿入

3.RabbitMQのインストールとテスト

(1)RabbitMQをプルします

docker pull 阿里云镜像加速地址/library/rabbitmq:3-management

(2)インストールが成功したかどうかを確認します

docker images

ここに画像の説明を挿入

(3)RabbitMQ
5672の起動:サーバーポート
15672:バックグラウンド管理インターフェイスポート

docker run -d -p 5672:5672 -p 15672:15672 --name myRabbitMQ 92c743b6c055

(4)実行中のコンテナ
docker psを表示します
ここに画像の説明を挿入
(5)バックグラウンド管理インターフェイスにアクセスし
ますデフォルトのユーザー名/パスワードはguest / guestです
ここに画像の説明を挿入

(6)テスト

1)エクスチェンジとキューの
追加新しいエクスチェンジを
ここに画像の説明を挿入
追加すると、合計3つのエクスチェンジが
ここに画像の説明を挿入
追加されます。4つのキューを追加します。
ここに画像の説明を挿入

2)バインディング

直接バインディング:
ここに画像の説明を挿入
ここに画像の説明を挿入
ファンアウトバインディング:
ルーティングルールをバインドする必要はありません。
ここに画像の説明を挿入

トピックバインディング:
ここに画像の説明を挿入
3)メッセージ送信テスト:
キューの場合、ルーティングキーとキュー名のみが完全に一致します。
ここに画像の説明を挿入
受信メッセージ:
ここに画像の説明を挿入
ここに画像の説明を挿入
ファンアウトの場合、ルーティングキーが何であっても、ブロードキャストの形式ですべてのキューに送信されます
ここに画像の説明を挿入
。トピックの場合:
指定されたルーティングルールに一致するキューのみがメッセージを受信できます。ここではcbj.newsとglp.newsのみです。ニュースを受け取ることができます。
ここに画像の説明を挿入

4.SpringBootとRabbitMQの統合

RabbitAutoConfiguration
RabbitProperties:RabbitMQの構成をカプセル化します
RabbitTemplate:メッセージをRabbitMQに送受信します
AmqpAdmin:システム管理機能コンポーネント

(1)依存関係を導入する

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

(2)application.properties構成

spring.rabbitmq.host=47.94.230.49
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

(3)
メッセージの送受信をテストするRabbitMQ

  • send(exchange、routekey、message); sendを使用してメッセージを送信します。メッセージはそれ自体で作成する必要があります(メッセージヘッダーとメッセージ本文を含む)
  • convertAndSend(exchange、routeKey、object):オブジェクトはデフォルトでメッセージ本文であり、自動的にシリアル化されてRabbitmqに送信されます。

ここに画像の説明を挿入

RabbitMQ管理インターフェースから取得したデータ:
ここに画像の説明を挿入

RabbitTemplateは、メッセージを処理するときにデフォルトでSimpleMessageConverter()を使用し
ここに画像の説明を挿入
ます。RabbitAutoConfigurationでRabbitTemplateを構成する場合、コンテナーから独自のMessageConverterをインポートできます。
ここに画像の説明を挿入
(4)MessageConverterをカスタマイズする

@Configuration
public class myAMQPConfig {
    
     
    @Bean
    public MessageConverter myMessageconverter(){
    
    
       return new Jackson2JsonMessageConverter();
    }
}

メッセージコンバータの設定が完了したら、次の手順を実行します。
ここに画像の説明を挿入
(5)メッセージリストの監視メッセージリストの
リッスン、メッセージのリッスンに
使用@RabbitListenerするリアルタイムメッセージの受信、Rabbit関連のメモを開く必要があります@EnableRabbit

メインのスタートアップクラスに注釈を追加します。Messageを使用し@EnableRabbit
ここに画像の説明を挿入
てメッセージ本文とメッセージヘッダーを取得できます
ここに画像の説明を挿入
(6)JavaプログラムでExchange、キュー、およびバインディングルールを作成します
AmqpAdmin:Exchange、キュー、バインディングの作成に使用される管理コンポーネント

Exchangeの作成:
ここに画像の説明を挿入
キューを作成します。

ここに画像の説明を挿入
バインディング関係を作成します。

Binding(
文字列の宛先、バインドされる宛先
Binding.DestinationType destinationType、宛先タイプ
文字列交換、交換
文字列routingKey、ルーティングルール
@Nullable Map <String、Object>引数パラメーター

ここに画像の説明を挿入

3、JMS実装-ActiveMQ

アップグレード待ち

おすすめ

転載: blog.csdn.net/glpghz/article/details/112387496