Overview

The AMQP Swiftlet is a high-performance AMQP broker implementation that provides full support for the AMQP 1.0 specification, except for the limitations noted below. It supports SASL authentication as well as SSL/TLS connections and fully integrates with JMS and all services of a SwiftMQ Router and Federated Router Network.

Limitations

  • Durable subscriber links are identified by a terminus expiry policy of NEVER and terminus durability of CONFIGURATION. All other links will be automatically overwritten with a terminus expiry policy ofLINK_DETACH or SESSION_END (targets), no matter which expiry policy is set in the attach frame.

  • Link detach(close=false) is supported but the link will then be automatically closed on session close. Reattach of a Link (e.g. to change the properties of a Source or Target) is not supported. Instead, detach(close=true) should be used followed by an attach with the new properties.

SwiftMQ AMQP 1.0 Client for Java

In addition to the AMQP broker implementation SwiftMQ provides an AMQP 1.0 Client for Java implementation which can be used to connect to any AMQP 1.0 broker (not only SwiftMQ) free of charge.

Support of AMQP Global Addressing (since 9.4.2)

Source and target addresses (queues or topics) can be in the AMQP Global Addressing format. SwiftMQ automatically extracts SwiftMQ destination names out of it.

For example, the following global addresses are all synonyms for testqueue:

  • amqp://guest:guest@localhost:5672/testqueue

  • amqps://localhost:5672/testqueue

  • amqps://localhost:5672/testqueue@router?a=b

  • amqp://localhost/testqueue

  • amqp:///testqueue

  • localhost:5672/testqueue

  • /testqueue

  • testqueue

JMS Integration

SwiftMQ is a JMS messaging system so all messages from/to AMQP clients are transformed to/from JMS messages on the fly by configurable transformer classes.

It is possible to define AMQP-only destinations with a native transformer that stores the AMQP payload as a BytesMessage body so there is no transformation overhead at all. To integrate with JMS and allow AMQP and JMS clients to produce and consume on the same destination a JMS mapping transformer can be defined which transforms an AMQP message into a typed JMS message and vice versa with all properties and header so there will be a full integration between AMQP and JMS clients, including mixed-mode request/reply.

AMQP clients have full access to SwiftMQ resources and are not limited in any way. So they can create durable subscribers on topics, can access all kinds of queues including the creation of temporary queues, can use message selectors, and so on. They are flow-controlled just like JMS clients.

SwiftMQ Router Integration

The AMQP Swiftlet is fully integrated with the SwiftMQ Router environment. Administration and monitoring take place by SwiftMQ's well-known administration tools SwiftMQ Explorer, CLI, and JMX:

SASL interfaces directly with the Authentication Swiftlet of the SwiftMQ Router which provides user, authentication, and resource-limit group management.

Federated Router Network Integration

Since all messages are transformed into JMS messages, all features of the Federated Router Network are automatically available to AMQP clients. This allows AMQP-only as well as JMS-only and mixed AMQP/JMS operations router network-wide:

SwiftMQ High Availability Router Integration

Transparent reconnect in the case of failover between SwiftMQ HA instances is a feature of SwiftMQ's JMS client. AMQP is a protocol so transparent reconnect has to be done on top of it - inside AMQP client libraries. SwiftMQ's AMQP 1.0 Client does support non-transparent reconnect via link recovery.

AMQP 0.9.1 Support

To enable users to use existing client libraries for AMQP 0.9.1, SwiftMQ supports this AMQP protocol version starting with release 9.1.0. Both protocol versions, 0.9.1 and 1.0, are supported on the same AMQP ports (default 5672 or 5671 for SSL).

Keep in mind, even if there are many client libraries out there, AMQP 0.9.1 is outdated. The official AMQP specification starts with AMQP 1.0. This is the only version to which backward compatibility from later versions is guaranteed.

Implemented Functionality of AMQP 0.9.1

  • SASL is integrated with the Authentication Swiftlet.

  • Exchange type direct (named exchanges and the default empty name exchange).

  • Connection, Channel, Exchange, Queue, Basic classes.

  • Prefetch, Flow, large messages.

Unimplemented Functionality of AMQP 0.9.1

  • Exchange types topic, fanout, header.

  • Prefetch global.

  • Transaction class.

Channel Class

A Channel.Flow to deactivate flow is sent to a producer if a flow-control delay of a queue is greater than 100 milliseconds and another Channel.Flow to activate flow is sent when the flow-control delay time is over. To disable this, the flow-control start queue size of the queue resp. the queue controller (temp queues) needs to be set to -1.

