nstream.adapter.http.HttpPublishingAgent Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of nstream-adapter-http Show documentation
Show all versions of nstream-adapter-http Show documentation
Templates for consuming from and producing to HTTP endpoints with Swim
The newest version!
// Copyright 2015-2024 Nstream, inc.
//
// Licensed under the Redis Source Available License 2.0 (RSALv2) Agreement;
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// https://redis.com/legal/rsalv2-agreement/
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package nstream.adapter.http;
import java.io.IOException;
import java.io.InputStream;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import nstream.adapter.common.AdapterSettings;
import nstream.adapter.common.egress.PublisherAgent;
import nstream.adapter.common.schedule.DeferrableException;
public abstract class HttpPublishingAgent
extends PublisherAgent {
public HttpPublishingAgent() {
}
protected abstract HttpClient httpClient();
protected boolean responseIsHealthy(HttpResponse> response) {
return response.statusCode() / 100 == 2;
}
// FIXME: this one is the only PublisherAgent#publish that is blocking, we
// should rethink for consistency
@Override
protected void publish(HttpRequest publishable) throws DeferrableException {
final HttpResponse result;
try {
result = httpClient().send(publishable, HttpResponse.BodyHandlers.ofInputStream());
if (responseIsHealthy(result)) {
info(nodeUri() + ": successfully published");
} else {
throw new DeferrableException(nodeUri() + ": unhealthy response. Headers: " + result.headers());
}
} catch (IOException | InterruptedException | RuntimeException e) {
throw new DeferrableException(nodeUri() + ": publish error", e);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy