本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
建立並連線至 RabbitMQ 代理程式
代理程式是在 Amazon MQ 上執行的訊息代理程式環境。這是 Amazon MQ 的基本建置區塊。代理程式執行個體類別 (m5
、t3
) 和大小 (large
、micro
) 的合併說明是代理程式執行個體類型 (例如,mq.m5.large
)。
步驟 1:建立 RabbitMQ 代理程式
第一個最常見的 Amazon MQ 任務是建立代理程式。下列範例顯示如何使用 AWS Management Console 建立基本 Broker。
登入 Amazon MQ 主控台
。 -
在 Select engine (選取引擎) 頁面中,選擇 RabbitMQ,然後選擇 Next (下一步)。
-
在 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) 的分散式狀態。如需詳細資訊,請參閱 高可用性的叢集部署。
-
-
在 Configure settings (進行設定) 頁面的 Details (詳細資訊) 區段中,執行以下動作:
-
輸入 Broker name (代理程式名稱)。
重要
請勿在經紀人名稱中添加個人身份信息(PII)或其他機密或敏感信息。代理程式名稱可 AWS 供其他服務存取,包括 CloudWatch 記錄檔。代理程式名稱不適用於私有或敏感資料。
選擇代理程式執行個體類型 (例如,mq.m5.large)。如需詳細資訊,請參閱 Broker instance types。
注意
「其他設定值」段落提供了啟用 CloudWatch 記錄檔和設定代理程式網路存取的選項。如果您建立沒有公開可存取性的私有 RabbitMQ 代理程式,則必須選取虛擬私有雲 (VPC) 並設定安全群組來存取您的代理程式。
-
-
在 Configure settings (進行設定) 頁面的 RabbitMQ access (RabbitmQ 存取) 區段上,提供 Username (使用者名稱) 和 Password (密碼)。以下限制適用於代理程式登入認證:
使用者名稱只能包含英數字元、破折號、句點和底線 (- . _)。此值不得包含任何波狀符號 (~) 字元。Amazon MQ 禁止使用
guest
作為使用者名稱。-
密碼必須至少有 12 個字元、包含至少 4 個唯一字元,而且不得包含逗號、冒號或等號 (,: =)。
重要
不要在代理用戶名中添加個人身份信息(PII)或其他機密或敏感信息。代理程式使用者名稱可 AWS 供其他服務存取,包括 CloudWatch 記錄檔。代理程式使用者名稱不適用於私有或敏感資料。
-
選擇下一步。
-
在 Review and create (檢閱和建立) 頁面上,您可以檢閱您的選取項目,然後視需要編輯它們。
-
選擇 Create broker (建立代理程式)。
當 Amazon MQ 建立您的代理程式時,其會顯示 Creation in progress (正在建立) 狀態。
建立代理程式大約需要 15 分鐘。
成功建立代理程式後,Amazon MQ 會顯示 Running (執行中) 狀態。
-
選擇
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 代理程式。如果您正在建立具有公用存取性的代理程式,則可跳過這些步驟。
啟用VPC屬性
為了確保您的經紀人可以在您的內部訪問VPC,您必須啟用enableDnsHostnames
和enableDnsSupport
VPC屬性。如需詳細資訊,請參DNS閱 Amazon VPC 使用者指南VPC中的 Support。
啟用傳入連線
登入 Amazon MQ 主控台
。 從經紀人列表中,選擇經紀人的名稱(例如,MyBroker)。
-
在「」
MyBroker
頁面的「連線」段落中,記下代理程式 Web 主控台和線路層級通訊協定的位址URL和連接埠。 -
在 Details (詳細資訊) 區段的 Security and network (安全與網路) 下,選擇您的安全群組名稱或 。
接著顯示 [EC2儀表板] 的 [安全群組] 頁面。
-
從安全群組清單選擇您的安全群組。
-
在頁面的最下方,選擇 Inbound (傳入),然後選擇 Edit (編輯)。
-
在 [編輯輸入規則] 對話方塊中,為您要公開存取的每個URL或端點新增規則 (下列範例顯示如何針對 Broker Web 主控台執行此動作)。
-
選擇 Add Rule (新增規則)。
-
選取「自訂」做為「類型」TCP。
-
針對 Source (來源),讓 Custom (自訂) 保持已選取狀態,然後輸入您希望能夠存取 Web 主控台的系統 IP 地址 (例如,
192.0.2.1
)。 -
選擇 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' }
匯入 Connection
和 Channel
類別
RabbitMQ Java 客戶端使用它com.rabbitmq.client
的頂級包,Connection
和Channel
API類分別代表一個 AMQP 0-9-1 的連接和通道。在使用前匯入 Connection
和 Channel
類別,如以下範例所示。
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
的最簡單方法是使用子類別 DefaultConsumer
。DefaultConsumer
物件可以作為 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
步驟 3:(可選)連接到 AWS Lambda 功能
AWS Lambda 可以連線到 Amazon MQ 代理程式並使用來自您的訊息。當您將代理程式連接到 Lambda 時,您可以建立事件來源映射,其會讀取佇列中的訊息並同步叫用函數。您建立的事件來源對應會批次從代理程式讀取訊息,並以JSON物件的形式將它們轉換為 Lambda 承載。
將代理程式連接到 Lambda 函數
-
將下列IAM角色權限新增至您的 Lambda 函數執行角色。
注意
如果沒有必要的IAM許可,您的函數將無法從 Amazon MQ 資源成功讀取記錄。
-
(選用) 如果您已建立沒有公開可存取性的代理程式,您必須執行下列其中一項作業,以允許 Lambda 連線到代理程式:
-
為每個公用子網路設定一個NAT閘道。如需詳細資訊,請參閱AWS Lambda 開發人員指南中關於VPC連線功能的網際網路和服務存取。
-
使用VPC端點在您的 Amazon Virtual Private Cloud (AmazonVPC) 和 Lambda 之間建立連接。您的 Amazon 還VPC必須連接到 AWS Security Token Service (AWS STS)和 Secrets Manager 端點。如需詳細資訊,請參閱AWS Lambda 開發人員指南中的設定 Lambda 的介面VPC端點。
-
-
使用 AWS Management Console,針對 Lambda 函數將您的代理程式設定為事件來源。您也可以使用
create-event-source-mapping
AWS Command Line Interface 指令。 -
為 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來刪除代理程式。
登入 Amazon MQ 主控台
。 從經紀人清單中,選取您的經紀人 (例如,MyBroker),然後選擇 [刪除]。
在刪除
MyBroker
? 」對話方塊中,鍵入,delete
然後選擇「刪除」。刪除代理程式大約需要 5 分鐘。
後續步驟
既然您已建立代理程式、已將應用程式連接至其中,並已傳送和接收訊息,那麼您可能想要嘗試以下動作:
RESTAPIs在計劃遷移到 Amazon MQ 之前,您也可以開始深入了解 Amazon MQ 和 Amazon MQ 的最佳實務。