Sun GlassFish Message Queue 4.4 Administration Guide

Configuring and Managing JMS Bridge Services

Because the JMS specification does not dictate the communication protocol between brokers and clients, each JMS provider (including Message Queue) has defined and uses its own propriety protocol. This situation has led to non-interoperability across JMS providers.

The JMS bridge service in Message Queue 4.4 closes this gap by enabling a Message Queue broker to map its destinations to destinations in external JMS providers. This mapping effectively allows the Message Queue broker to communicate with clients of the external JMS provider.

The JMS bridge service supports mapping destinations to external JMS providers that:

As an administrative and management convenience, the JMS bridge service supports the creation of any number of JMS bridges in a broker. Each JMS bridge in the broker is identified by a unique name, has its own configuration, and is managed separately from other JMS bridges in the broker.

The following subsections provide information about JMS bridges and how to configure and manage them:

JMS Bridge Components

A JMS bridge consists of two primary components:

To provide destination mapping, each link consists of:

Links are unidirectional. Links that have an external JMS provider or another Message Queue broker as their source are called inbound links, and links that have the Message Queue broker as their source are called outbound links.

To configure these components, you specify several imq.bridge.bridgeName broker properties, and you create an XML configuration file that specifies the links, sources, targets, connection factories, destinations, and DMQs in the bridge. This XML configuration file must conform to the JMS bridge DTD.

JMS Bridge Features

To provide flexible, high-performing message transfer between mapped destinations, a JMS bridge offers these features:

Pooled, Shared, and Dedicated Connections

A JMS bridge uses the connection factories configured for link sources, link targets, and DMQs to create connections to the Message Queue broker and the external JMS provider. When making connections, the JMS bridge follows these rules to determine whether to use a pooled connection, a shared connection, or a dedicated connection:

Transactional Message Transfer

Each JMS bridge includes a built-in XA transaction coordinator that enables its links to be configured as "transacted" such that message transfer from the source to the target is done in a XA distributed transaction.

For a link to be configured as transacted, both the link source and link target must specify connection factories of type javax.jms.XAConnectionFactory.

The built-in XA transaction coordinator logs transaction records using the same type of store as the Message Queue broker in which the JMS bridge resides. For file-based transaction logging, the transaction log for a JMS bridge is located at:


IMQ_VARHOME/instances/brokerInstance/bridges/bridgeName/txlog.bridgeNane

For JDBC-based transaction logging, the built-in XA transaction coordinator uses the same JDBC store as the Message Queue broker in which the JMS bridge resides.

Resource Manager Registration and The Built-In XA Transaction Coordinator

When a JMS bridge is started, it registers all its Resource Managers (RMs) with the built-in XA transaction coordinator so that the coordinator can identify specific RMs during recovery.

For connection factories, the JMS bridge only registers the factory as an RM if the factory's multi-rm attribute value is false. A connection factory with a multi-rm attribute value of true should have each of its RMs identified by a connection factory whose multi-rmattribute value of false in order to participate in transactional message transfer. Additionally, the JMS bridge uses a connection factory's ref-name attribute value as part of its RM name when registering RMs with the built-in XA transaction coordinator, so this attribute should not be changed between restarts of the bridge if transaction recovery is desired between restarts.

JMS Bridges in High Availability (HA) Broker Clusters

Message Queue supports JMS bridges in HA broker clusters, but some special constraints apply due to the inherent nature of HA broker clusters:

To ensure that bridges in the cluster have the same configuration across all brokers in the cluster, all bridge-related broker properties except for imq.bridge.activelist should be specified in the centralized cluster properties file defined by the imq.cluster.url broker property.

A table in the cluster's HA store is used to maintain a consistent record of JMS bridge ownership by the brokers in the cluster.

During broker startup, the JMS bridge service compares the broker's imq.bridge.activelist property value to this table's entries before starting any JMS bridges, with the following consequences:

Message Transformation During Message Delivery

A link target or a DMQ can specify a message transformer to process the message before it is delivered to the target destination or DMQ destination. This message transformer must be a Java class that extends the Message Queue bridge com.sun.messaging.bridge.service.MessageTransformer abstract class and has javax.jms.Message as its formal type parameters. To specify a message transformer, set the message-transformer-class attribute of a link target or a DMQ to the fully qualified class name of the Java class.

