RabbitMQ Inbound¶
Introduction¶
AMQP is a wire-level messaging protocol that describes the format of the data that is sent across the network. If a system or application can read and write AMQP, it can exchange messages with any other system or application that understands AMQP regardless of the implementation language.
Syntax¶
<inboundEndpoint xmlns="http://ws.apache.org/ns/synapse" name="RabbitMQConsumer" sequence="amqpSeq" onError="amqpErrorSeq" protocol="rabbitmq" suspend="false">
<parameters>
<parameter name="sequential">true</parameter>
<parameter name="coordination">true</parameter>
<parameter name="rabbitmq.connection.factory">AMQPConnectionFactory</parameter>
<parameter name="rabbitmq.server.host.name">localhost</parameter>
<parameter name="rabbitmq.server.port">5672</parameter>
<parameter name="rabbitmq.server.user.name">guest</parameter>
<parameter name="rabbitmq.server.password">guest</parameter>
<parameter name="rabbitmq.queue.name">queue</parameter>
<parameter name="rabbitmq.exchange.name">exchange</parameter>
<parameter name="rabbitmq.connection.ssl.enabled">false</parameter>
</parameters>
</inboundEndpoint>
Properties¶
Listed below are the properties used for creating a RabbitMQ inbound endpiont.
Required Properties¶
The following properties are required when creating a RabbitMQ inbound endpiont.
Property | Description |
---|---|
sequential | The behavior when executing the given sequence. |
rabbitmq.connection.factory | Name of the connection factory. |
rabbitmq.server.host.name | Host name of the server. |
rabbitmq.server.port | The port number of the server. |
rabbitmq.server.user.name | The user name to connect to the server. |
rabbitmq.server.password | The password to connect to the server. |
rabbitmq.queue.name | The queue name to send or consume messages. |
coordination | This parameter is only applicable in a clustered environment. In a cluster environment an inbound endpoint will only be executed in worker nodes. If this parameter is set to true in a clustered environment, the inbound will only be executed in a single worker node. Once the running worker node is down, the inbound will start on another available worker node in the cluster. By default, this setting is true .
|
sequential | The behaviour when executing the given sequence. |
sequential | The behavior when executing the given sequence. When set as true , mediation will happen within the same thread. When set as false , the mediation engine will use the inbound thread pool. The default thread pool values can be found in the MI_HOME/conf/deployment.toml file, under the `[mediation]` section. The default setting is true .
|
Suspend |
If the inbound listener should pause when accepting incoming requests, set this to true . If the inbound listener should not pause when accepting incoming requests, set this to false .
|
Optional Properties¶
The following optional properties can be configured when creating an RabbitMQ inbound endpiont.
Property Name | Description |
---|---|
rabbitmq.server.virtual.host | The virtual host name of the server (if available). |
rabbitmq.connection.ssl.enabled | Whether to use TCP connection or SSL connection. |
rabbitmq.connection.ssl.keystore.location | The keystore location. |
rabbitmq.connection.ssl.keystore.type | The keystore type. |
rabbitmq.connection.ssl.keystore.password | The keystore password. |
rabbitmq.connection.ssl.truststore.location | The truststore location. |
rabbitmq.connection.ssl.truststore.type | The truststore type. |
rabbitmq.connection.ssl.truststore.password | The truststore password. |
rabbitmq.connection.ssl.version | The SSL version. |
rabbitmq.queue.durable | Whether the queue should remain declared even if the broker restarts. |
rabbitmq.queue.exclusive | Whether the queue should be exclusive or should be consumable by other connections. |
rabbitmq.queue.auto.delete | Whether to keep the queue even if it is not being consumed anymore. |
rabbitmq.queue.auto.ack | Whether to send back an acknowledgment. |
rabbitmq.exchange.name | The name of the RabbitMQ exchange to which the queue is bound. |
rabbitmq.queue.routing.key | The routing key of the queue. |
rabbitmq.queue.delivery.mode | The delivery mode of the queue (whether or not the queue is persistent). |
rabbitmq.exchange.type | The type of the exchange. |
rabbitmq.exchange.durable | Whether the exchange should remain declared even if the broker restarts. |
rabbitmq.exchange.auto.delete | Whether to keep the queue even if it is not used anymore. |
rabbitmq.factory.heartbeat |
The period of time after which the connection should be considered dead. |
rabbitmq.message.content.type | The content type of the message. |
Note
The property rabbitmq.exchange.name becomes mandatory if you are trying to connect to a new queue, so that it can be bound to an exchange for messages to flow.
Connection Recovery Properties¶
In case of a network failure or broker shutdown, the Micro Integrator can try to recreate the connection.
If you want to enable connection recovery, you should configure the following parameters in the inbound endpoint:
<parameter name="rabbitmq.connection.retry.interval" locked="false">10000</parameter>
<parameter name="rabbitmq.connection.retry.count" locked="false">5</parameter>
If the parameters are configured with sample values as given above, the server makes 5 retry attempts with a time interval of 10000 miliseconds between each retry attempt to reconnect when the connection is lost. If reconnecting fails after 5 retry attempts, the Micro Integrator terminates the connection.
In addition to the above parameters, if you want to set the interval between retry attempts with which the RabbitMQ client should try reconnecting to the Micro Integrator, you can configure the following parameter:
<parameter name="rabbitmq.server.retry.interval" locked="false">10000</parameter>
Setting the value of rabbitmq.server.retry.interval
to be less than the value of rabbitmq.connection.retry.interval
helps synchronize the reconnection of the Micro Integrator and the RabbitMQ client.