
pl.allegro.tech.hermes.client.jersey.JerseyHermesSender Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of hermes-client Show documentation
Show all versions of hermes-client Show documentation
Fast and reliable message broker built on top of Kafka.
The newest version!
package pl.allegro.tech.hermes.client.jersey;
import static pl.allegro.tech.hermes.client.HermesResponseBuilder.hermesResponse;
import jakarta.ws.rs.client.Client;
import jakarta.ws.rs.client.Entity;
import jakarta.ws.rs.client.Invocation;
import jakarta.ws.rs.client.InvocationCallback;
import jakarta.ws.rs.core.Response;
import java.net.URI;
import java.util.concurrent.CompletableFuture;
import pl.allegro.tech.hermes.client.HermesMessage;
import pl.allegro.tech.hermes.client.HermesResponse;
import pl.allegro.tech.hermes.client.HermesSender;
public class JerseyHermesSender implements HermesSender {
private final Client client;
public JerseyHermesSender(Client client) {
this.client = client;
}
@Override
public CompletableFuture send(URI uri, HermesMessage message) {
CompletableFuture future = new CompletableFuture<>();
Invocation.Builder builder = client.target(uri).request();
message.consumeHeaders(builder::header);
builder
.async()
.post(
Entity.entity(message.getBody(), message.getContentType()),
new InvocationCallback() {
@Override
public void completed(Response response) {
future.complete(fromJerseyResponse(message, response));
}
@Override
public void failed(Throwable exception) {
future.completeExceptionally(exception);
}
});
return future;
}
private HermesResponse fromJerseyResponse(HermesMessage message, Response response) {
return hermesResponse(message)
.withHttpStatus(response.getStatus())
.withBody(response.readEntity(String.class))
.withHeaderSupplier(response::getHeaderString)
.build();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy