建立並連線至 RabbitMQ 代理程式 - Amazon MQ

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

建立並連線至 RabbitMQ 代理程式

代理程式是在 Amazon MQ 上執行的訊息代理程式環境。這是 Amazon MQ 的基本建置區塊。代理程式執行個體類別 (m5t3) 和大小 (largemicro) 的合併說明是代理程式執行個體類型 (例如,mq.m5.large)。

步驟 1:建立 RabbitMQ 代理程式

第一個最常見的 Amazon MQ 任務是建立代理程式。下列範例顯示如何使用 AWS Management Console 建立基本 Broker。

  1. 登入 Amazon MQ 主控台

  2. Select engine (選取引擎) 頁面中,選擇 RabbitMQ,然後選擇 Next (下一步)

  3. Select deployment mode (選取部署模式) 頁面上,選擇 Deployment mode (部署模式),例如,Cluster deployment (叢集部署),然後選擇 Next (下一步驟)

    • 單一執行個體代理程式由 Network Load Balancer (NLB) 後方的一個可用區域中的一個代理程式組成。代理程式會與您的應用程式和 Amazon EBS 儲存磁碟區進行通訊。如需詳細資訊,請參閱 單一執行個體代理程式

    • RabbitMQ cluster deployment for high availability (提供高可用性的 RabbitMQ 叢集部署) 是 Network Load Balancer 後面的三個 RabbitMQ 代理程式節點的邏輯分組,每個節點共用使用者、佇列,以及跨多個可用區域 (AZ) 的分散式狀態。如需詳細資訊,請參閱 高可用性的叢集部署

  4. Configure settings (進行設定) 頁面的 Details (詳細資訊) 區段中,執行以下動作:

    1. 輸入 Broker name (代理程式名稱)。

      重要

      請勿在經紀人名稱中添加個人身份信息(PII)或其他機密或敏感信息。代理程式名稱可 AWS 供其他服務存取,包括 CloudWatch 記錄檔。代理程式名稱不適用於私有或敏感資料。

    2. 選擇代理程式執行個體類型 (例如,mq.m5.large)。如需詳細資訊,請參閱 Broker instance types

    注意

    其他設定值」段落提供了啟用 CloudWatch 記錄檔和設定代理程式網路存取的選項。如果您建立沒有公開可存取性的私有 RabbitMQ 代理程式,則必須選取虛擬私有雲 (VPC) 並設定安全群組來存取您的代理程式。

  5. Configure settings (進行設定) 頁面的 RabbitMQ access (RabbitmQ 存取) 區段上,提供 Username (使用者名稱)Password (密碼)。以下限制適用於代理程式登入認證:

    • 使用者名稱只能包含英數字元、破折號、句點和底線 (- . _)。此值不得包含任何波狀符號 (~) 字元。Amazon MQ 禁止使用 guest 作為使用者名稱。

    • 密碼必須至少有 12 個字元、包含至少 4 個唯一字元,而且不得包含逗號、冒號或等號 (,: =)。

    重要

    不要在代理用戶名中添加個人身份信息(PII)或其他機密或敏感信息。代理程式使用者名稱可 AWS 供其他服務存取,包括 CloudWatch 記錄檔。代理程式使用者名稱不適用於私有或敏感資料。

  6. 選擇下一步

  7. Review and create (檢閱和建立) 頁面上,您可以檢閱您的選取項目,然後視需要編輯它們。

  8. 選擇 Create broker (建立代理程式)

    當 Amazon MQ 建立您的代理程式時,其會顯示 Creation in progress (正在建立) 狀態。

    建立代理程式大約需要 15 分鐘。

    成功建立代理程式後,Amazon MQ 會顯示 Running (執行中) 狀態。

    Amazon MQ console showing a broker named "MyBroker" with Running status. (AI generated)
  9. 選擇 MyBroker.

    在「」MyBroker頁面的「Connect」區段中,記下您的代理程式的 RabbitMQ Web 主控台URL,例如:

    https://b-c8349341-ec91-4a78-ad9c-a57f23f235bb.mq.us-west-2.amazonaws.com

    另外,請注意您的經紀人的安全AMQP端點。以下是的 amqps 端點公開接聽程式連接埠 5671 的範例。

    amqps://b-c8349341-ec91-4a78-ad9c-a57f23f235bb.mq.us-west-2.amazonaws.com:5671

步驟 2:將JVM基於應用程序連接到您的代理