Exchange Class

The only supported exchange type is direct. Exchanges can be named or the default empty name exchange can be used. All exchanges map directly to SwiftMQ's Queue Manager Swiftlet, no matter what the queue binding is.

Queue Class

Queues marked as durable must be preconfigured as a regular queue via SwiftMQ's admin tool resp. the routerconfig.xml. It is not possible to create a durable queue via a Queue.Declare operation. Attempts will throw an error.

Preconfigured regular queues cannot be deleted via Queue.Delete. This operation does not throw an error but is ignored. Instead Queue.Purge should be used.

Nondurable queues can be created via Queue.Declare and deleted via Queue.Delete. The queue can be accessed through the name given in Queue.Declare but is internally mapped to a temporary queue whose name starts with tmp$. The lifetime of a nondurable queue is until Queue.Delete or until the connection which has created the queue is closed.

The routing key for Queue.Bind must be the queue name.

Basic Class

The routing key for Basic.Publish must be the queue name.

Message Transformation

SwiftMQ is a JMS messaging system so all messages from/to AMQP 0.9.1 clients are transformed to/from JMS messages on the fly by internal transformer classes.

Inbound Transformation (AMQP 0.9.1 to JMS Message)

Before transformation takes place, multiple body frames are concatenated to a single byte array.

If the content-type property of the AMQP header starts with text/ (like text/plain), the resulting JMS message will be a JMS TextMessage where the message body is a UTF-8 decoded String from the AMQP bytes message body. Otherwise, the resulting JMS message will be a JMS BytesMessage with the body set from the AMQP bytes message body.

The JMS message is flagged as a AMQP 0.9.1 message with a message property of type Long with the name JMS_AMQP_MESSAGE_FORMAT and value 91.

Header translation takes place according to the following table:

AMQP header

JMS message header/property

ContentType

String: JMS_AMQP_ContentType

ContentEncoding

String: JMS_AMQP_ContentEncoding

DeliveryMode

JMSDeliveryMode (or default PERSISTENT)

Priority

JMSPriority (or default priority)

CorrelationId

JMSCorrelationID

ReplyTo

JMSReplyTo

Expiration

JMSExpiration (current time millis are added)

MessageId

JMSMessageID (or default autogenerated)

Timestamp

JMSTimestamp

Type

String: JMS_AMQP_Type

UserId

String: JMS_AMQP_UserId

AppId

String: JMS_AMQP_AppId

ClusterId

String: JMS_AMQP_ClusterId

The "Headers" map of the AMQP content header is transformed into JMS message properties. The name of the header is translated into a valid JMS message property name where all invalid characters are replaced with underscores '_'. The resulting type and value of the JMS message property is determined from the field type of the AMQP header value according to the following conversion table. All other field types are ignored.

AMQP Field Type

JMS Message Property Type

t

Boolean

b, B, U, u, I

Int

i, L

Long

f, d

Float

s

Short

S

String

T

Long

Outbound Transformation (JMS to AMQP 0.9.1 Message)

Only JMS messages of the type TextMessage or BytesMessage can be transformed into an AMQP 0.9.1 message. The body of a JMS TextMessage is converted to a byte array containing the UTF-8 encoded TextMessage body. The body of a BytesMessage is directly set as the body of the AMQP 0.9.1 message.

Header translation takes place according to the following table:

JMS message header/property

AMQP header

JMS_AMQP_ContentType

ContentType

JMS_AMQP_ContentEncoding

ContentEncoding

JMSDeliveryMode

DeliveryMode

JMSPriority

Priority

JMSCorrelationID

CorrelationId

JMSReplyTo

ReplyTo

JMSExpiration

Expiration

JMSMessageID

MessageId

JMSTimestamp

Timestamp

JMS_AMQP_Type

Type

JMS_AMQP_UserId

UserId

JMS_AMQP_AppId

AppId

JMS_AMQP_ClusterId

ClusterId

All other JMS message properties are converted into the "Headers" map of the content header of the AMQP 0.9.1 message. The header name is translated where each underscore '_' is changed to a dash '-' and the property value is converted to an AMQP 0.9.1 field type according to this conversion table:

JMS Message Property Type

AMQP Field Type

String

S

Long

T

Integer

I

Short

s

Float

f

Boolean

t

null

V

Listener Configuration

An AMQP listener listens on a specific port and accepts AMQP connections. Per default and also as a result of a configuration upgrade the AMQP Swiftlet defines 2 AMQP listeners:

  • Port 5672: Listener for plain AMQP connections.

  • Port 5671: Listener for SSL/TLS AMQP connections.

