创建并连接到 RabbitMQ 代理 - Amazon MQ
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

创建并连接到 RabbitMQ 代理

代理 是运行在 Amazon MQ 上的消息代理环境。它是 Amazon MQ 的基本构建块。代理实例的组合说明class(m5t3) 和size(largemicro)是一个代理实例类型(例如,mq.m5.large)。

步骤 1:创建一个 RabbitMQ 代理商

第一个也是最常见的 Amazon MQ 任务是创建代理。以下示例演示如何使用Amazon Web Services Management Console创建基本代理。

  1. 登录到Amazon MQ 控制台

  2. 在存储库的选择代理引擎页面上,选择兔子,然后选择下一步

  3. 在存储库的选择部署模式页面上,选择Deployment mode (部署模式),例如,群集部署,然后选择下一步

    • A单实例代理由位于 Network Load Balancer (NLB) 后面的一个可用区中的一个代理组成。代理与您的应用程序和 Amazon Elastic Block Store (EBS) 通信。单实例代理提供高吞吐量和更低的延迟。有关更多信息,请参阅单实例代理

    • A高可用性的 RabBitMQ 群集部署是由 Network Load Balancer 后面的三个 RabbitMQ 代理节点组成的逻辑分组,每个节点在多个可用区 (AZ) 之间共享用户、队列和分布式状态。有关更多信息,请参阅高可用性的群集部署

  4. 在存储库的配置设置页面上,位于详细信息部分中,以下内容:

    1. 输入代理名称。

    2. 选择代理实例类型(例如,mq.m5.large)。有关更多信息,请参阅Broker instance types

    注意

    这些区域有:其他设置部分提供了启用 CloudWatch 日志和为您的代理配置网络访问的选项。如果您创建了一个没有公共访问功能的私有 RabbitMQ 代理,则必须选择一个 Virtual Private Cloud (VPC) 并配置一个安全组来访问您的代理。

  5. 在存储库的配置设置页面上,位于RabbitMQ 访问部分中,提供用户名密码

    重要
    • 您的用户名只能包含字母数字符、短划线、句点和下划线 (-. _)。此值不得包含任何波形号 (~) 字符。Amazon MQ 禁止使用guest作为用户名。

    • 密码必须至少为 12 个字符,包含至少 4 个唯一字符,并且不得包含逗号、冒号或等号 (,: =)。

  6. 选择 Next (下一步)

  7. 在存储库的审核和创建页面上,您可以查看您的选择并根据需要对其进行编辑。

  8. 选择创建代理

    当 Amazon MQ 创建您的经纪商时,它会显示正在创建状态。

    创建代理大约需要 15 分钟。

    成功创建您的经纪商后,Amazon MQ 会显示正在运行状态。

  9. 选择MyBroker

    在存储库的MyBroker页面上,位于Connect (连接)部分,请注意您的经纪商RabbitMQ 网络控制台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 客户端库和开发人员工具

Prerequisites

注意

以下先决条件步骤仅适用于没有公开访问权限创建的 RabbitMQ 经纪商。如果您正在创建具有公共访问功能的经纪商,您可以跳过它们。

启用 VPC 属性

要确保您的代理商可以在您的 VPC 中访问,您必须启用enableDnsHostnamesenableDnsSupportVPC 属性。有关更多信息,请参阅 。VPC 中的 DNS Support中的Amazon VPC 用户指南

启用入站连接

  1. 登录到Amazon MQ 控制台

  2. 从代理列表中,选择您的代理的名称 (例如,MyBroker)。

  3. 在存储库的MyBroker页面上,位于连接部分中,记下经纪商的 Web 控制台 URL 和线级协议的地址和端口。

  4. 详细信息部分,位置在Security and network中,选择您的安全组的名称或

    此时将显示 EC2 Dashboard 的 Security Groups (安全组) 页面。

  5. 从安全组列表中,选择您的安全组。

  6. 在页面底部,选择 Inbound (入站),然后选择 Edit (编辑)

  7. 编辑入站规则对话框中,为希望公开访问的每个 URL 或终端节点添加规则(以下示例显示如何为 Broker Web 控制台执行此操作)。

    1. 选择 Add Rule

    2. 对于 Type (类型),选择 Custom TCP (自定义 TCP)

    3. 适用于,离开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' }

导入ConnectionChannelclass

RabbitMQ 客户端使用com.rabbitmq.client作为其顶级软件包,ConnectionChannel分别表示 AMQP 0-9-1 连接和通道的 API 类。导入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("amqps://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。ADefaultConsumer对象可以作为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 客户端库的详细信息,请参阅。RabbitMQ Java 客户端 API 指南

步骤 3: 删除代理

如果您不使用 Amazon MQ 经纪商(并且不预计在不久的将来使用它),最佳做法是将其从 Amazon MQ 中删除,以减少Amazon成本.

以下示例演示如何使用删除代理Amazon Web Services Management Console。

  1. 登录到Amazon MQ 控制台

  2. 从经纪商列表中,选择您的经纪商(例如MyBroker),然后选择Delete

  3. DeleteMyBroker?对话框中,键入delete,然后选择Delete

    删除代理大约需要 5 分钟。

后续步骤

现在,您已经创建了一个代理,将一个应用程序连接到了该代理,并发送和接收了一条消息,您可以希望尝试以下操作:

您也可以开始深入研究Amazon MQ 最佳实践Amazon MQ REST API,然后计划迁移到 Amazon MQ。