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

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

创建并连接到 ActiveMQ 代理

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

步骤 1:创建 ActiveMQ 代理

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

  1. 登录到Amazon MQ 控制台

  2. 在存储库的选择代理引擎页面上,选择Apache ActiveMQ

  3. 在存储库的选择部署和存储页面上,位置在部署模式和存储类型部分中,执行以下操作:

    1. 选择Deployment mode (部署模式)(例如,主动/备用代理)。有关更多信息,请参阅 Broker Architecture

      • A单实例代理由位于 Network Load Balancer (NLB) 后面的一个可用区中的一个代理组成。经纪商与您的应用程序和亚马逊 EFS(仅适用于 ActiveMQ 经纪商)或亚马逊 EBS 进行通信。有关更多信息,请参阅 Amazon MQ 单实例代理

      • 一个用于实现高可用性的主动/备用代理由两个不同的可用区域中的两个经纪人组成,在冗余对。这些经纪商与您的应用程序以及 Amazon EFS 进行同步通信。有关更多信息,请参阅 用于实现高可用性的Amazon MQ 主动/备用代理

      • 有关代理网络示例蓝图的更多信息,请参阅示例蓝图

    2. 选择存储类型(例如,EBS)。有关更多信息,请参阅 Storage

      注意

      Amazon EBS 会在单个可用区内复制数据,并且不支持ActiveMQ 主动/备用部署模式。

    3. 选择 Next

  4. 在存储库的配置设置页面上,位置在详细信息部分中,执行以下操作:

    1. 输入代理名称

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

  5. ActiveMQ Web 控制台访问部分中,提供用户名密码

    重要
    • 您的用户名只能包含字母数字字符、短划线、句点、下划线和句点 (-. _ ~)。

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

  6. 选择 Deploy

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

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

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

  7. 选择MyBroker

    在存储库的MyBroker页面上,位置在Connect (连接)部分,请注意您的经纪商ActiveMQ Web 控制台URL,例如:

    https://b-1234a5b6-78cd-901e-2fgh-3i45j6k178l9-1.mq.us-east-2.amazonaws.com:8162

    另外,请注意您的经纪商线级协议终端节点。下面是 OpenWire 终端节点的示例:

    ssl://b-1234a5b6-78cd-901e-2fgh-3i45j6k178l9-1.mq.us-east-2.amazonaws.com:61617

步骤 2:将 Java 应用程序连接到您的代理

创建 Amazon MQ ActiveMQ 代理商后,您可以将您的应用程序连接到它。以下示例说明如何使用 Java 消息服务 (JMS) 创建到代理的连接、创建队列以及发送消息。有关完整的可用 Java 示例,请参阅Working Java Example

您可以使用各种 ActiveMQ 客户端连接到 ActiveMQ 代理。我们建议使用 ActiveMQ 客户端

Prerequisites

启用 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. 适用于端口范围中,键入 Web 控制台端口 (8162)。

    4. 适用于,离开Custom (自定义),然后键入您希望能够访问 Web 控制台的系统的 IP 地址(例如,192.0.2.1)。

    5. 选择保存

      您的代理现在可以接受入站连接。

添加 Java 依赖项

添加activemq-client.jaractivemq-pool.jar程序包添加到了 Java 类路径。以下示例说明了 Maven 项目的 pom.xml 文件中的这些依赖关系。

<dependencies> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-client</artifactId> <version>5.15.8</version> </dependency> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-pool</artifactId> <version>5.15.8</version> </dependency> </dependencies>

有关 的更多信息activemq-client.jar中,请参阅初始配置(在 Apache ActiveMQ 文档中)。

重要

在以下示例代码中,生产者和使用者在单个线程中运行。对于生产系统(或测试 Broker 实例故障转移),请确保您的生产者和使用者在单独的主机或线程上运行。

创建消息创建者并发送消息

  1. 使用您的代理终端节点为消息生成器创建 JMS 池连接工厂,然后调用createConnection方法来对付工厂。

    注意

    对于活动/备用代理,Amazon MQ 提供两个 ActiveMQ Web 控制台 URL,但一次只有一个 URL 处于活动状态。同样,Amazon MQ 为每个线级协议提供两个终端节点,但每个对中一次只有一个终端节点处于活动状态。这些区域有:-1-2后缀表示冗余对。有关更多信息,请参阅 Broker Architecture

    对于线级协议端点,您可以允许应用程序连接到任一端点,方法是使用故障转移传输

    // Create a connection factory. final ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(wireLevelEndpoint); // Pass the username and password. connectionFactory.setUserName(activeMqUsername); connectionFactory.setPassword(activeMqPassword); // Create a pooled connection factory. final PooledConnectionFactory pooledConnectionFactory = new PooledConnectionFactory(); pooledConnectionFactory.setConnectionFactory(connectionFactory); pooledConnectionFactory.setMaxConnections(10); // Establish a connection for the producer. final Connection producerConnection = pooledConnectionFactory.createConnection(); producerConnection.start();
    注意

    消息生成者应始终使用PooledConnectionFactory类。有关更多信息,请参阅 始终使用连接池

  2. 创建一个会话,一个名为MyQueue和消息制作者。

    // Create a session. final Session producerSession = producerConnection.createSession(false, Session.AUTO_ACKNOWLEDGE); // Create a queue named "MyQueue". final Destination producerDestination = producerSession.createQueue("MyQueue"); // Create a producer from the session to the queue. final MessageProducer producer = producerSession.createProducer(producerDestination); producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
  3. 创建消息字符串"Hello from Amazon MQ!",然后发送消息。

    // Create a message. final String text = "Hello from Amazon MQ!"; TextMessage producerMessage = producerSession.createTextMessage(text); // Send the message. producer.send(producerMessage); System.out.println("Message sent.");
  4. 清除制片人。

    producer.close(); producerSession.close(); producerConnection.close();

创建消息使用者并接收消息

  1. 使用您的代理终端节点为消息生成器创建 JMS 连接工厂,然后调用createConnection方法来对付工厂。

    // Create a connection factory. final ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(wireLevelEndpoint); // Pass the username and password. connectionFactory.setUserName(activeMqUsername); connectionFactory.setPassword(activeMqPassword); // Establish a connection for the consumer. final Connection consumerConnection = connectionFactory.createConnection(); consumerConnection.start();
    注意

    消息使用者绝不 应使用 PooledConnectionFactory 类。有关更多信息,请参阅 始终使用连接池

  2. 创建一个会话,一个名为MyQueue和消息使用者。

    // Create a session. final Session consumerSession = consumerConnection.createSession(false, Session.AUTO_ACKNOWLEDGE); // Create a queue named "MyQueue". final Destination consumerDestination = consumerSession.createQueue("MyQueue"); // Create a message consumer from the session to the queue. final MessageConsumer consumer = consumerSession.createConsumer(consumerDestination);
  3. 开始等待消息并在消息到达时接收消息。

    // Begin to wait for messages. final Message consumerMessage = consumer.receive(1000); // Receive the message when it arrives. final TextMessage consumerTextMessage = (TextMessage) consumerMessage; System.out.println("Message received: " + consumerTextMessage.getText());
    注意

    不像Amazon消息传送服务(例如 Amazon SQS)时,消费者会持续连接到代理。

  4. 关闭使用者、会话和连接。

    consumer.close(); consumerSession.close(); consumerConnection.close();

第 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