During message transfer processing, the JMS message to be transferred to a target, plus any property subelements of the link's target element or the dmq element, are passed to the message transformer's MessageTransformer.transform() method, and the returned JMS message is sent to the target destination.

JMSReplyTo Header Processing

In a JMS message, the JMSReplyTo header value is provider dependent. Therefore, unless both the source provider and target provider are Message Queue, the JMS bridge sets an existing JMSReplyTo header to a null value before passing the message to a link target or, if specified, the message transformer for the link target.

This default behavior can be overridden by setting the retain-replyto attribute of the link's target element to true. Overriding the default behavior is useful when:

Dead Message Queue (DMQ) Processing

Each JMS bridge includes a built-in Dead Message Queue (DMQ) named built-in-dmq. This DMQ is a designated Queue destination named imq.bridge.jms.dmq in the broker hosting the JMS bridge. You can also configure additional DMQs for the JMS bridge, in which case the DMQ can use any JMS destination in any configured JMS provider.


Note –

In a production environment, the built-in DMQ, imq.bridge.jms.dmq, should be administratively created and have its access controls set appropriately before starting a broker that uses JMS bridge services.


When a DMQ uses Message Queue as the JMS provider, it can be configured such that messages sent to it will automatically be transferred to the Message Queue broker's DMQ. To do so, set physical destination properties of the JMS bridge's DMQ as follows:


useDMQ=true
limitBehavior=REMOVE_OLDEST
maxNumMsgs=0

When a message is sent to the DMQ, the JMS bridge follows this sequence with the built-in DMQ first:

  1. The bridge creates a new DMQ javax.jms.ObjectMessage object and sets the properties listed in Table 12–1 to the ObjectMessage.

  2. If the DMQ has defined a message transformer, the original message is passed to the transformer's MessageTransformer.transform() method.

  3. The body of the javax.jms.ObjectMessage is set to the transformed message (or original message if no message transformer is defined). If this action fails (usually because the message is not serializable), the body of the ObjectMessage is instead set to the toString() value of the original message.

  4. The javax.jms.ObjectMessage is sent (up to send-attempts times) to the DMQ's destination with a timeToLive value based on the DMQ's time-to-live-in-millis attribute and with the same JMSDeliveryMode and JMSPriority as the original message.

  5. If sending the message fails, the bridge repeats Steps 2 through 4 for each DMQ defined in the bridge's XML configuration file in the order they appear in the file, stopping when a send attempt succeeds, unless it is the built-in DMQ.

  6. If the message can't be sent to any DMQ, a log message is generated, containing the properties and headers of the original message and the properties set in Step 1.

Table 12–1 DMQ Message Propeties

Property 

Type 

Description 

JMS_SUN_JMSBRIDGE_DMQ_BODY_TRUNCATED

String 

If unable to set the original message or the transformed message (if the DMQ has a message transformer) to the body of the DMQ ObjectMessage. In that case the message's toString() is set to the body of the DMQ ObjectMessage.

JMS_SUN_JMSBRIDGE_DMQ_EXCEPTION

String 

The Exception.getMessage() if exception occurred or detailed comments on the failure; null if none.

JMS_SUN_JMSBRIDGE_DMQ_REASON

String 

One of: MESSAGE_EXPIRED, SEND_FAILURE, ACK_FAILURE, TRANSFORM_FAILURE, COMMIT_FAILURE.

JMS_SUN_JMSBRIDGE_DMQ_TIMESTAMP

String 

The timestamp when the JMS bridge sends the message to the DMQ. 

JMS_SUN_JMSBRIDGE_SOURCE_CORRELATIONID

String 

The original message's getJMSCorrelationID().

JMS_SUN_JMSBRIDGE_SOURCE_DESTINATION

String 

The original message's source destination name. 

JMS_SUN_JMSBRIDGE_SOURCE_JMSTYPE

String 

The original message's getJMSType().

JMS_SUN_JMSBRIDGE_SOURCE_MESSAGEID

String 

The orginal message's getJMSMessageID(), or null if not available.

JMS_SUN_JMSBRIDGE_SOURCE_PROVIDER

String 

The ConnectionMetaData.getJMSProviderName of the connection the original message was received on; if not available, the source connection factory's getClass().getName().

JMS_SUN_JMSBRIDGE_SOURCE_TIMESTAMP

Long 

The original message's getJMSTimestamp().

