AMQP Swiftlet
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
orSESSION_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).
Select entity "Default Inbound Transformer" and click "Create a new Entity":
Enter the message format id for which the transformer should be used and the class name:
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":
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
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
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
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
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);
}
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
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>
Configuration
The configuration of the AMQP Swiftlet is defined within the element
<swiftlet name="sys$amqp" .../>
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-message-size | Min: 0 |
max-channel-number | Min: 0 |
target-link-credit | Min: 1 |
max-handle-number | Min: 0 |
incoming-window-size | Min: 1 |
outgoing-window-size | Min: 1 |
reject-disconnect-delay | Min: 1000 |
router-input-buffer-size | Min: 65536 |
router-input-extend-size | Min: 65536 |
router-output-buffer-size | Min: 65536 |
router-output-extend-size | Min: 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 |