la respuesta es "sí", pero hay más que eso ... primero ponerse de acuerdo sobre lo que basados en los contenidos medios de encaminamiento :)
de Let. Hay dos posibles significados. Algunas personas dicen que se basa en la parte del encabezado de un mensaje. Otros dicen que se basa en la parte de los datos de un mensaje.
Si tomamos la primera definición, estas son más o menos las suposiciones que hacemos: Los datos existen en alguna parte, y se envían al intermediario de AMQP por algún software. Suponemos que esta pieza de software sabe lo suficiente sobre los datos para poner pares clave-valor (KV) en el encabezado del mensaje que describe el contenido. Idealmente, el remitente también es el productor de los datos, por lo que tiene tanta información como podríamos desear. Digamos que los datos son una imagen. entonces podríamos tener los pares KV emisor poner en el encabezado del mensaje como este:
width=1024
height=768
mode=bw
photographer=John Doe
Ahora podemos implementar el enrutamiento basado en contenido creando colas apropiadas. Supongamos que tenemos una operación separada para realizar en imágenes en blanco y negro y otra en imágenes en color. Podemos crear dos colas, una que reciba mensajes con mode=bw
y otra con mode=colour
. Luego tenemos clientes separados escuchando en esas colas. El agente realiza el enrutamiento y no hay nada en nuestro cliente que deba tener en cuenta el enrutamiento.
Si tomamos la segunda definición, pasamos de diferentes suposiciones. Suponemos que los datos llegan a existir en alguna parte, y se envían a un agente de AMQP mediante algún software. Pero suponemos que no es sensato exigir que ese software llene el encabezado con pares KV. En su lugar, queremos tomar una decisión de enrutamiento basada en el datos sí mismo.
Hay dos opciones para esto en AMQP: puede decidir implementar un nuevo intercambio para su formato de datos particular, o puede delegar el enrutamiento a un cliente.
En RabbitMQ, hay directo (1-a-1), fanout (1 a N), encabezados (encabezado-filtrado 1-a-N) y tema (tema filtrado de 1 a N) intercambios, pero puede implementar el suyo de acuerdo con el estándar AMQP. Esto requeriría leer mucha documentación de RabbitMQ e implementar el intercambio en Erlang.
La otra opción es crear un cliente AMQP en Python que escuche una "cola de enrutamiento de contenido" especial. Cada vez que llega un mensaje a la cola, su enrutador-cliente lo recoge, hace lo que sea necesario para tomar una decisión de enrutamiento y lo envía de vuelta al intermediario a una cola adecuada. Entonces, para implementar el escenario anterior, su programa Python detectaría si una imagen está en blanco y negro o en color, y la (re) enviaría a una cola "blanco y negro" o "color", donde algunos un cliente adecuado tomaría el control.
Por lo tanto, en su segunda pregunta, realmente no hay nada que usted haga en su cliente que haga un enlace basado en contenido.O bien su (s) cliente (s) funciona (n) como se describió anteriormente, o puede crear un nuevo tipo de intercambio en RabbitMQ. Luego, en el código de configuración del cliente, define el tipo de intercambio para que sea su nuevo tipo.
Espero que responda a su pregunta!