Procedimientos para integrar Service Bus con RabbitMQ

En esta guía, descubriremos cómo enviar mensajes de RabbitMQ a Service Bus.

Estos son algunos escenarios en los que podemos hacer uso de estas funcionalidades:

  • Configuración perimetral: Tenemos una configuración perimetral en la que enviamos mensajes a RabbitMQ, pero queremos reenviar esos mensajes a Azure Service Bus para un procesamiento posterior, de modo que podamos usar muchas de las funciones de macrodatos de Azure .
  • Nube híbrida: Su empresa acaba de adquirir un tercero que usa RabbitMQ para sus necesidades de mensajería. Se encuentran en una nube diferente. Mientras realizan la transición a Azure, ya puede empezar a compartir datos mediante el puente de RabbitMQ con Azure Service Bus.
  • Integración de terceros: Un tercero usa RabbitMQ como agente y desea enviarnos sus datos, pero están fuera de la organización. Podemos proporcionarles una clave SAS que les permita acceder a un conjunto limitado de colas de Azure Service Bus a las que pueden reenviar sus mensajes.

La lista continúa, pero podemos resolver la mayoría de estos casos de uso mediante el puente de RabbitMQ a Azure.

En primer lugar, debe crear una cuenta gratuita de Azure al registrarse aquí

Una vez que haya iniciado sesión en su cuenta, vaya a Azure Portal y cree un nuevo Azure Service Bus espacio de nombres. Los espacios de nombres son los contenedores de alcance donde se activarán nuestros componentes de mensajería, como las colas y los temas.

Agregue un nuevo espacio de nombres de Azure Service Bus

En Azure Portal, haga clic en el botón más grande para agregar un nuevo recurso

Create resource

Después, seleccione Integración y haga clic en Azure Service Bus para crear un espacio de nombres de mensajería:

Select Azure Service bus

Se le pedirá que ingrese la información del espacio de nombres. Seleccione la suscripción de Azure que quiere usar. Si no tiene un grupo de recursos existente, puede crear uno.

Create namespace

Use rabbitmq para Namespace name, pero podría ser todo lo que desee. A continuación, establezca East US para la ubicación. Elija Basic como el plan de tarifa.

Si todo ha salido bien, debería ver la siguiente pantalla de confirmación:

Create namespace confirmation

Al volver a Azure Portal, verá el nuevo espacio de nombres rabbitmq en la lista. Haga clic en él para tener acceso al recurso, de modo que pueda agregarle una cola.

Resource list with new namespace

Crear nuestra cola de Azure Service Bus

Ahora que tiene su espacio de nombres de Azure Service Bus, haga clic en el botón Queues de la izquierda, debajo de Entities, para agregar una nueva cola:

Create queue

El nombre de la cola será from-rabbitmq como un recordatorio de dónde proceden los mensajes. Puede dejar las demás opciones como valores predeterminados, pero puede cambiarlas para adaptarlas a las necesidades de su aplicación.

Habilitar el complemento Shovel de RabbitMQ

Para enviar mensajes desde RabbitMQ a Azure Service Bus, utilizaremos el complemento Shovel que viene empaquetado con RabbitMQ. Puede habilitar el complemento y su interfaz visual con este comando:

rabbitmq-plugins enable rabbitmq_shovel_management

Es posible que tenga que ejecutar ese comando como raíz.

Ahora es el momento de obtener las credenciales necesarias para conectar RabbitMQ con Azure.

Conexión de RabbitMQ con Azure Service Bus

Tendrá que crear una política de acceso compartido (SAS) para la cola, de modo que RabbitMQ pueda publicar mensajes en ella. Una directiva SAS le permite especificar qué entidad externa se puede hacer con el recurso. La idea es que RabbitMQ puede enviar mensajes, pero no escuchar ni administrar la cola.

Add SAS Policy

Marque el cuadro Send y haga clic en Create para tener la directiva de SAS establecida.

Una vez creada la Directiva, haga clic en ella para ver la cadena de conexión principal. Lo usaremos para permitir que RabbitMQ se comunique con Azure Service Bus:

Get SAS Policy

