Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Primeros pasos: creación de un bróker ActiveMQ y conexión a él
Un agente es un entorno de agente de mensajes que se ejecuta en Amazon MQ. Es el componente básico de Amazon MQ. La descripción combinada de la instancia del agente clase (m5
, t3
) y tamaño (large
, micro
) es un tipo de instancias del agente (por ejemplo, mq.m5.large
). Para obtener más información, consulte ¿Qué es un bróker de Amazon MQ para ActiveMQ?.
Paso 1: Crear un bróker ActiveMQ
La primera tarea, y la más habitual, en Amazon MQ es la creación de un agente. El siguiente ejemplo muestra cómo se puede utilizar AWS Management Console para crear un bróker básico.
Inicie sesión en la consola de Amazon MQ
. -
En la página Select broker engine (Seleccionar motor de agente), elija Apache ActiveMQ.
-
En la página Select deployment and storage (Seleccionar implementación y almacenamiento), sección Deployment mode and storage type (Modo de implementación y tipo de almacenamiento), haga lo siguiente:
-
Elija el modo de implementación (por ejemplo, agente activo/en espera). Para obtener más información, consulte Opciones de implementación de Amazon MQ para agentes de ActiveMQ.
-
Un agente de una sola instancia está compuesto por un agente en una zona de disponibilidad. El agente se comunica con su aplicación y con un volumen de EFS almacenamiento de Amazon EBS o Amazon. Para obtener más información, consulte Opción 1: agentes de instancia única de Amazon MQ.
-
Un agente activo/en espera para conseguir una alta disponibilidad está compuesto por dos agentes en dos zonas de disponibilidad diferentes, configurados en un par redundante. Estos agentes se comunican de forma sincrónica con tu aplicación y con AmazonEFS. Para obtener más información, consulte Opción 2: agentes activos/en espera de Amazon MQ para una alta disponibilidad.
-
Para obtener más información sobre los proyectos de muestra para una red de agentes, consulte Proyectos de muestra.
-
-
Elige el tipo de almacenamiento (por ejemplo, EBS). Para obtener más información, consulte Storage.
nota
Amazon EBS replica los datos dentro de una única zona de disponibilidad y no admite el modo de implementación activeMQ active/en espera.
Elija Next (Siguiente).
-
-
En la página Configure settings (Configurar ajustes), sección Details (Detalles), haga lo siguiente:
-
Ingrese el nombre del agente.
importante
No añada información de identificación personal (PII) ni ningún otro tipo de información confidencial o delicada a los nombres de los corredores. Otros AWS servicios, incluidos los CloudWatch registros, pueden acceder a los nombres de los corredores. Los nombres de agente no están diseñados para usarse con información privada o confidencial.
Elija el tipo de instancias del agente (por ejemplo, mq.m5.large). Para obtener más información, consulte Broker instance types.
-
-
En la sección de acceso a la consola web de ActiveMQ, introduzca un nombre de usuario y una contraseña. Las siguientes restricciones se aplican a los nombres de usuario y las contraseñas de los agentes:
-
El nombre de usuario solo puede contener caracteres alfanuméricos, guiones, puntos, guiones bajos y tildes (- . _ ~).
-
Esta contraseña debe tener 12 caracteres como mínimo, debe contener al menos 4 caracteres únicos y no puede incluir comas, dos puntos ni signos de igual (,:=).
importante
No añada información de identificación personal (PII) u otra información confidencial o sensible en los nombres de usuario de los corredores. Otros AWS servicios, incluidos los registros, pueden acceder a los nombres de usuario de los corredores. CloudWatch Los nombres de usuario de agente no están diseñados para usarse con información privada o confidencial.
-
-
Elija Implementar.
Mientras Amazon MQ crea su agente, muestra el estado Creation in progress (Creación en curso).
El proceso de creación del agente de tarda unos 15 minutos.
Cuando el agente se crea correctamente, Amazon MQ muestra el estado Running (En ejecución).
-
Haga clic en .
MyBroker
.En la página
MyBroker
, en la sección Connect, anote la URL consola web ActiveMQ de su bróker, por ejemplo:https://b-1234a5b6-78cd-901e-2fgh-3i45j6k178l9-1.mq.us-east-2.amazonaws.com:8162
Además, anote los puntos de enlace de protocolo de nivel de cable
. El siguiente es un ejemplo de punto final: OpenWire ssl://b-1234a5b6-78cd-901e-2fgh-3i45j6k178l9-1.mq.us-east-2.amazonaws.com:61617
Paso 2: Conectar una aplicación Java a su bróker
Después de crear un agente de ActiveMQ en Amazon MQ, puede conectar su aplicación a él. Los siguientes ejemplos muestran cómo puede utilizar el servicio de mensajes de Java (JMS) para crear una conexión con el intermediario, crear una cola y enviar un mensaje. Para ver un ejemplo de Java completo y en funcionamiento, consulte Working Java Example.
Puede conectarse a los agentes de ActiveMQ mediante distintos clientes de ActiveMQ
Requisitos previos
Habilita los atributos VPC
nota
No puede desactivar la accesibilidad pública para los agentes de Amazon MQ actuales.
Para garantizar que se pueda acceder a su agente desde la suyaVPC, debe habilitar los enableDnsSupport
VPC atributos enableDnsHostnames
y. Para obtener más información, consulta DNSSupport VPC en tu Guía del VPC usuario de Amazon.
Habilitar las conexiones entrantes
A continuación, siga las siguientes instrucciones para habilitar las conexiones entrantes para su corredor.
Inicie sesión en la consola de Amazon MQ
. En la lista de corredores, elija el nombre de su corredor (por ejemplo, MyBroker).
-
En la página
MyBroker
En la sección Conexiones, anote las direcciones y los puertos de la consola web del bróker URL y de los protocolos a nivel de cable. -
En la sección Details (Detalles), en Security and network (Seguridad y red), elija el nombre de su grupo de seguridad o .
Aparece la página Grupos de seguridad del EC2 panel de control.
-
En la lista de grupos de seguridad, elija el grupo de seguridad.
-
En la parte inferior de la página, elija Inbound (Entrante) y, a continuación, Edit (Editar).
-
En el cuadro de diálogo Editar reglas de entrada, añada una regla para cada punto final URL o terminal que desee que sea de acceso público (en el siguiente ejemplo se muestra cómo hacerlo para una consola web de bróker).
-
Seleccione Add Rule (Agregar regla).
-
En Tipo, seleccione Personalizado TCP.
-
Para Port Range (Rango de puertos), escriba el puerto de la consola web (
8162
). -
Para Source (Fuente), deje seleccionada la opción Custom (Personalizada) y, luego, escriba la dirección IP del sistema que desea que pueda acceder a la consola web (por ejemplo,
192.0.2.1
). -
Seleccione Guardar.
El agente ahora puede aceptar las conexiones entrantes.
-
Agregar dependencias de Java
Agregue los paquetes activemq-client.jar
y activemq-pool.jar
a la ruta de clases de Java. Los siguientes ejemplos muestran estas dependencias en el archivo pom.xml
de un proyecto Maven.
<dependencies> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-client</artifactId> <version>5.15.16</version> </dependency> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-pool</artifactId> <version>5.15.16</version> </dependency> </dependencies>
Para obtener más información acerca de activemq-client.jar
, consulte el tema sobre la configuración inicial
importante
En el siguiente código de ejemplo, los productores y los consumidores se ejecutan en un único subproceso. Para sistemas de producción (o para probar la conmutación por error de instancias del agente), asegúrese de que sus productores y consumidores se ejecuten en anfitriones o subprocesos independientes.
Crear un productor de mensajes y enviar un mensaje
A continuación, compruebe que su agente puede recibir un mensaje creando un generador de mensajes y enviando un mensaje.
-
Cree una fábrica de conexiones JMS agrupada para el productor de mensajes utilizando el punto final de su intermediario y, a continuación, invoque el
createConnection
método desde la fábrica.nota
Para un bróker activeMQ o en espera, Amazon MQ ofrece dos URLs consolas web ActiveMQ, pero solo una está activa a la vez. URL Del mismo modo, Amazon MQ proporciona dos puntos de enlace para cada protocolo de nivel de cable, pero solo hay un punto de enlace activo en cada par a la vez. Los sufijos
-1
y-2
denotan un par redundante. Para obtener más información, consulte Opciones de implementación de Amazon MQ para agentes de ActiveMQ).Para los puntos de enlace de protocolo de nivel de cable, puede permitir que la aplicación se conecte a cualquiera de los puntos de enlace mediante el transporte de conmutación por error
. // Create a connection factory. final ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(wireLevelEndpoint); // Pass the sign-in credentials. 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(); // Close all connections in the pool. pooledConnectionFactory.clear();
nota
Los productores de mensajes siempre deben usar la clase
PooledConnectionFactory
. Para obtener más información, consulte Usar siempre el grupo de conexiones. -
Cree una sesión, una cola con el nombre
MyQueue
y un productor de mensajes.// 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);
-
Cree la cadena de mensaje
"Hello from Amazon MQ!"
y, a continuación, envíe el mensaje.// 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.");
-
Elimine al productor.
producer.close(); producerSession.close(); producerConnection.close();
Crear un consumidor de mensajes y recibir el mensaje
Tras crear un productor, cree un consumidor para comprobar que puede recibir el mensaje.
-
Cree una fábrica de JMS conexiones para el productor de mensajes utilizando el punto final de su intermediario y, a continuación, invoque el
createConnection
método desde la fábrica.// Create a connection factory. final ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(wireLevelEndpoint); // Pass the sign-in credentials. connectionFactory.setUserName(activeMqUsername); connectionFactory.setPassword(activeMqPassword); // Establish a connection for the consumer. final Connection consumerConnection = connectionFactory.createConnection(); consumerConnection.start();
nota
Los consumidores de mensajes nunca usan la clase
PooledConnectionFactory
. Para obtener más información, consulte Usar siempre el grupo de conexiones. -
Cree una sesión, una cola con el nombre
MyQueue
y un consumidor de mensajes.// 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);
-
Comience a esperar los mensajes y reciba el mensaje cuando llegue.
// 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());
nota
A diferencia AWS de los servicios de mensajería (como AmazonSQS), el consumidor está constantemente conectado con el intermediario.
-
Cierre el consumidor, la sesión y la conexión.
consumer.close(); consumerSession.close(); consumerConnection.close();
Paso 3: (Opcional) Conectarse a una AWS Lambda función
AWS Lambda puede conectarse a su agente de Amazon MQ y consumirlos. Cuando conecta un agente a Lambda, crea un mapeo de origen de eventos que lee mensajes de una cola e invoca la función de forma sincrónica. El mapeo de fuentes de eventos que cree lee los mensajes de su agente en lotes y los convierte en una carga Lambda en forma de objeto. JSON
Conectar a su agente con una función Lambda
-
Añada los siguientes permisos de IAM rol a su rol de ejecución de funciones de Lambda.
nota
Sin los IAM permisos necesarios, su función no podrá leer correctamente los registros de los recursos de Amazon MQ.
-
(Opcional) Si ha creado un agente sin accesibilidad pública, debe realizar una de las siguientes acciones para permitir que Lambda se conecte con su agente:
-
Configure una NAT puerta de enlace por subred pública. Para obtener más información, consulte el acceso a Internet y a los servicios para las funciones VPC conectadas en la Guía para AWS Lambda desarrolladores.
-
Cree una conexión entre su Amazon Virtual Private Cloud (AmazonVPC) y Lambda mediante un VPC punto de conexión. Tu Amazon también VPC debe conectarse a AWS Security Token Service (AWS STS) y a los puntos de conexión de Secrets Manager. Para obtener más información, consulte Configuración de VPC puntos finales de interfaz para Lambda en AWS Lambda la Guía para desarrolladores.
-
-
Configure el agente como origen de eventos para una función Lambda a través de la AWS Management Console. También puede utilizar el
create-event-source-mapping
AWS Command Line Interface comando. -
Escriba algún código para que su función de Lambda procese los mensajes de lo consumido desde su agente. La carga de Lambda que recupere el mapeo de origen de eventos depende del tipo de motor del agente. A continuación, se muestra un ejemplo de una carga de Lambda para una cola de ActiveMQ en Amazon MQ.
nota
En el ejemplo,
testQueue
es el nombre de la cola.{ "eventSource": "aws:amq", "eventSourceArn": "arn:aws:mq:us-west-2:112556298976:broker:test:b-9bcfa592-423a-4942-879d-eb284b418fc8", "messages": { [ { "messageID": "ID:b-9bcfa592-423a-4942-879d-eb284b418fc8-1---mq---us-west-2.amazonaws.com.rproxy.goskope.com-37557-1234520418293-4:1:1:1:1", "messageType": "jms/text-message", "data": "QUJDOkFBQUE=", "connectionId": "myJMSCoID", "redelivered": false, "destination": { "physicalname": "testQueue" }, "timestamp": 1598827811958, "brokerInTime": 1598827811958, "brokerOutTime": 1598827811959 }, { "messageID": "ID:b-9bcfa592-423a-4942-879d-eb284b418fc8-1---mq---us-west-2.amazonaws.com.rproxy.goskope.com-37557-1234520418293-4:1:1:1:1", "messageType":"jms/bytes-message", "data": "3DTOOW7crj51prgVLQaGQ82S48k=", "connectionId": "myJMSCoID1", "persistent": false, "destination": { "physicalname": "testQueue" }, "timestamp": 1598827811958, "brokerInTime": 1598827811958, "brokerOutTime": 1598827811959 } ] } }
Para obtener más información acerca de cómo conectar Amazon MQ a Lambda, las opciones que admite Lambda para un origen de eventos de Amazon MQ y los errores de mapeo de origen de eventos, consulte el tema sobre el uso de Lambda con Amazon MQ en la AWS Lambda Guía para desarrolladores.