建立 RabbitMQ 代理程式後,您可以將應用程式連接到它。下列範例示範如何使用 RabbitMQ Java 用戶端程式庫建立與代理程式的連線、建立佇列以及傳送訊息。您可使用各種語言支援的 RabbitMQ 用戶端程式庫來連線到 RabbitMQ 代理程式。如需支援的 RabbitMQ 用戶端程式庫的詳細資訊,請參閱 RabbitMQ 用戶端程式庫和開發人員工具

必要條件

注意

下列必要步驟僅適用於在沒有公用存取性的情況下建立的 RabbitMQ 代理程式。如果您正在建立具有公用存取性的代理程式,則可跳過這些步驟。

啟用VPC屬性

為了確保您的經紀人可以在您的內部訪問VPC,您必須啟用enableDnsHostnamesenableDnsSupportVPC屬性。如需詳細資訊,請參DNS閱 Amazon VPC 使用者指南VPC中的 Support。

啟用傳入連線

  1. 登入 Amazon MQ 主控台

  2. 從經紀人列表中,選擇經紀人的名稱(例如,MyBroker)。

  3. 在「」MyBroker頁面的「線」段落中,記下代理程式 Web 主控台和線路層級通訊協定的位址URL和連接埠。

  4. Details (詳細資訊) 區段的 Security and network (安全與網路) 下,選擇您的安全群組名稱或 Blue square icon with a white cloud and up arrow. (AI generated)

    接著顯示 [EC2儀表板] 的 [安全群組] 頁面。

  5. 從安全群組清單選擇您的安全群組。

  6. 在頁面的最下方,選擇 Inbound (傳入),然後選擇 Edit (編輯)

  7. 在 [編輯輸入規則] 對話方塊中,為您要公開存取的每個URL或端點新增規則 (下列範例顯示如何針對 Broker Web 主控台執行此動作)。

    1. 選擇 Add Rule (新增規則)。

    2. 選取「自訂」做為「類型」TCP。

    3. 針對 Source (來源),讓 Custom (自訂) 保持已選取狀態,然後輸入您希望能夠存取 Web 主控台的系統 IP 地址 (例如,192.0.2.1)。

    4. 選擇 Save (儲存)

      您的代理程式現在已可接受傳入連線。

新增 Java 相依性

如果您使用 Apache Maven 自動建置,請將以下相依性新增至 pom.xml 檔案。如需有關 Apache Maven 中的專案物件模型檔案的詳細資訊,請參閱POM.

<dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> <version>5.9.0</version> </dependency>

如果您使用 Gradle 自動建置,請宣告以下相依性。

dependencies { compile 'com.rabbitmq:amqp-client:5.9.0' }

匯入 ConnectionChannel 類別

RabbitMQ Java 客戶端使用它com.rabbitmq.client的頂級包,ConnectionChannelAPI類分別代表一個 AMQP 0-9-1 的連接和通道。在使用前匯入 ConnectionChannel 類別,如以下範例所示。

import com.rabbitmq.client.Connection; import com.rabbitmq.client.Channel;

建立 ConnectionFactory 並連接到您的代理程式

使用以下範例,透過給定的參數建立 ConnectionFactory 類別的執行個體。使用 setHost 方法來設定您稍早記下的代理程式端點。對於 AMQPS 線路層級連線, 使用連接埠 5671

ConnectionFactory factory = new ConnectionFactory(); factory.setUsername(username); factory.setPassword(password); //Replace the URL with your information factory.setHost("b-c8352341-ec91-4a78-ad9c-a43f23d325bb.mq.us-west-2.amazonaws.com"); factory.setPort(5671); // Allows client to establish a connection over TLS factory.useSslProtocol(); // Create a connection Connection conn = factory.newConnection(); // Create a channel Channel channel = conn.createChannel();

將訊息發佈至交換

您可使用 Channel.basicPublish 將訊息發佈至交換。下列範例會使用AMQPBuilder類別來建置具有內容型plain/text別的訊息屬性物件。

byte[] messageBodyBytes = "Hello, world!".getBytes(); channel.basicPublish(exchangeName, routingKey, new AMQP.BasicProperties.Builder() .contentType("text/plain") .userId("userId") .build(), messageBodyBytes);
注意

請注意,BasicProperties 是自動產生的持有人類別 AMQP 的內部類別。

訂閱佇列並接收訊息

您可以使用 Consumer 界面,藉由訂閱佇列來接收訊息。訂閱後,訊息就會在送達時自動傳送。

實作 Consumer 的最簡單方法是使用子類別 DefaultConsumerDefaultConsumer 物件可以作為 basicConsume 呼叫的一部分來傳遞,以設定訂閱,如以下範例所示。

