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 de RabbitMQ y conexión con é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 RabbitMQ?
Paso 1: Crea un bróker de RabbitMQ
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 corredor básico.
Inicie sesión en la consola de Amazon MQ
. -
En la página Select broker engine (Seleccionar motor del agente), elija RabbitMQ y, luego, Next (Siguiente).
-
En la página Select deployment mode (Seleccionar modo de implementación), elija el modo de implementación, por ejemplo, Cluster deployment (Implementación de clúster) y, luego, elija Next (Siguiente).
-
Un broker de instancia única está compuesto por un broker en una zona de disponibilidad detrás de un Network Load Balancer NLB (). El agente se comunica con tu aplicación y con un volumen EBS de almacenamiento de Amazon. Para obtener más información, consulte Opción 1: Broker de instancia única de Amazon MQ para RabbitMQ.
-
Una Implementación de clúster de RabbitMQ para alta disponibilidad es una agrupación lógica de tres nodos de agente de RabbitMQ situados detrás de un Network Load Balancer, cada uno de los cuales comparte usuarios, colas y un estado distribuido entre varias zonas de disponibilidad (AZ). Para obtener más información, consulte Opción 2: implementación de clústeres de Amazon MQ para RabbitMQ.
-
-
En la página Configure settings (Configurar ajustes), sección Details (Detalles), siga estos pasos:
-
Ingrese el nombre del agente.
importante
No añada información de identificación personal (PII) u otra información confidencial o sensible 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.
nota
La sección Configuración adicional proporciona opciones para habilitar CloudWatch los registros y configurar el acceso a la red para su corredor. Si crea un corredor RabbitMQ privado sin acceso público, debe seleccionar una nube privada virtual (VPC) y configurar un grupo de seguridad para acceder a su corredor.
-
-
En la página Configure settings (Configurar ajustes), sección RabbitMQ access (Acceso a RabbitMQ), proporcione un nombre de usuario y una contraseña. Las siguientes restricciones se aplican a las credenciales de inicio de sesión de agente:
El nombre de usuario solo puede contener caracteres alfanuméricos, guiones, puntos y guiones bajos (- . _). Este valor no debe contener ningún carácter de tilde (~). Amazon MQ prohíbe utilizar
guest
como nombre de usuario.-
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) ni ninguna otra información confidencial o delicada 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 Next (Siguiente).
-
En la página Review and create (Revisar y crear), puede revisar las opciones que seleccionó y modificarlas si es necesario.
-
Elija Create broker (Crear agente).
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 consola web RabbitMQde su corredorURL, por ejemplo: https://b-c8349341-ec91-4a78-ad9c-a57f23f235bb.mq.us-west-2.amazonaws.com
Además, tenga en cuenta el punto final seguro
de su corredor. AMQP A continuación se muestra un ejemplo de un punto de enlace amqps
que expone al puerto de agente de escucha5671
.amqps://b-c8349341-ec91-4a78-ad9c-a57f23f235bb.mq.us-west-2.amazonaws.com:5671
Paso 2: Conectar una aplicación JVM basada a su bróker
Después de crear un agente de RabbitMQ, puede conectar su aplicación con él. Los siguientes ejemplos muestran cómo puede utilizar la biblioteca de cliente de Java de RabbitMQ
Requisitos previos
nota
Los siguientes requisitos previos solo se aplican a los agentes de RabbitMQ que se crean sin accesibilidad pública. Si está creando un agente con accesibilidad pública, puede omitirlos.
Habilite VPC los atributos
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
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 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
Si está utilizando Apache Maven para automatizar compilaciones, agregue la siguiente dependencia a su archivo pom.xml
. Para obtener más información sobre los archivos del modelo de objetos del proyecto en Apache Maven, consulte Introducción a
<dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> <version>5.9.0</version> </dependency>
Si utiliza Gradle
dependencies { compile 'com.rabbitmq:amqp-client:5.9.0' }
Importar clases Connection
y Channel
El cliente Java RabbitMQ utiliza com.rabbitmq.client
como paquete de nivel superior, Connection
y Channel
API las clases representan una conexión y un canal AMQP 0-9-1, respectivamente. Importe las clases Connection
y Channel
antes de usarlas, como se muestra en el ejemplo a continuación.
import com.rabbitmq.client.Connection; import com.rabbitmq.client.Channel;
Crear un ConnectionFactory
y conectarlo con su agente
Utilice el siguiente ejemplo para crear una instancia de la clase ConnectionFactory
con los parámetros dados. Use el método setHost
para configurar el punto de enlace del agente que anotó antes. Para conexiones de nivel de cable AMQPS
, utilice el puerto 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();
Publicar un mensaje en un intercambio
Puede usar Channel.basicPublish
para publicar mensajes en un intercambio. El siguiente ejemplo utiliza la AMQP Builder
clase para crear un objeto de propiedades de mensaje con un tipo de contenido. plain/text
byte[] messageBodyBytes = "Hello, world!".getBytes(); channel.basicPublish(exchangeName, routingKey, new AMQP.BasicProperties.Builder() .contentType("text/plain") .userId("userId") .build(), messageBodyBytes);
nota
Tenga en cuenta que BasicProperties
es una clase interna de la clase titular generada automáticamente, que es AMQP
.
Suscribirse a una cola y recibir un mensaje
Para recibir un mensaje, puede suscribirse a una cola a través de la interfaz Consumer
. Una vez suscrito, los mensajes se entregarán automáticamente a medida que lleguen.
La forma más sencilla de implementar un Consumer
es usar la subclase DefaultConsumer
. Se puede pasar un objeto DefaultConsumer
como parte de una ejecución basicConsume
para configurar la suscripción como se muestra en el ejemplo a continuación.
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); } });
nota
Dado que especificamos autoAck = false
, es necesario reconocer los mensajes que se entregaron al Consumer
, preferentemente a través del método handleDelivery
, como se muestra en el ejemplo.
Cerrar la conexión y desconectarse del agente
Para desconectarse del agente de RabbitMQ, cierre el canal y la conexión como se muestra a continuación.
channel.close(); conn.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 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 RabbitMQ en Amazon MQ.
nota
En el ejemplo,
test
es el nombre de la cola y/
es el nombre del anfitrión virtual predeterminado. Al recibir mensajes, el origen de eventos muestra los mensajes entest::/
.{ "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==" } ] } }
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.