jax-rs, как я могу реализовать слушатель webhook на REST-сервере?
Я работаю над проектом миграции на Java, который переносит BLOB-файлы из таблицы на сервер хранения Minio. Он работает таким образом, что клиент читает из исходной таблицы и отправляет определенные данные в виде значений POST на сервер REST. Эти значения затем записываются в новую таблицу и возвращается ссылка для загрузки, через которую BLOB(преобразованный в файл) загружается на сервер Minio. Это обработчик POST из класса ресурсов
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public UploadLink postFile(@Context UriInfo uriInfo, Attachment attachment) throws Exception {
Integer id = attachmentService.createNew(attachment);
UriBuilder builder = uriInfo.getAbsolutePathBuilder();
String uploadLinkForFile = minioFileServer.getUploadLinkForFile("test", attachment.getUuid(), attachment.getName());
UploadLink uploadLink = new UploadLink();
uploadLink.setUploadLink(uploadLinkForFile);
uploadLink.setLocation(builder.path(Integer.toString(id)).build());
return uploadLink;
}
При вызове клиентом этот метод возвращает ссылку для загрузки и, используя PUT для ссылки для загрузки, клиент затем загружает этот файл на сервер minio. Теперь я хочу внедрить на сервере прослушиватель webhook, который будет прослушивать события, публикуемые сервером minio при каждой успешной загрузке. Как мне этого добиться? Нужно ли создавать API, который будет действовать в качестве конечной точки в конфигурации Minio? Я был бы очень признателен за любой совет / помощь с этим.
1 ответ
Оказывается, в Minio есть функция webhook, которую можно использовать для отправки уведомлений о событиях на конечную точку. HTTP POST используется для отправки этих уведомлений. Итак, что я сделал для решения этой проблемы - я создал API, который будет принимать POST-запросы, подобные этому.
@POST
@Path("webhook")
@Produces(MediaType.APPLICATION_JSON)
public Response webhookListener(NotificationConfiguration nc) throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
String jsonString = mapper.writeValueAsString(nc);
return Response.ok().entity(jsonString).build();
}
Таким образом, в основном, это API, он получает уведомление Webhook от Minio, который NotificationConfiguration
тип данных, и я просто преобразовал его в JSON
используя Джексона и вернул его как сущность. JSON
Данные содержат информацию о событии.