boolean autoAck = false; channel.basicConsume(queueName, autoAck, "myConsumerTag", new DefaultConsumer(channel) { @Override public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { String routingKey = envelope.getRoutingKey(); String contentType = properties.getContentType(); long deliveryTag = envelope.getDeliveryTag(); // (process the message components here ...) channel.basicAck(deliveryTag, false); } });
注意

因為我們指定了 autoAck = false,則必須認可傳送至 Consumer 的訊息,最方便在 handleDelivery 方法中進行,如範例所示。

關閉您的連線並中斷代理程式的連線

為了中斷與 RabbitMQ 代理程式的連線,請關閉通道和連線,如下面所示。

channel.close(); conn.close();
注意

有關「如何使用 RabbitMQ Java 客戶端庫」的更多內容,敬請參閱《Rabbit MQ Java 客戶端指南》。API

步驟 3:(可選)連接到 AWS Lambda 功能

AWS Lambda 可以連線到 Amazon MQ 代理程式並使用來自您的訊息。當您將代理程式連接到 Lambda 時,您可以建立事件來源映射,其會讀取佇列中的訊息並同步叫用函數。您建立的事件來源對應會批次從代理程式讀取訊息,並以JSON物件的形式將它們轉換為 Lambda 承載。

將代理程式連接到 Lambda 函數
  1. 將下列IAM角色權限新增至您的 Lambda 函數執行角色

    注意

    如果沒有必要的IAM許可,您的函數將無法從 Amazon MQ 資源成功讀取記錄。

  2. (選用) 如果您已建立沒有公開可存取性的代理程式,您必須執行下列其中一項作業,以允許 Lambda 連線到代理程式:

  3. 使用 AWS Management Console,針對 Lambda 函數將您的代理程式設定為事件來源。您也可以使用create-event-source-mapping AWS Command Line Interface 指令。

  4. 為 Lambda 函數編寫一些程式碼,以處理從代理程式取用的訊息。事件來源映射擷取的 Lambda 承載取決於代理程式的引擎類型。以下是 Amazon MQ for RabbitMQ 佇列的 Lambda 承載範例。

    注意

    在範例中,test 是佇列的名稱,/ 是預設虛擬主機的名稱。接收訊息時,事件來源會在 test::/ 列出訊息。

    { "eventSource": "aws:rmq", "eventSourceArn": "arn:aws:mq:us-west-2:112556298976:broker:test:b-9bcfa592-423a-4942-879d-eb284b418fc8", "rmqMessagesByQueue": { "test::/": [ { "basicProperties": { "contentType": "text/plain", "contentEncoding": null, "headers": { "header1": { "bytes": [ 118, 97, 108, 117, 101, 49 ] }, "header2": { "bytes": [ 118, 97, 108, 117, 101, 50 ] }, "numberInHeader": 10 } "deliveryMode": 1, "priority": 34, "correlationId": null, "replyTo": null, "expiration": "60000", "messageId": null, "timestamp": "Jan 1, 1970, 12:33:41 AM", "type": null, "userId": "AIDACKCEVSQ6C2EXAMPLE", "appId": null, "clusterId": null, "bodySize": 80 }, "redelivered": false, "data": "eyJ0aW1lb3V0IjowLCJkYXRhIjoiQ1pybWYwR3c4T3Y0YnFMUXhENEUifQ==" } ] } }

如需有關將 Amazon MQ 連接到 Lambda 的詳細資訊、Lambda 對 Amazon MQ 事件來源支援的選項,以及事件來源映射錯誤的詳細資訊,請參閱 AWS Lambda 開發人員指南中的搭配使用 Lambda 與 Amazon MQ

步驟 4:刪除您的代理程式

如果您不使用 Amazon MQ 代理程式 (並且不預見在不久的 future 使用),最佳做法是將其從 Amazon MQ 刪除以降低成本。 AWS

以下範例示範如何使用 AWS Management Console來刪除代理程式。

  1. 登入 Amazon MQ 主控台

  2. 從經紀人清單中,選取您的經紀人 (例如,MyBroker),然後選擇 [刪除]。

  3. 在刪MyBroker? 」對話方塊中,鍵入,delete然後選擇「刪除」。

    刪除代理程式大約需要 5 分鐘。

後續步驟

既然您已建立代理程式、已將應用程式連接至其中,並已傳送和接收訊息,那麼您可能想要嘗試以下動作:

RESTAPIs在計劃遷移到 Amazon MQ 之前,您也可以開始深入了解 Amazon MQ 和 Amazon MQ 的最佳實務。