All listeners handle SASL authentication.

SASL is enabled by default. If it will be disabled, the connection must directly start with an AMQP protocol header. A listener is configured by a connection template which is referenced by its name. See next section.

A new listener on a different port can be created by clicking "Create a new Entity":

Connection Templates

Connection templates are pre-configured templates that are referenced from AMQP listeners. They are located under the "Declarations" entity:

The connection template "default" does not need to be created because it refers to a connection template with all default values. The above "ssl" connection template is a default template with a different socket factory (JSSESocketFactory for SSL).

A new connection template can be created by selecting the "Connection Templates" entity and clicking "Create a new Entity":

Transformer

Message transformers are located under the entity "Declarations":

They are declared per default and/or per destination (queue or topic). AMQP specifies a message format id which is actually a version number. The current message format is 0. Message transformers are declared per message format id so that messages of different message format ids can be handled by different message transformers.

Default Transformer

Default transformers (inbound or outbound) are used if there is no destination transformer declared.

If there is no default inbound transformer declared, the AMQP Swiftlet creates an default inbound transformer for message format 0 and class com.swiftmq.impl.amqp.amqp.v01_00_00.transformer.JMSMappingInboundTransformer. The same takes place if no default outbound transformer is declared but with class com.swiftmq.impl.amqp.amqp.v01_00_00.transformer.JMSMappingOutboundTransformer.

The following steps show how to create a default inbound transformer (use similar steps to create a default outbound transformer).

  1. Select entity "Default Inbound Transformer" and click "Create a new Entity":

  1. Enter the message format id for which the transformer should be used and the class name:

  1. The transformer is now declared and uses the default values of its properties (see sections below). To change a property, select the "Properties" entity of the transformer and click "Create a new Entity":

  1. Now enter the name and value of the property:

Destination Transformer

The transformer can also be declared per destination (queue/topic). These overwrite the default transformer.

The destination name refers to the address field of the source respective target of the AMQP attach frame. For example, if a consumer is created on queue "testqueue", it looks like the above. However, if a producer is created on "testqueue@router2" (fully qualified name of a remote queue) then the name must be also "testqueue@router2". The destination transformer must be declared at the router to which the producer/consumer is connected.

Inbound Transformer

An inbound transformer transforms an AMQP message into a JMS message. It is an abstract base class for which these properties can be configured:

Property

Default

Description

name-translator

com.swiftmq.impl.amqp.amqp.v01_00_00.transformer. InvalidToUnderscoreNameTranslator

Name translator class, see last section.

prefix-vendor

JMS_AMQP_

JMS-Vendor property prefix. "JMS_AMQP_" as per AMQP spec.

default-delivery-mode

PERSISTENT

Delivery mode which is set in the target JMS message.

default-priority

Message.DEFAULT_PRIORITY

Priority which is set in the target JMS message.

default-ttl

Message.DEFAULT_TIME_TO_LIVE

Time to live which is set in the target JMS message.

An AMQP message might be split over multiple transfer frames. The payloads of all transfer frames of a message transfer are collected before the inbound transformer is called.

There are 2 predefined specializations of the inbound transformer which both inherit the above properties:

  • com.swiftmq.impl.amqp.amqp.v01_00_00.transformer.AMQPNativeInboundTransformer

  • com.swiftmq.impl.amqp.amqp.v01_00_00.transformer.JMSMappingInboundTransformer

AMQPNativeInboundTransformer

Full class name:

com.swiftmq.impl.amqp.amqp.v01_00_00.transformer.AMQPNativeInboundTransformer
JAVA

This transformer stores the whole AMQP message as the body of a JMS BytesMessage. The body will be opaque while the message travels through SwiftMQ. This means that a message selector on message fields (header, properties) can NOT be applied to this kind of message because they have not been extracted.

Resulting JMS BytesMessage:

Header/Property

Type

Description

JMSMessageID

String

Unique message id.

JMSTimestamp

long

Set to System.currentTimeMillis().

JMSExpiration

long

If default-ttl > 0: set to System.currentTimeMillis()+<default-ttl>.

JMSDeliveryMode

int

DeliveryMode.PERSISTENT or DeliveryMode.NON_PERSISTENT.

JMSPriority

int

<default-priority>.

<prefix-vendor>MESSAGE_FORMAT

long

Message format id of the AMQP message.

<prefix-vendor>NATIVE

