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 Данные содержат информацию о событии.

Другие вопросы по тегам