Я работаю над проектом, в котором я должен выполнять поведение моего клиента. и asynchronous
. В общем, как наш клиент будет работать, как показано ниже -Эффективный способ синхронного и асинхронного поведения в приложении
Клиент позвонит нашему клиенту с userId
и мы построим URL из этого userId
и сделать HTTP вызов к этому URL, и мы получим JSON строку назад после удара URL. И после того, как мы получим ответ как JSON String, мы отправим эту JSON String обратно нашему клиенту.
Таким образом, в этом случае, как я уже упоминал выше, мне нужно иметь synchronous
и asynchronous
методы, некоторый клиент будет вызывать executeSynchronous
метод, чтобы получить ту же самую функцию, и некоторый клиент будет вызывать наш executeAsynchronous
метод, чтобы получить данные обратно.
Ниже мой интерфейс -
public interface Client {
// for synchronous
public String executeSynchronous(final String userId);
// for asynchronous
public Future<String> executeAsynchronous(final String userId);
}
И тогда я наш SmartClient
который реализует выше Client
интерфейс.
public class SmartClient implements Client {
ExecutorService executor = Executors.newFixedThreadPool(5);
// This is for synchronous call
@Override
public String execute(String userId) {
String response = null;
Future<String> handle = getHandle(userId);
try {
response = handle.get(500, TimeUnit.MILLISECONDS);
} catch (TimeoutException e) {
}
return response;
}
// This is for asynchronous call
@Override
public Future<String> executeAsync(String userId) {
return getHandle(userId);
}
private Future<String> getHandle(String userId) {
Future<String> future = null;
Task task = new Task(userId);
future = executor.submit(task);
return future;
}
}
Ниже мой простой класс, который будет выполнять фактическую задачу -
class Task implements Callable<String> {
private final String userId;
public Task(String userId) {
this.userId = userId;
}
public String call() throws Exception {
String url = createURL(userId);
// make a HTTP call to the URL
RestTemplate restTemplate = new RestTemplate();
String jsonResponse = restTemplate.getForObject(url, String.class);
return jsonResponse;
}
// create a URL
private String createURL(String userId) {
String generateURL = somecode;
return generateURL;
}
}
Это правильный и эффективный способ сделать эту проблему? А как насчет обработки исключений? Нужны ли мне какие-либо другие блоки catch в любом месте? Если есть, то только пример кода высокого уровня поможет мне лучше понять.
Если есть лучший путь, то пожалуйста, дайте мне знать ... Я все еще учусь ..