boolean

Set to true to flag as native AMQP. This can be used by JMS clients to filter these messages out because they can only be processed by AMQP clients.

JMSMappingInboundTransformer

Full class name:

com.swiftmq.impl.amqp.amqp.v01_00_00.transformer.JMSMappingInboundTransformer
JAVA

The following properties can be configured in addition to the properties of the base class InboundTransformer:

Property

Default

Description

message-factory

com.swiftmq.impl.amqp.amqp.v01_00_00.transformer. BodyTypeMessageFactory

Message factory to create JMS messages. There is only this one currently.

prefix-delivery-annotations

DA_

Prefix for property names from delivery annotations.

prefix-message-annotations

MA_

Prefix for property names from message annotations.

prefix-footer

FT_

Prefix for property names from the footer.

overwrite-message-id

false

False: message id from the AMQP message is used. True: a new message id is generated.

jms-type-property

null

A name of a property inside the application properties of a message that will be transformed to the JMSType of the resulting JMS message. It overwrite the default "x-opt-jms-type" entry in message annotations. See below.

This transformer decodes the body of the AMQP message and uses the BodyTypeMessageFactory to create a JMS message whose type depends on the body of the AMQP message:

AMQP Message Body Type

Resulting JMS Message Type

Data

BytesMessage

AmqpSequence

StreamMessage

AmqpValue with a symbol or string

TextMessage

AmqpValue with a binary

BytesMessage

AmqpValue with a list

StreamMessage

AmqpValue with a map

MapMessage

AmqpValue with everything else

ObjectMessage with an java.io.Serializable according to the following conversion table

AMQP Primitive

java.io.Serializable

bool

Boolean

byte

Byte

ubyte

Integer

short

Integer

ushort

Integer

int

Integer

uint

Long

long

Long

ulong

Long

double

Double

float

Float

char

Integer

string

String

symbol

String

timestamp

long

binary

byte[]

Non-body sections of the AMQP message are transformed according to this conversion table:

AMQP Message

JMS Message

header:durable

JMSDeliveryMode

header:priority

JMSPriority

header:ttl

JMSExpiration

header:first-aquirer

<prefix-vendor>FirstAcquirer

header:delivery-count

JMSXDeliveryCount

delivery-annotations:<name>

<prefix-vendor><prefix-delivery-annotations><name>

message-annotations:x-opt-jms-type

JMSType

message-annotations:<name>

<prefix-vendor><prefix-message-annotations><name>

properties:message-id

JMSMessageID (may be overwritten by a generated message id)

properties:user-id

JMSXUserID

properties:to

JMSDestination

properties:subject

<prefix-vendor>Subject

properties:reply-to

JMSReplyTo

properties:correlation-id

JMSCorrelationID

properties:content-type

<prefix-vendor>ContentType

properties:content-encoding

<prefix-vendor>ContentEncoding

properties:absolute-expiry-time

JMSExpiration

properties:creation-time

JMSTimeStamp

properties:group-id

JMSXGroupID

properties:group-sequence

JMSXGroupSeq

properties:reply-to-group-id

<prefix-vendor>ReplyToGroupID

application-properties:<name>

<name>

footer:<name>

<prefix-vendor><prefix-footer><name>

Names (<name>) will be translated by the configured name translator of the base class. See last section.

Stream- and MapMessage support only certain types of values. The resulting message is flagged with an error property if another type is detected. The same takes place if the value of the AMQP type is not a java.io.Serializable. The name of the error property is <propertyname>_ERROR. For example, if the application property OrderID has an invalid value, the corresponding error property would OrderID_ERROR.

Like the native transformer, the JMS Mapping transformer sets these additional properties:

Header/Property

Type

Description

<prefix-vendor>MESSAGE_FORMAT

long

Message format id of the AMQP message.

<prefix-vendor>NATIVE

boolean

Set to false to flag as non-native AMQP.

Outbound Transformer

An outbound transformer transforms a JMS message into an AMQP message. It is an abstract base class for which these properties can be configured:

Property

Default

Description

name-translator

com.swiftmq.impl.amqp.amqp.v01_00_00.transformer. NullNameTranslator

Name translator class, see last section.

prefix-vendor

JMS_AMQP_

JMS-Vendor property prefix. "JMS_AMQP_" as per AMQP spec.

There are 2 predefined specializations of the outbound transformer which both inherit the above properties:

  • com.swiftmq.impl.amqp.amqp.v01_00_00.transformer.AMQPNativeOutboundTransformer

  • com.swiftmq.impl.amqp.amqp.v01_00_00.transformer.JMSMappingOutboundTransformer

