[[AMQP-AMQP]]
AMQP
~~~~

The *amqp:* component supports the http://www.amqp.org/[AMQP 1.0
protocol] using the JMS Client API of the http://qpid.apache.org/[Qpid]
project. In case you want to use AMQP 0.9 (in particular RabbitMQ) you
might also be interested in the link:rabbitmq.html[Camel RabbitMQ]
component. Please keep in mind that prior to the Camel 2.17.0 AMQP
component supported AMQP 0.9 and above, however since Camel 2.17.0 it
supports only AMQP 1.0.

Maven users will need to add the following dependency to their `pom.xml`
for this component:

[source,xml]
------------------------------------------------------------------------------------------------
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-amqp</artifactId>
    <version>${camel.version}</version> <!-- use the same version as your Camel core version -->
</dependency>
------------------------------------------------------------------------------------------------

[[AMQP-URIformat]]
URI format
^^^^^^^^^^

[source,java]
---------------------------------------------
amqp:[queue:|topic:]destinationName[?options]
---------------------------------------------

[[AMQP-AMQPOptions]]
AMQP Options
^^^^^^^^^^^^

You can specify all of the various configuration options of the
link:../../../../camel-jms/src/main/docs/readme.html[JMS] component after the destination name.

[[AMQP-Usage]]
Usage
^^^^^

As AMQP component is inherited from JMS component, the usage of the
former is almost identical to the latter:

*Using AMQP component*

[source,java]
------------------------------------
// Consuming from AMQP queue
from("amqp:queue:incoming").
  to(...);
 
// Sending message to the AMQP topic
from(...).
  to("amqp:topic:notify");
------------------------------------

[[AMQP-ConfiguringAMQPcomponent]]
Configuring AMQP component
^^^^^^^^^^^^^^^^^^^^^^^^^^

Starting from the Camel 2.16.1 you can also use the
`AMQPComponent#amqp10Component(String connectionURI)` factory method to
return the AMQP 1.0 component with the pre-configured topic prefix: 

*Creating AMQP 1.0 component*

[source,java]
-----------------------------------------------------------------------------------------
 AMQPComponent amqp = AMQPComponent.amqp10Component("amqp://guest:guest@localhost:5672");
-----------------------------------------------------------------------------------------

Keep in mind that starting from the
Camel 2.17 the `AMQPComponent#amqp10Component(String connectionURI)` factory
method has been deprecated on the behalf of the
`AMQPComponent#amqpComponent(String connectionURI)`: 

*Creating AMQP 1.0 component*

[source,java]
--------------------------------------------------------------------------------------------------------
AMQPComponent amqp = AMQPComponent.amqpComponent("amqp://localhost:5672");
 
AMQPComponent authorizedAmqp = AMQPComponent.amqpComponent("amqp://localhost:5672", "user", "password");
--------------------------------------------------------------------------------------------------------

Starting from Camel 2.17, in order to automatically configure the AMQP
component, you can also add an instance
of `org.apache.camel.component.amqp.AMQPConnectionDetails` to the
registry. For example for Spring Boot you just have to define bean:

*AMQP connection details auto-configuration*

[source,java]
-------------------------------------------------------------------------------------
@Bean
AMQPConnectionDetails amqpConnection() {
  return new AMQPConnectionDetails("amqp://lcoalhost:5672"); 
}
 
@Bean
AMQPConnectionDetails securedAmqpConnection() {
  return new AMQPConnectionDetails("amqp://lcoalhost:5672", "username", "password"); 
}
-------------------------------------------------------------------------------------

 

You can also rely on the link:properties.html[Camel properties] to read
the AMQP connection details. Factory
method `AMQPConnectionDetails.discoverAMQP()` attempts to read Camel
properties in a Kubernetes-like convention, just as demonstrated on the
snippet below:

 

*AMQP connection details auto-configuration*

[source,java]
-----------------------------------------------
export AMQP_SERVICE_HOST = "mybroker.com"
export AMQP_SERVICE_PORT = "6666"
export AMQP_SERVICE_USERNAME = "username"
export AMQP_SERVICE_PASSWORD = "password"
 
...
 
@Bean
AMQPConnectionDetails amqpConnection() {
  return AMQPConnectionDetails.discoverAMQP(); 
}
-----------------------------------------------

[[AMQP-Usingtopics]]
Using topics
^^^^^^^^^^^^

To have using topics working with `camel-amqp` you need to configure the
component to use `topic://` as topic prefix, as shown below:

[source,java]
-------------------------------------------------------------------------------------------------------------------------------
 <bean id="amqp" class="org.apache.camel.component.amqp.AmqpComponent">
        <property name="connectionFactory">
          <bean class="org.apache.qpid.amqp_1_0.jms.impl.ConnectionFactoryImpl" factory-method="createFromURL">
            <constructor-arg index="0" type="java.lang.String" value="amqp://localhost:5672" />
            <property name="topicPrefix" value="topic://" />  <!-- only necessary when connecting to ActiveMQ over AMQP 1.0 -->
          </bean>
        </property>
 </bean>
-------------------------------------------------------------------------------------------------------------------------------

Keep in mind that both  `AMQPComponent#amqpComponent()` methods and
`AMQPConnectionDetails` pre-configure the component with the topic
prefix, so you don't have to configure it explicitly.

[[AMQP-SeeAlso]]
See Also
^^^^^^^^

* link:configuring-camel.html[Configuring Camel]
* link:component.html[Component]
* link:endpoint.html[Endpoint]
* link:getting-started.html[Getting Started]

