Я работаю над приложением JAX-RS, используя Джерси. Приложение принимает входящие запросы и передает их на rabbitmq. При запуске приложения я использую HK2, чтобы внедрить мой Connection
, завернутый в ExchangePublisher
, как синглтон, в мой ресурс, используя реализацию Factory
. Однако, если бы я потерял соединение (например, перезапускается rabbitmq), в настоящее время нет простого способа перезапустить его.
Как я могу правильно внедрить свой класс ExchangePublisher
таким образом, чтобы я мог проверить для каждого запроса, если соединение все еще открыто?
public class ExchangeResource {
@Inject
ExchangePublisher publisher;
@POST
@Path("nexo")
public Response nexo(String message) {
publisher.publish(message);
return Response.ok().build();
}
}
public class ExchangePublisherBinder extends AbstractBinder {
@Override
protected void configure() {
bindFactory(ExchangePublisherFactory.class).to(ExchangePublisher.class).in(Immediate.class);
}
}
public class ExchangePublisherFactory implements Factory<ExchangePublisher> {
@Override
public ExchangePublisher provide() {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("172.17.126.143");
factory.setUsername("username");
factory.setPassword("password");
Connection connection = null;
try {
connection = factory.newConnection();
} catch (IOException | TimeoutException e) {
// some logging here
}
return new ExchangePublisher(connection);
}
@Override
public void dispose(ExchangePublisher publisher) {
try {
publisher.closeConnection();
} catch (IOException e) {
// some logging here
}
}
}