AMQPNativeOutboundTransformer

Full class name:

com.swiftmq.impl.amqp.amqp.v01_00_00.transformer.AMQPNativeOutboundTransformer
JAVA

This transformer is the counterpart of the AMQPNativeInboundTransformer and creates an AMQP message directly from the body byte[] of a JMS BytesMessage. The following conditions must be fulfilled:

  • Input JMS Message MUST be a BytesMessage.

  • Message property <prefix-vendor>NATIVE (boolean) MUST exist and MUST be set to true.

  • Message property <prefix-vendor>MESSAGE_FORMAT (long) MUST exist.

JMSMappingOutboundTransformer

Full class name:

com.swiftmq.impl.amqp.amqp.v01_00_00.transformer.JMSMappingOutboundTransformer
JAVA

The following properties can be configured in addition to the properties of the base class OutboundTransformer:

Property

Default

Description

body-factory

com.swiftmq.impl.amqp.amqp.v01_00_00.transformer. MessageTypeBodyFactory

Body factory to create AMQP messages. There is only this one currently.

prefix-delivery-annotations

DA_

Prefix for property names from delivery annotations.

prefix-message-annotations

MA_

Prefix for property names from message annotations.

prefix-footer

FT_

Prefix for property names from the footer.

jms-type-property

null

A name of a property inside the application properties of a message where the JMSType of the source JMS message is transformed to. It overwrite the default "x-opt-jms-type" entry in message annotations. See below.

This transformer transforms a JMS message into an AMQP message and uses the MessageTypeBodyFactory to create the body of the AMQP message according to the following conversion table:

JMS Message Type

Resulting AMQP Message Body

BytesMessage

Data

TextMessage

AmqpValue with a string

MapMessage

AmqpValue with a map, values converted according following conversion table.

StreamMessage

AmqpSequence, values converted according following conversion table.

ObjectMessage

AmqpValue with an AMQP primitive according to the following conversion table

java.io.Serializable

AMQP Primitive

Boolean

bool

Byte

byte

Char

char

Short

short

Integer

int

Long

long

Double

double

Float

float

String

string

byte[]

binary

Header and properties of the JMS message are transformed to the respective sections of the AMQP message according to this conversion table:

JMS Message

AMQP Message

JMSDeliveryMode

header:durable

JMSPriority

header:priority

JMSExpiration

header:ttl

<prefix-vendor>FirstAcquirer

header:first-aquirer

JMSXDeliveryCount

header:delivery-count

<prefix-vendor><prefix-delivery-annotations><name>

delivery-annotations:<name>

JMSType

message-annotations:x-opt-jms-type

<prefix-vendor><prefix-message-annotations><name>

message-annotations:<name>

JMSMessageID

properties:message-id

JMSXUserID

properties:user-id

JMSDestination

properties:to

<prefix-vendor>Subject

properties:subject

JMSReplyTo

properties:reply-to

JMSCorrelationID

properties:correlation-id

<prefix-vendor>ContentType

properties:content-type

<prefix-vendor>ContentEncoding

properties:content-encoding

JMSExpiration

properties:absolute-expiry-time

JMSTimeStamp

properties:creation-time

JMSXGroupID

properties:group-id

JMSXGroupSeq

properties:group-sequence

<prefix-vendor>ReplyToGroupID

properties:reply-to-group-id

<name>

application-properties:<name>

<prefix-vendor><prefix-footer><name>

footer:<name>

Names (<name>) will be translated by the configured name translator of the base class. See the last section.

Name Translator

In order to work in SQL-based message selectors, property names in JMS are limited to that of Java identifiers. AMQP does not have these restrictions so a translation must take place. The AMQP Swiftlet predefines 3 name translators which should fit most requirements. If not, custom implementations can be created.

InvalidToUnderscoreNameTranslator

This name translator is used to translate AMQP names to JMS names. It replaces any character which must not be the start or part of a Java identifier with an underscore '_'.

UnderscoreToDashNameTranslator

This name translator is used to translate JMS names to AMQP names. It replaces any underscore character '_' with a dash '-'.

NullNameTranslator

This name translator does not change anything. It just returns what is passed as input name.

Custom Implementations

To create a custom name translator, implement the following interface. It is defined in sys$amqp.jar located under <swiftmqinstall>/kernel/sys$amqp. Put the class of the custom implementation in a jar file and store it under <swiftmqinstall>/kernel/sys$amqp. The class is available after restart of the SwiftMQ Router.

