У меня есть тривиальное "Hello World!"Служба REST, которая использует микропрофиль для отказоустойчивости, в частности, аннотацию @Fallback
// HelloApplication.java
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
@ApplicationPath("/api")
public class HelloApplication extends Application {
}
// HelloRest.java
import javax.enterprise.context.ApplicationScoped;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@ApplicationScoped
@Path("/")
public class HelloRest {
final HelloService client = new HelloService();
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/hello")
public String sayHello() {
return client.lookupMessage();
}
}
// HelloService.java
import org.eclipse.microprofile.faulttolerance.Fallback;
import javax.enterprise.context.ApplicationScoped;
import java.util.Random;
@ApplicationScoped
public class HelloService {
@Fallback(fallbackMethod = "fallbackMessage")
public String lookupMessage() {
int rand = new Random().nextInt() % 10;
if (rand <= 3) {
return "Hello World!";
}
throw new RuntimeException("message lookup failed");
}
public String fallbackMessage() {
return "fallback message";
}
}
Я строю его с помощью gradle и запускаю его с помощью полой банки с колючим хвостом.
$ java -jar microprofile-hollow-thorntail.jar my-trivial-hello-service.war
Я бы ожидал, что
curl http://localhost:8080/api/hello
вернет "Hello World!"для 30% вызовов и «резервное сообщение» для оставшихся 70%.Вместо этого я получаю RuntimeException
в 70% случаев.
Как мне запустить и / или настроить Thorntail, чтобы активировать фракцию микропрофиля для моей тривиальной WAR?