JMS_SUN_JMSBRIDGE_TARGET_DESTINATION

String 

The name of the target destination where the original message was intended to send to. 

JMS_SUN_JMSBRIDGE_TARGET_PROVIDER

String 

The ConnectionMetaData.getJMSProviderName of the connection the original message was intended to send on; if not available, the target connection factory's getClass().getName().

Message Processing Sequence Across a Link in a JMS Bridge

A JMS bridge link receives messages in the order sent by the link's source JMS provider and transfer them in the same order to the link's target JMS provider. A link follows this sequence to transfer each message:

  1. The link receives a JMS message from its source.

  2. The link checks the JMSExpiration header to determine whether the message has expired. If it has, a log message is generated, the JMS message is sent to the DMQ, and no further action is taken.

  3. If the message has a JMSReplyTo header and the link target's retain-replyto attribute is false, the JMSReplyTo header value is set to null.

  4. If the link target has defined a message transformer, the transformer's MessageTransformer.transform() method is called. If the call fails or if the message transformer returns a null value, a log message is generated and then processing continues as follows:

    • In Message Queue 4.4, the untransformed message is sent to the DMQ and processing continues on the untransformed message.

    • In Message Queue 4.4 Update 1, if the target's consume-no-transfer-on-transform-error XML attribute is true, the untransformed message is sent to the DMQ, consumed from the source, but not sent to the target.

    • In Message Queue 4.4 Update 1, if the target's consume-no-transfer-on-transform-error XML attribute is false, the link is stopped and the message is neither consumed from the source nor sent to the target.

  5. Beginning with Message Queue 4.4 Update 1, if the message-transfer-tag-bridge-name attribute of the jmsbridge element is true, the JMS_SUN_JMSBRIDGE_NAME property is added to the message and set to the name of the bridge.

  6. The message is sent to the link target's destination with a timeToLive value based on the JMSExpiration header and current GMT time and with the same JMSDeliveryMode and JMSPriority values as the original message. If sending to the link target's destination fails and the link is not transacted, a log message is generated, the JMS message is sent to the DMQ, and processing continues.

  7. The source message is acknowledged using JMS CLIENT_ACKNOWLEDGE if the link is not transacted. If the acknowledgement fails, a log message is generated and the JMS message is sent to the DMQ.

  8. Beginning in Message Queue 4.4 Update 1, if the message processing was successful, an INFO log message is generated.

Message processing for messages across transacted links follows the same processing sequence, except JTA interfaces are used to coordinate the source and target resource managers to transfer the message in an XA distributed transaction. For transacted links, failure to send the message to the link target's destination does not cause the JMS message to be sent to the DMQ; instead, the transaction is rolled back. However, if the attempt to commit the transaction fails, a log message is generated and the JMS message is sent to the DMQ.

The quality of message transfer under failures depends on whether the link transferring the message is transacted:

Configuring a JMS Bridge

To configure a JMS bridge, you specify several imq.bridge.bridgeName broker properties, where bridgeName is a name you choose for the JMS bridge. Additionally, you create an XML configuration file that specifies the links, sources, targets, connection factories, destinations, and DMQs in the bridge. The url of this configuration file is provided as the value of the imq.bridge.bridgeName.xml property

Specifying the Broker Properties for a JMS Bridge

Table 12–2 lists the broker properties you can specify for a JMS bridge. In this table, name is the name of the JMS bridge, which must be unique across all bridges in the broker.

Table 12–2 Broker Properties for a JMS Bridge

Property 

Type 

Default Value 

Description 

imq.bridge.name.type

String 

None 

The bridge type of the bridge named name. For JMS bridges, specify a value of JMS or jms.

imq.bridge.name.xmlurl

String 

None 

The URL where the XML configuration file for the JMS bridge name is stored.

Examples:

    http://webserver/imq/jmsbridge1.config.xml


    (for a file on a Web server)


    file:/net/fileserver/imq/jmsbridge1.config.xml


    (for a file on a shared drive)


imq.bridge.name.autostart

Boolean 

true

Should the JMS bridge name be automatically started when the broker is started?

imq.bridge.name.logfile.limit

Integer 

0

The approximate maximum number of bytes the JMS bridge name writes to any one log file.

A value of 0 (zero) indicates that there is no maximum limit.

imq.bridge.name.logfile.count

Integer 