package com.swiftmq.impl.amqp.amqp.v01_00_00.transformer;

public interface NameTranslator
{
    public String translate(String source);
}
JAVA

Filter Translation

SwiftMQ supports the following filters which will be announced in the "offered capabilities" of the Open frame:

APACHE.ORG:NO_LOCAL
APACHE.ORG:SELECTOR
CODE

If the connecting client announces "APACHE.ORG:SELECTOR" in the "offered capabilities" or "desired capabilities" of its Open frame, the field names of the selector filter are translated from normalized AMQP names used by Apache Qpid into JMS field names, e.g. "amqp.priority = 4" will be translated to "JMSPriority = 4".

Monitoring AMQP Connections

AMQP connections are located under the "Usage" section of the AMQP Swiftlet.

Monitoring Queues

Another view can be opened on the Queue Manager Swiftlet's "Usage" section. It shows the message throughput of the queues:

Monitoring Threadpools

The AMQP Swiftlet uses 2 thread pools:

  • amqp.connection: Performs connection tasks and outbound writes.

  • amqp.session: Performs session tasks.

Both thread pools (and all others) can be observed in the Threadpool Swiftlet's "Usage" section:

Tracing and Debugging

A SwiftMQ Router has an integrated tracing facility. To get AMQP protocol information only, change the single predicate of the "protocol" space to "amqp%". If you let it at "%", it will also trace SMQP, SMQPR, SMQPHA. Then enable the "protocol" space. The trace output goes to <<>swiftmqinstall>/trace/protocol.trace by default.

The following snippet shows how to enable the above tracing directly in the routerconfig.xml of router1 to have tracing enabled on startup:

<swiftlet name="sys$trace">
    <spaces>
        ...
        <space name="protocol" enabled="true">
            <predicates>
                <predicate name="1" filename="../../trace/router1/protocol.trace" value="amqp%"/>
            </predicates>
        </space>
        ...
    </spaces>
</swiftlet>
XML

Configuration

The configuration of the AMQP Swiftlet is defined within the element

      <swiftlet name="sys$amqp" .../>
XML

of the router's configuration file.

Attributes of Element "swiftlet"

Definition

Attribute

Type

Mandatory

Description

allow-same-containerid

java.lang.Boolean

No

If set to false, it is handled like a JMS Client Id

collect-interval

java.lang.Long

No

Collect Interval Messages/Sec

Values

Attribute

Values

allow-same-containerid

Default: true

collect-interval

Default: 1000

Element "declarations", Parent Element: "swiftlet"

Declarations Section.

Element "transformer", Parent Element: "declarations"

Message Transformer.

Element List "default-inbound-transformers", Parent Element: "transformer"

Default Inbound Transformers. This element list contains zero or more "default-inbound-transformer" elements with this template definition:

Definition

Attribute

Type

Mandatory

Description

name

java.lang.String

Yes

Name of this Default Inbound Transformer

class-name

java.lang.String

Yes

Class Name

Values

Attribute

Values

class-name

Default: com.swiftmq.impl.amqp.amqp.v01_00_00.transformer.JMSMappingInboundTransformer

Element List "properties", Parent Element: "default-inbound-transformer"

Properties. This element list contains zero or more "property" elements with this template definition:

Definition

Attribute

Type

Mandatory

Description

name

java.lang.String

Yes

Name of this Property

value

java.lang.String

Yes

Property Value

Values

Attribute

Values

value

Element List "default-outbound-transformers", Parent Element: "transformer"

Default Outbound Transformers. This element list contains zero or more "default-outbound-transformer" elements with this template definition:

Definition

Attribute

Type

Mandatory

Description

name

java.lang.String

Yes

Name of this Default Outbound Transformer

class-name

java.lang.String

Yes

Class Name

Values

Attribute

Values

class-name

Default: com.swiftmq.impl.amqp.amqp.v01_00_00.transformer.JMSMappingOutboundTransformer

Element List "properties", Parent Element: "default-outbound-transformer"

Properties. This element list contains zero or more "property" elements with this template definition:

Definition

Attribute

Type

Mandatory

Description

name

java.lang.String

Yes

Name of this Property

value

java.lang.String

Yes

Property Value

Values

Attribute

Values

value

Element List "destination-transformers", Parent Element: "transformer"

Transformer Declaration per Queue/Topic. This element list contains zero or more "destination-transformer" elements with this template definition:

Definition

Attribute

Type

Mandatory

