6.4. Server-side Selectors
6.4.1. Select messages using a filter
MRG 3 supports selecting messages from a queue using a server-side selector. This allows you to specify a filter using a SQL-like syntax. This filter is applied to the headers and properties of messages on the server. Messages that match the filter are delivered to the client.
To use server-side selectors, specify a
selector
in the link portion of the connection URL.
The following example will cause the server to select and deliver messages that have
green
, red
, or blue
as the value of the color
property:
queue_name;{link:{selector:"color in ('green', 'red', 'blue')"}}
The following examples demonstrate selectors to filter messages on various header properties:
queue_name;{link:{selector:"amqp.priority = 1"}} queue_name;{link:{selector:"amqp.priority IS BETWEEN 3 AND 6"}} queue_name;{link:{selector:"myflag AND amqp.redelivered"}} queue_name;{link:{selector:"msg_title LIKE '%news%'"}
Python and temporary syntax
With Python, selectors can be used by temporary syntax. For example, the C++ address with selector:
queue_name;{link:{selector:"myproperty = 1"}}
in Python is temporarily used as:
queue_name;{link:{'x-subscribe': {'arguments': {'x-apache-selector': "myproperty = 1"}}}}
The Java and server-side selectors
The Qpid Java client does not currently support server-side selectors, only JMS selectors. JMS selectors function differently than server-side selectors. Consult the JMS specification for more detail on JMS slectors.