tomi
tomi

Reputation: 423

http-client excluded from spring-rabbit

I am using http-client with spring-rabbit in Spring Boot 1.5.6.RELEASE and it works fine.

In Spring Boot 2.0.2.RELEASE http-client is excluded from spring-rabbit pom.xml.

I don't want to manually add http-client and keep track of versions between boot versions.

spring-boot-starter-amqp-1.5.6.RELEASE:

<dependency>
    <groupId>org.springframework.amqp</groupId>
    <artifactId>spring-rabbit</artifactId>
</dependency>

spring-boot-starter-amqp-2.0.2.RELEASE:

<dependency>
  <groupId>org.springframework.amqp</groupId>
  <artifactId>spring-rabbit</artifactId>
  <version>2.0.3.RELEASE</version>
  <scope>compile</scope>
  <exclusions>
    <exclusion>
      <artifactId>http-client</artifactId>
      <groupId>com.rabbitmq</groupId>
    </exclusion>
  </exclusions>
</dependency>

Why is http-client excluded and can I include it without defining version? Version is 2.0.1.RELEASE but it is not extracted as a property in spring-rabbit.

Upvotes: 3

Views: 1470

Answers (1)

Robin Hermans
Robin Hermans

Reputation: 1599

According to the Spring AMQP documentation the dependency com.rabbitmq:http-client is now optional. Apparently this was changed to allow multiple client implementations.

When the management plugin is enabled, the RabbitMQ server exposes a REST API to monitor and configure the broker. A Java Binding for the API is now provided. The com.rabbitmq.http.client.Client is a standard, immediate and, therefore, blocking API. It is based on the Spring Web module and its RestTemplate implementation. On the other hand, the com.rabbitmq.http.client.ReactorNettyClient is a reactive, non-blocking implementation based on the Reactor Netty project.

The hop dependency (com.rabbitmq:http-client) is now also optional.

  • Client: an immediate and blocking client
  • ReactorNettyClient: a reactive and non-blocking client

See the documentation

If you want to use the standard http-client you can add the dependency. Please that that you don't need to keep track of the correct version yourself. The version is automatically chosen based on your spring-boot-starter-amqp version.

// Maven
<dependency>
  <groupId>com.rabbitmq</groupId>
  <artifactId>http-client</artifactId>
</dependency>

// Gradle
compile("com.rabbitmq:http-client")

You can also refer to the related GitHub project on how to enable a specific client: rabbitmq/hop

Upvotes: 1

Related Questions