Description

name

java.lang.String

Yes

Name of this Destination Transformer

Element List "inbound-transformers", Parent Element: "destination-transformer"

Inbound Transformers. This element list contains zero or more "inbound-transformer" elements with this template definition:

Definition

Attribute

Type

Mandatory

Description

name

java.lang.String

Yes

Name of this Inbound Transformer

class-name

java.lang.String

Yes

Class Name

Values

Attribute

Values

class-name

Default: com.swiftmq.impl.amqp.amqp.v01_00_00.transformer.JMSMappingInboundTransformer

Element List "properties", Parent Element: "inbound-transformer"

Properties. This element list contains zero or more "property" elements with this template definition:

Definition

Attribute

Type

Mandatory

Description

name

java.lang.String

Yes

Name of this Property

value

java.lang.String

Yes

Property Value

Values

Attribute

Values

value

Element List "outbound-transformers", Parent Element: "destination-transformer"

Outbound Transformers. This element list contains zero or more "outbound-transformer" elements with this template definition:

Definition

Attribute

Type

Mandatory

Description

name

java.lang.String

Yes

Name of this Outbound Transformer

class-name

java.lang.String

Yes

Class Name

Values

Attribute

Values

class-name

Default: com.swiftmq.impl.amqp.amqp.v01_00_00.transformer.JMSMappingOutboundTransformer

Element List "properties", Parent Element: "outbound-transformer"

Properties. This element list contains zero or more "property" elements with this template definition:

Definition

Attribute

Type

Mandatory

Description

name

java.lang.String

Yes

Name of this Property

value

java.lang.String

Yes

Property Value

Values

Attribute

Values

value

Element List "connection-templates", Parent Element: "declarations"

Templates for Connections. This element list contains zero or more "connection-template" elements with this template definition:

Definition

Attribute

Type

Mandatory

Description

name

java.lang.String

Yes

Name of this Connection Template

socketfactory-class

java.lang.String

No

Socketfactory Class

use-tcp-no-delay

java.lang.Boolean

No

Use Tcp No Delay

idle-timeout

java.lang.Long

No

Inactivity timeout (ms) after which a Connection is disconnected

max-frame-size

java.lang.Long

No

Maximum Frame Size

max-message-size

java.lang.Long

No

Maximum Message Size

max-channel-number

java.lang.Integer

No

Maximum Channel Number

target-link-credit

java.lang.Long

No

Link Credit for Targets

max-handle-number

java.lang.Long

No

Maximum Handle Number

incoming-window-size

java.lang.Integer

No

Maximum Number of incoming unsettled Transfer Frames

outgoing-window-size

java.lang.Integer

No

Maximum Number of outgoing unsettled Transfer Frames

reject-disconnect-delay

java.lang.Long

No

Time (ms) after which a rejected Connection is closed

router-input-buffer-size

java.lang.Integer

No

Router Network Input Buffer Size

router-input-extend-size

java.lang.Integer

No

Router Network Input Extend Size

router-output-buffer-size

java.lang.Integer

No

Router Network Output Buffer Size

router-output-extend-size

java.lang.Integer

No

Router Network Output Extend Size

Values

Attribute

Values

socketfactory-class

Default: com.swiftmq.net.PlainSocketFactory

use-tcp-no-delay

Default: true

idle-timeout

Default: 90000

max-frame-size

Min: 0
Max: 2147483647
Default: 2147483647

max-message-size

Min: 0
Max: 2147483647
Default: 10485760

max-channel-number

Min: 0
Max: 65535
Default: 65535

target-link-credit

Min: 1
Max: 2147483647
Default: 20

max-handle-number

Min: 0
Max: 2147483647
Default: 2147483647

incoming-window-size

Min: 1
Max: 2147483647
Default: 100

outgoing-window-size

Min: 1
Max: 2147483647
Default: 100

reject-disconnect-delay

Min: 1000
Default: 5000

router-input-buffer-size

Min: 65536
Default: 131072

router-input-extend-size

Min: 65536
Default: 65536

router-output-buffer-size

Min: 65536
Default: 131072

router-output-extend-size

Min: 65536
Default: 65536

Element List "listeners", Parent Element: "swiftlet"

Listener Definitions. This element list contains zero or more "listener" elements with this template definition:

Definition

Attribute

Type

Mandatory

Description

name

java.lang.String

Yes

Name of this Listener

bindaddress

java.lang.String

No

Listener Bind IP Address

port

java.lang.Integer

Yes

Listener Port

max-connections

