Implementation of Feign on Vertx. Brings you the best of two worlds together : concise syntax of Feign to write client side API on fast, asynchronous and non-blocking HTTP client of Vertx.
<dependencies>
...
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-vertx</artifactId>
<version>6.0.1</version>
</dependency>
...
</dependencies>
compile group: 'io.github.openfeign', name: 'feign-vertx', version: '6.0.1'
Feign | feign-vertx | Vertx |
---|---|---|
8.x | 1.x+ | 3.5.x - 3.9.x (except 3.5.2) |
9.x | 2.x+ | 3.5.x - 3.9.x (except 3.5.2) |
10.x (except 10.5.0) | 3.x+ | 3.5.x - 3.9.x (except 3.5.2) |
11.x | 4.x+ | 3.5.x - 3.9.x (except 3.5.2) |
11.x | 5.x+ | 4.x |
12.x | unsupported | |
13.x | 6.x+ | 4.x |
Write Feign API as usual, but every method of interface must return
io.vertx.core.Future
.
@Headers({ "Accept: application/json" })
interface IcecreamServiceApi {
@RequestLine("GET /icecream/flavors")
Future<Collection<Flavor>> getAvailableFlavors();
@RequestLine("GET /icecream/mixins")
Future<Collection<Mixin>> getAvailableMixins();
@RequestLine("POST /icecream/orders")
@Headers("Content-Type: application/json")
Future<Bill> makeOrder(IceCreamOrder order);
@RequestLine("GET /icecream/orders/{orderId}")
Future<IceCreamOrder> findOrder(@Param("orderId") int orderId);
@RequestLine("POST /icecream/bills/pay")
@Headers("Content-Type: application/json")
Future<Void> payBill(Bill bill);
}
Build the client :
Vertx vertx = Vertx.vertx(); // get Vertx instance
/* Create instance of your API */
IcecreamServiceApi icecreamApi = VertxFeign
.builder()
.vertx(vertx) // provide vertx instance
.encoder(new JacksonEncoder())
.decoder(new JacksonDecoder())
.target(IcecreamServiceApi.class, "http://www.icecreame.com");
/* Execute requests asynchronously */
Future<Collection<Flavor>> flavorsFuture = icecreamApi.getAvailableFlavors();
Future<Collection<Mixin>> mixinsFuture = icecreamApi.getAvailableMixins();
Library distributed under Apache License Version 2.0.