1

The number of log files the JMS bridge name cycles through.

imq.bridge.tm.props

imq.bridge.name.tm.props

String 

None 

Each of these properties specifies a list of key-value pairs for the built-in transaction coordinator for the JMS bridge name.

The list consists of one or more key=value pairs separated by commas.

When the imq.persist.store is file, the built-in transaction coordinator supports these keys: txlogSize, txlogSync, and txlogMmap.

If the same key appears in both properties, the value specified in imq.bridge.name.tm.props takes precedence.

Creating the XML Configuration File for a JMS Bridge

As mentioned earlier, the XML configuration file for a JMS bridge specifies the following components of the bridge:

The configuration file must conform to the JMS bridge DTD, which is stored at:


IMQ_HOME/lib/dtd/sun_jmsbridge_Version.dtd

The basic structure of configuration file is:


<jmsbridge name=bridgeName otherAttributes>
    <link name=linkName otherAttributes>
        [ <description>linkDescription</description> ]
        <source connection-factory-ref=connFactoryRef destination-ref=destRef otherAttributes>
            [ <description>sourceDescription</description>
        </source>
        <target connection-factory-ref=connFactoryRef destination-ref=destRef otherAttributes>
            [ <description>targetDescription</description> ]
            [ <property name=propName value=propValue /> ] ...
        </target>
    </link> 
    <dmq name=dmqName otherAttributes> /* use name="built-in-dmq" for the built-in DMQ */
        [ <description>dmqDescription</description> ]
        [ <property name=propName value=propValue /> ] ...
    </dmq> 
    <connection-factory ref-name=connFactoryRef otherAttributes>
        [ <description>connFactoryDescription</description> ]
        [ <property name=propName value=propValue /> ] ...
    </connection-factory> 
    <destination ref-name=destRef otherAttributes>
        [ <description>destDescription</description> ]
        [ <property name=propName value=propValue /> ] ...
    </destination> ...
</jmsbridge>

From this abbreviated structure for the bridge XML configuration file, note that source and target are subelements of link, while connection-factory and destination are peer elements to link, not subelements of source and target. Connection factories and destinations are associated with sources and targets by matching connection-factory ref-name and destination ref-name attributes values to source and target connection-factory-ref and destination-ref attribute values, respectively.

As a result of this association by name-matching instead of by subelement inclusion, you can use the same connection factories and destinations across sources and targets in multiple links, thus streamlining the configuration file and making it more manageable.

The following subsections describe the attributes you can specify for the elements in the JMS bridge XML configuration file.

jmsbridge Attributes

Table 12–3 lists the attributes for the jmsbridge element in the JMS Bridge XML configuration file.

Table 12–3 jmsbridge Attributes

Attribute 

Type 

Description 

name

String 

Unique name for this JMS bridge. 

Default value: no default 

message-transfer-tag-bridge-name [First available in Message Queue 4.4 Update 1]

Boolean 

Should the JMS_SUN_JMSBRIDGE_NAME property be defined and set to the name of the bridge for each message before transferring to the link target?

Default value: false

link Attributes

Table 12–4 lists the attributes for the link element in the JMS Bridge XML configuration file.

Table 12–4 link Attributes

Attribute 

Type 

Description 

enabled

Boolean 

If false, the link will not be started

Default value: true

name

String 

Unique identifier for this link 

Default value: no default 

transacted

Boolean 

If true, each message transfer from source to target will be done in a XA distributed transaction. The connection factories specified by the source and target must be javax.jms.XAConnectionFactory objects.

If false, CLIENT_ACKNOWLEDGE mode will be used on the source The connection factories specified by the source and target must be javax.jms.ConnectionFactory objects.

Default value: true

source Attributes

Table 12–5 lists the attributes for the source element in the JMS Bridge XML configuration file.

Table 12–5 source Attributes

Attribute 

Type 

Description 

clientid

String 

A JMS client identifier for the message consumer connection 

Default value: not set 

connection-factory-ref

String 

The ref-name attribute value of the connection-factory element to associate with this source.

Default value: no default 

destination-ref

String 

The ref-name attribute value of the destination element to associate with this source.

Default value: no default 

durable-sub

String 

A JMS durable subscription name. 

This attribute is ignored if the source's destination is not a javax.jms.Topic object.

Default value: not set 

selector

String 

A JMS selector for the message consumer 

Default value: not set 

target Attributes

Table 12–6 lists the attributes for the target element in the JMS Bridge XML configuration file.

Table 12–6 target Attributes

Attribute 

Type 

Description 

clientid

String 

A JMS client identifier for the message producer connection; if set, use a dedicated connection. 

Default value: not set 

connection-factory-ref

String 

The ref-name attribute value of the connection-factory element to associate with this target.

Default value: no default 

consume-no-transfer-on-transform-error [First available inMessage Queue 4.4 Update 1]

Boolean 

Controls processing when the message transformer's MessageTransformer.transform() method returns a null value or throws java.lang.Throwable:

  • If true, the message is sent to the DMQ and consumed from the source but not sent to the target.

  • If false, the link is stopped, and the message is neither consumed from the source nor transferred to the target.

Default value: false

destination-ref

String 

The ref-name attribute value of the destination element to associate with this target.

Beginning in Message Queue 4.4 Update 1, the value AS_SOURCE is also supported. This value causes the target destination name and type to be set to the source message's javax.jms.Message.getJMSDestination(), unless overridden by the message transformer's MessageTransformer.branchTo().

Default value: no default 

message-transformer-class

String 

A fully qualified class name that extends the Message Queue bridge MessageTransformer class. For more information, see Message Transformation During Message Delivery. Place this class under the IMQ_HOME/lib/ext directory.

Default value: not set 

retain-replyto

Boolean 

Should the value of the source message's JMSReplyTo header (if specified) be retained? For more information, see JMSReplyTo Header Processing.

Default value: false

stay-connected

Boolean 

If true, the message producer connection will stay connected, and be dedicated.

Default value: true

dmq Attributes

Table 12–7 lists the attributes for the dmq element in the JMS Bridge XML configuration file.

Table 12–7 dmq Attributes

Attribute 

Type 

Description 

client-id

String 

JMS client identifier for the DMQ producer connection. If set, the connection will be dedicated. 

Default value: not set 

connection-factory-ref [This attribute is ignored for the built-in DMQ, built-in-dmq]

String 

The ref-name attribute value of the connection-factory element to associate with this DMQ. This connection factory must be a javax.jms.ConnectionFactory object.

Default value: no default 

destination-ref

String 

The ref-name attribute value of the destination element to associate with this DMQ.

Default value: no default 

enabled

Boolean 

Is this DMQ is enabled? 

Default value: true

message-transformer-class

String 

A fully qualified class name that extends the Message Queue bridge MessageTransformer class. For more information, see Message Transformation During Message Delivery.

Default value: not set 

name

String 

The unique identifier of this DMQ. 

Default value: no default 

send-attempt-interval-in-seconds

Integer 

How long to wait before attempting to resend an undeliverable message to this DMQ. 

Default value: 5

send-attempts

Integer 

The number of attempts to send (or resend) an undeliverable message to this DMQ. 

Default value: 3

stay-connected

Boolean 

If true, the DMQ producer connection will stay connected and be dedicated. 

Default value: true

time-to-live-in-millis

Integer 

Time-to-live in milliseconds for messages going to this DMQ. The value 0 means forever.

Default value: 0

connection-factory Attributes

Table 12–8 lists the attributes for the connection-factory element in the JMS Bridge XML configuration file.

Table 12–8 connection-factory Attributes

Attribute 

Type 

Description 

connect-attempt-interval-in-seconds

Integer 

How long to wait before each connect attempt. 

Default value: 5

connect-attempts

Integer 

The number of attempts for connecting. The value -1 means retry forever

Default value: -1

idle-timeout-in-seconds

Integer 

Close a connection if it is idle for more than this long. The value 0 indicates no idle timeout. This attribute is ignored for sources and for targets and DMQs that have their stay-connected attribute set to true.

Default value: 1800

lookup-name

String 

JNDI lookup name. If specified, the JNDI environment properties must specified as property subelements of this connection-factory element. The object returned by the lookup must be either javax.jms.ConnectionFactory or javax.jms.XAConnectionFactory type

If not specified, a default connection factory to the Message Queue broker hosting the bridge is created with the properties in the property subelements.

Default value: not set 

multi-rm

Boolean 

Set to true if this connection factory will potentially create XA connections to more than one XA resource manager (that is, XAResource.isSame() is false among them). Also, add separate connection-factory for each such resource manager so that they will be registered separately to the built-in XA transaction coordinator.

Default value: false

password [First available inMessage Queue 4.4 Update 1]

String 

The password for the user specified in username.

Default value: not set 

ref-name

String 

Unique name for this connection factory. 

Default value: no default 

username

String 

The user name to be used to create connections from this connection factory. If this attribute is set, the password attribute must also be set.

If not set, connections are created using the no-argument createConnection() method of the connection factory.

Default value: not set 

destination Attributes

Table 12–9 lists the attributes for the destination element in the JMS Bridge XML configuration file.

Table 12–9 destination Attributes

Attribute 

Type 

Description 

lookup-name

String 

JNDI lookup name for the destination. If specified, the JNDI environment properties must specified as property subelements of this destination element.

Default value: not set 

name

String 

The JMS destination name of this destination. This attribute is ignored if lookup-name is specified.

Default value: not set 

ref-name

String 

Unique name for this destination. 

Default value: no default 

type

queue or topic

The JMS destination type of this destination. This attribute is ignored if lookup-name is specified

Default value: queue

Starting and Stopping JMS Bridges

JMS bridges can be started automatically when the broker hosting the bridge starts, or manually using the imqbridgemgr utility. Similarly, JMS bridges are stopped automatically when the broker hosting the bridge is shut down, or manually using the imqbridgemgr utility.

When a JMS bridge is started, the JMS bridge manager performs these tasks:

  1. Parse and validate the bridge's XML configuration file.

  2. Initialize all links and DMQs that have their enabled attribute set to true.

  3. If any enabled links have their transacted attribute set to true:

    1. Initialize the built-in XA transaction coordinator.

    2. Register resource managers (RMs) for all potential XA connection factories.

    3. Perform XA recovery for available RMs.

  4. Create connection pools and shared connections as needed.

  5. Ensure that all DMQs are ready.

  6. Start all enabled links.

When a JMS bridge is stopped, the JMS bridge manager performs these tasks:

  1. Stop all started and paused links.

  2. Wait until all pooled connections are returned to their respective pools and until all references to shared connections are returned.

  3. Close all connection pools and shared connections. This effectively causes all physical connections to JMS providers to close.

ProcedureTo Configure a JMS Bridge to Start at Broker Startup

Follow these steps to configure a JMS bridge so that it starts automatically when the broker hosting it is started.

  1. Confirm that the bridge service manager is enabled.

    See To Enable the Bridge Service Manager for instructions.

  2. Add the name of the bridge to the imq.bridge.activelist broker property.

  3. Confirm that the imq.bridge.bridgeName.autostart broker property is set to true.

ProcedureTo Start a JMS Bridge Manually

  1. Enter the imqbridgemgr start bridge command, specifying the bridge name and the broker.

    For example, to start the bridge mq2external hosted by the broker running on myhost:8886, enter this command:


    imqbridgemgr start bridge -bn mq2external -b myhost:8886

ProcedureTo Stop a JMS Bridge Manually

  1. Enter the imqbridgemgr stop bridge command, specifying the bridge name and the broker.

    For example, to stop the bridge mq2external hosted by the broker running on myhost:8886, enter this command:


    imqbridgemgr stop bridge -bn mq2external -b myhost:8886

Starting and Stopping Links in a JMS Bridge

Links in a JMS bridge are started automatically when the bridge starts. Similarly, links are stopped automatically when the bridge is stopped. Additionally, once a JMS bridge is started, any of its links can be paused, resumed, stopped or restarted manually using the imqbridgemgr utility.

ProcedureTo Stop a Link Manually

  1. Enter the imqbridgemgr stop link command, specifying the link name, the bridge name, and the broker.

    For example, to stop the link link1 in the bridge mq2external hosted by the broker running on myhost:8886, enter this command:


    imqbridgemgr stop link  -ln link1 -bn mq2external -b myhost:8886

ProcedureTo Start a Link Manually

A link cannot be started manually unless it is enabled; that is, the enabled attribute of its link element in the bridge's XML configuration file is set to true.

  1. Enter the imqbridgemgr start link command, specifying the link name, the bridge name, and the broker.

    For example, to start the link link1 in the bridge mq2external hosted by the broker running on myhost:8886, enter this command:


    imqbridgemgr start link  -ln link1 -bn mq2external -b myhost:8886