近年、インターネット技術の急速な発展に伴い、企業は増大するデータ量に直面しており、従来の集中型メッセージ キューでは分散システムのニーズを満たせないことが多くなっているため、分散メッセージ ルーティング システムの導入が進んでいます。人気があり、企業からの注目を集めます。
この記事では、go-zero と Apache Camel という 2 つのオープン ソース フレームワークを使用して、高パフォーマンスの分散メッセージ ルーティング システムを実装する方法を紹介します。
1. go-zero の概要
go-zero は、多くのコンポーネント (RPC、API、キャッシュ、ログなど) を統合するマイクロサービス フレームワークであり、豊富なライブラリを提供します。可用性が高く、パフォーマンスが高く、保守が容易な分散システムを迅速に構築できるツール。
go-zero の主な機能は次のとおりです:
1. gRPC ベース: protobuf を使用してインターフェイスを定義し、Go、Java、Python などの複数の言語をサポートします。
2. コードの自動生成: 定義されたプロト ファイルに基づいてモデル コードとサービス コードを自動的に生成します。
3. 複数のデータ ストレージのサポート: MySQL、Redis、MongoDB、およびその他のデータ ストレージ方法をサポートします。
4. 組み込みキャッシュ: 組み込みの Memcached および Redis、キャッシュの読み取り/書き込み分離、マルチレベル キャッシュなどをサポートします。
5. 軽量: 他のフレームワークと比較して、go-zero はコード量が非常に少なく、学習曲線が短く、非常に使いやすいです。
2. Apache Camel の概要
Apache Camel は、さまざまなアプリケーションのさまざまなコンポーネントを接続するために使用できる、オープンソースのルールベースのルーティングおよびメディエーション フレームワークです。
Camel の主な特徴は次のとおりです:
1. 拡張が簡単: Camel は多数のコンポーネントで設計されており、既存のルーターやデータ コンバーターは新しいコンポーネントを追加することで簡単に拡張できます。コンポーネント。
2. 多言語サポート: Java、C#、C、Python、Scala、Ruby など、さまざまな言語とプロトコル間の対話をサポートします。
3. 軽量: 他のフレームワークと比較して、Camel はコードの量が非常に少なく、学習曲線が短く、非常に使いやすいです。
4. マルチデータ ソースのサポート: MQ、HTTP、JMS、TCP、FTP などのさまざまなデータ ソース間の変換をサポートします。
3. go-zero と Apache Camel の組み合わせの実践
go-zero を使用して、メッセージ ルーティング、データ変換などのさまざまなリクエストを処理する RPC サーバーを構築します。 Apache Camel はデータ変換とルーティングを担当します。
このサーバー側では、go-zero のモデルとサービスの自動生成ツールを使用して、メッセージ ルーティングとデータ変換サービスを生成します。これらのサービスは gRPC 通信フレームワークに基づいており、インターフェイスは protobuf を使用して定義されます。
次に、Camel を使用してルーティング機能とデータ変換機能を実装します。ルーティングには、Camel のルーティング エンジンを使用してメッセージをターゲット サービスにルーティングします。データ変換には、Camel が提供するさまざまなデータ コンバーターを使用して、メッセージをターゲット形式に変換し、ターゲット システムに送信します。
この分散メッセージ ルーティング システムの構築プロセスをよりわかりやすく説明するために、簡単な例で説明します。
まず、シナリオがあります。注文管理システムは、処理のために注文情報を ERP システムに送信する必要があります。次の機能を実装する必要があります:
1. 注文管理システムから注文メッセージを受信します。
2. 注文メッセージを ERP システムが認識できる形式に変換します。
3. 変換された注文メッセージを ERP システムにルーティングします。
これらの機能を実装するには、次のようにします:
1. go-zero を使用して、注文管理システムから注文メッセージを受信するための RPC サーバーを構築します。
2. Camel が提供する JMS コンポーネントをメッセージミドルウェアとして使用し、ERP システムにオーダーメッセージを送信します。
3. Camel のデータ コンバーターを使用して、注文メッセージを ERP システムが認識できる形式に変換します。
4. Camel ルーティング ルールを定義して、変換された注文メッセージを ERP システムにルーティングします。
次に、具体的な実装手順を見てみましょう。
まず、go-zero で protobuf インターフェイスとデータ モデルを定義します:
syntax = "proto3"; package order; option go_package = "order"; message OrderInfo { string orderId = 1; string customerName = 2; string address = 3; string phone = 4; } service OrderService { // 接收订单信息 rpc SubmitOrder(OrderInfo) returns (Empty) {} }
go-zero 自動生成ツールを使用してモデルとサービス コードを生成します:
# 生成model make service.proto # 生成service make service
次に、 RPC サーバー側で、SubmitOrder メソッドを実装して注文管理システムから注文メッセージを受信します:
func (s *Service) SubmitOrder(ctx context.Context, req *order.OrderInfo) (*status.Empty, error) { orders := make([]string, 0) orders = append(orders, req.OrderId) orders = append(orders, req.CustomerName) orders = append(orders, req.Address) orders = append(orders, req.Phone) // 通过RPC发送消息到消息中间件 go sendToMQ(orders) return &status.Empty{}, nil } func sendToMQ(order []string) { // 发送MQ消息 orderInfo := map[string]interface{}{ "orderId": order[0], "customerName": order[1], "address": order[2], "phone": order[3], } fmt.Printf("Send to MQ: %v ", orderInfo) message := &jms.TextMessage{ Body: fmt.Sprintf("%v", orderInfo), } err := producer.Send(message) if err != nil { fmt.Printf("Failed to send message: %v ", err) } }
次に、Camel の JMS コンポーネントを使用して ActiveMQ メッセージ ミドルウェアに接続します:
from("activemq:queue:order.queue").process(new Processor() { public void process(Exchange exchange) throws Exception { // 接收MQ消息,转换数据格式 Map<String, Object> orderInfo = new HashMap<String, Object>(); orderInfo = exchange.getIn().getBody(Map.class); exchange.getIn().setBody(orderInfo); } });
Then Camel のデータ コンバータを使用して、注文メッセージを ERP システムが認識できる形式に変換します:
from("activemq:queue:order.queue").process(new Processor() { public void process(Exchange exchange) throws Exception { // 接收MQ消息,转换数据格式 Map<String, Object> orderInfo = new HashMap<String, Object>(); orderInfo = exchange.getIn().getBody(Map.class); // 数据转换 String json = "{"order_id": "" + orderInfo.get("orderId") + """ + ", "customer_name": "" + orderInfo.get("customerName") + """ + ", "address": "" + orderInfo.get("address") + """ + ", "phone": "" + orderInfo.get("phone") + """ + "}"; exchange.getIn().setBody(json); } });
最後に、変換された注文メッセージを ERP システムにルーティングする Camel ルーティング ルールを定義します:
from("activemq:queue:order.queue").process(new Processor() { public void process(Exchange exchange) throws Exception { // 接收MQ消息,转换数据格式 Map<String, Object> orderInfo = new HashMap<String, Object>(); orderInfo = exchange.getIn().getBody(Map.class); // 数据转换 String json = "{"order_id": "" + orderInfo.get("orderId") + """ + ", "customer_name": "" + orderInfo.get("customerName") + """ + ", "address": "" + orderInfo.get("address") + """ + ", "phone": "" + orderInfo.get("phone") + """ + "}"; exchange.getIn().setBody(json); } }).to("http://erp.com/order");
上記のコードでは、Camel のルーティング エンジンとデータ コンバーターを使用して、注文メッセージを変換し、ERP システムにルーティングします。
4. 概要
この記事では、go-zero と Apache Camel の 2 つのオープン ソース フレームワークを使用して、高パフォーマンスの分散メッセージ ルーティング システムを実装する方法を紹介します。 go-zero と Camel の機能と利点を使用することで、高性能、高可用性、容易なメンテナンスを備えた分散メッセージ ルーティング システムをより適切に開発でき、企業に大きな価値をもたらします。
以上がgo-zero と Apache Camel の組み合わせの実践: 高性能分散メッセージ ルーティング システムの構築の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。