11.5. Address String Grammar
The following regular expressions define the tokens used to parse address strings:
LBRACE: \\{
RBRACE: \\}
LBRACK: \\[
RBRACK: \\]
COLON: :
SEMI: ;
SLASH: /
COMMA: ,
NUMBER: [+-]?[0-9]*\\.?[0-9]+
ID: [a-zA-Z_](?:[a-zA-Z0-9_-]*[a-zA-Z0-9_])?
STRING: "(?:[^\\\\"]|\\\\.)*"|\'(?:[^\\\\\']|\\\\.)*\'
ESC: \\\\[^ux]|\\\\x[0-9a-fA-F][0-9a-fA-F]|\\\\u[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]
SYM: [.#*%@$^!+-]
WSPACE: [ \\n\\r\\t]+
The formal grammar for addresses is given below:
address := name [ SLASH subject ] [ ";" options ]
name := ( part | quoted )+
subject := ( part | quoted | SLASH )*
quoted := STRING / ESC
part := LBRACE / RBRACE / COLON / COMMA / NUMBER / ID / SYM
options := map
map := "{" ( keyval ( "," keyval )* )? "}"
keyval "= ID ":" value
value := NUMBER / STRING / ID / map / list
list := "[" ( value ( "," value )* )? "]"
The address string options map supports the following parameters:
<name> [ / <subject> ] ; {
create: always | sender | receiver | never,
delete: always | sender | receiver | never,
assert: always | sender | receiver | never,
mode: browse | consume,
node: {
type: queue | topic,
durable: True | False,
x-declare: { ... <declare-overrides> ... },
x-bindings: [<binding_1>, ... <binding_n>]
},
link: {
name: <link-name>,
durable: True | False,
reliability: unreliable | at-most-once | at-least-once | exactly-once,
x-declare: { ... <declare-overrides> ... },
x-bindings: [<binding_1>, ... <binding_n>],
x-subscribe: { ... <subscribe-overrides> ... }
}
}
<name> [ / <subject> ] ; {
create: always | sender | receiver | never,
assert: always | sender | receiver | never,
mode: browse | consume,
node: {
type: queue | topic,
durable: True | False,
properties: { ... <nested-map> ... }[2],
capabilities: [<capability_1>, ... <capability_n>]
},
link: {
name: <link-name>,
durable: True | False,
reliability: unreliable | at-most-once | at-least-once | exactly-once,
filter: { name: <name>, descriptor: <filter-descriptor>, value: <filter-value> }
}
}
The create, delete (AMQP 0-10 only), and assert policies specify who should perform the associated action:
- always
- the action is performed by any messaging client
- sender
- the action is only performed by a sender
- receiver
- the action is only performed by a receiver
- never
- the action is never performed (this is the default)
The node-type is one of:
- topic
- in the AMQP 0-10 mapping, a topic node defaults to the topic exchange, x-declare may be used to specify other exchange types
- queue
- this is the default
node-type
The following AMQP 1.0 filters are implemented in MRG 3:
legacy-amqp-direct-bindinglegacy-amqp-topic-bindinglegacy-amqp-headers-bindingselector-filterxquery-filter
properties nested map is recommended. The x-declare map is supported as a convenience and is automatically converted to a properties map before sending to the broker.