Antes de poder utilizar esa cadena de conexión, tendrá que convertirla al formato de conexión AMQP de RabbitMQ. Así que, vaya a la herramienta de conversión de cadena de conexión y pegue la cadena de conexión en el formulario. Haga clic en Convertir. Obtendrá una cadena de conexión RabbitMQ lista. (Ese sitio web ejecuta todo lo que sea local en el explorador, por lo que los datos no se envían a través del cable). Puede acceder a su código fuente en GitHub.

Convert connection string

Ahora, abra el complemento de administración de RabbitMQ en nuestros exploradores http://localhost:15672/#/dynamic-shovels y vaya a Admin -> Shovel Management, donde puede agregar el nuevo Shovel que se encargará de enviar mensajes desde una cola de RabbitMQ hasta la cola de Azure Service Bus.

Add RabbitMQ Shovel

Aquí, llame a Shovel azure y elija AMQP 0.9.1 como el protocolo de origen. En la captura de pantalla, tenemos amqp://, que es el URI predeterminado que nos conecta con un servidor de RabbitMQ local. Asegúrese de adaptarse a la implementación actual.

En el lado de la cola, puede usar azure como el nombre de la cola. Si la cola no existe, RabbitMQ la creará automáticamente. También puede elegir el nombre de una cola que ya existe. Puede dejar las otras opciones con el valor predeterminado.

A continuación, en el lado destination, elija AMQP 1.0 como el protocolo. En el campo URI, escriba la cadena de conexión que recibió en el paso anterior, donde convirtió su cadena de conexión de Azure al formato RabbitMQ. Debería ser parecido a este:

amqps://rabbitmq-shovel:StringOfRandomChars@rabbitmq.servicebus.windows.net:5671/?sasl=plain

En el campo Address escribiremos el nombre de la cola de Azure Service Bus. En este caso, se llamaba from-rabbitmq. Haga clic en Add Shovel y el programa de instalación debería estar listo para comenzar a recibir mensajes.

Publicación de mensajes de RabbitMQ en Azure Service Bus

En la interfaz de administración de RabbitMQ, podemos ir a Queues, seleccionar la cola de azure y buscar el panel de Publish message. Aparecerá un formulario que le permitirá publicar mensajes directamente en la cola. En nuestro ejemplo, agregaremos first message como Payload y seleccionaremos Publish Message:

Publish first message

Vuelva a Azure e inspeccione la cola. Haga clic en Service Bus Explorer en el panel izquierdo y, luego, haga clic en el botón Inspeccionar. Si todo ha ido bien, verá que la cola tiene ahora un mensaje. ¡Enhorabuena!

Azure Service Bus Queue

Pero vamos a asegurarnos de que el mensaje es el que envió desde RabbitMQ. Seleccione la pestaña Peek y haga clic en el botón Peek para recuperar los últimos mensajes de la cola. Haga clic en el mensaje para inspeccionar su contenido. Debería ver algo parecido a la imagen siguiente, donde aparece el first message.

Queue peek

Recapitulemos

¡Enhorabuena! ¡Ha conseguido mucho! Logró enviar sus mensajes de RabbitMQ a Azure Service Bus, recapitulemos los pasos:

  1. Crear un espacio de nombres de Azure Service Bus
  2. Agregar una cola al espacio de nombres
  3. Agregar una directiva SAS a la cola
  4. Obtención de la cadena de conexión de la cola
  5. Habilitar el complemento Shovel de RabbitMQ y la interfaz de administración
  6. Convertir la cadena de conexión de Azure Service Bus al formato AMQP de RabbitMQ
  7. Agregar una nuevo complemento Shovel a RabbitMQ y conectarlo a Azure Service Bus
  8. Publicar mensajes

Al seguir los pasos anteriores, integró áreas de su organización que estaban fuera de Azure. El complemento Shovel le permitió enviar mensajes desde RabbitMQ a Azure Service Bus. Esto tiene enormes ventajas, ya que ahora puede permitir que terceros de confianza conecten sus aplicaciones con su implementación de Azure.

Al final, la mensajería consiste en habilitar las conexiones y, con esta técnica, se acaba de abrir una nueva.

Pasos siguientes