java.lang.Integer

Yes

Maximum Connections for Listener

sasl-enabled

java.lang.Boolean

No

Enabled/Disabled SASL Authentication

connection-template

java.lang.String

Yes

Connection Template to use

Values

Attribute

Values

bindaddress

port

Default: 5672

max-connections

Default: -1

sasl-enabled

Default: true

connection-template

Default: default

Element List "host-access-list", Parent Element: "listener"

Host Access List. This element list contains zero or more "host-access-entry" elements with this template definition:

Definition

Attribute

Type

Mandatory

Description

name

java.lang.String

Yes

Name of this Host Access Entry

Element List "usage", Parent Element: "swiftlet"

Active AMQP Connections. This element list contains zero or more "usage" elements with this template definition:

Definition

Attribute

Type

Mandatory

Description

name

java.lang.String

Yes

Name of this Active AMQP Connection

container-id

java.lang.String

No

Container Id

connect-time

java.lang.String

No

Connect Time

msgs-received

java.lang.Integer

No

Messages/Sec received from Connection

msgs-sent

java.lang.Integer

No

Messages/Sec sent to Connection

total-received

java.lang.Integer

No

Total Number of Messages received from Connection

total-sent

java.lang.Integer

No

Total Number of Messages sent to Connection

username

java.lang.String

No

User Name

amqp-version

java.lang.String

No

AMQP Version

Values

Attribute

Values

container-id

connect-time

msgs-received

Default: 0

msgs-sent

Default: 0

total-received

Default: 0

total-sent

Default: 0

username

amqp-version

Element List "sessions", Parent Element: "usage"

Sessions created by this Connection. This element list contains zero or more "session" elements with this template definition:

Definition

Attribute

Type

Mandatory

Description

name

java.lang.String

Yes

Name of this Session

remote-channel

java.lang.Integer

No

Remote Channel

next-incoming-id

java.lang.Long

No

Next Incoming Id

next-outgoing-id

java.lang.Long

No

Next Outgoing Id

incoming-window

java.lang.Long

No

Incoming Window

outgoing-window

java.lang.Long

No

Outgoing Window

remote-incoming-window

java.lang.Long

No

Remote Incoming Window

remote-outgoing-window

java.lang.Long

No

Remote Outgoing Window

Values

Attribute

Values

remote-channel

Default: -1

next-incoming-id

Default: 0

next-outgoing-id

Default: 0

incoming-window

Default: 0

outgoing-window

Default: 0

remote-incoming-window

Default: 0

remote-outgoing-window

Default: 0

Element List "targetlinks", Parent Element: "session"

Target Links created by this Session. This element list contains zero or more "targetlink" elements with this template definition:

Definition

Attribute

Type

Mandatory

Description

name

java.lang.String

Yes

Name of this Target Link

remote-address

java.lang.String

No

Remote Address (Destination)

local-address

java.lang.String

No

Local Address (Destination)

link-credit

java.lang.Long

No

Current Link Credit

delivery-count

java.lang.Long

No

Current Delivery Count

messages-received

java.lang.Long

No

Number Messages Received

unsettled-transfers

java.lang.Integer

No

Number unsettled Transfers

Values

Attribute

Values

remote-address

local-address

link-credit

Default: -1

delivery-count

Default: 0

messages-received

Default: 0

unsettled-transfers

Default: 0

Element List "sourcelinks", Parent Element: "session"

Source Links created by this Session. This element list contains zero or more "sourcelink" elements with this template definition:

Definition

Attribute

Type

Mandatory

Description

name

java.lang.String

Yes

Name of this Source Link

local-address

java.lang.String

No

Local Address (Destination)

remote-address

java.lang.String

No

Remote Address (Destination)

link-credit

java.lang.Long

No

Current Link Credit

delivery-count-snd

java.lang.Long

No

Current Delivery Count Send

delivery-count-rcv

java.lang.Long

No

Current Delivery Count Received

messages-sent

java.lang.Long

No

Number Messages Sent

unsettled-transfers

java.lang.Integer

No

Number unsettled Transfers

nolocal

java.lang.Boolean

No

Does not send local Messages

selector

java.lang.String

No

Message Selector

drain

java.lang.Boolean

No

Drain Flag

Values

Attribute

Values

local-address

remote-address

link-credit

Default: -1

delivery-count-snd

Default: 0

delivery-count-rcv

Default: 0

messages-sent

Default: 0

unsettled-transfers

Default: 0

nolocal

Default: false

selector

drain

Default: false