Tôi đang sử dụng redis với Akka nên tôi không cần chặn cuộc gọi. Rau diếp có cuộc gọi không đồng bộ trong tương lai được tích hợp vào nó. Nhưng Jedis là khách hàng được đề nghị bởi Redis. Ai đó có thể cho tôi biết nếu tôi đang sử dụng cả hai cách đúng đắn. Nếu vậy thì cái nào tốt hơn.Jedis và Rau diếp khả năng không đồng bộ
JEDIS Tôi đang sử dụng hồ bơi kết nối Jedis tĩnh để nhận con và sử dụng gọi lại trong tương lai của Akka để xử lý kết quả. Mối quan tâm của tôi ở đây là khi tôi sử dụng một luồng khác (có thể gọi) để nhận được kết quả mà luồng cuối cùng sẽ chặn cho kết quả. Trong khi rau diếp có thể có một số cách hiệu quả hơn để làm điều này.
private final class OnSuccessExtension extends OnSuccess<String> {
private final ActorRef senderActorRef;
private final Object message;
@Override
public void onSuccess(String valueRedis) throws Throwable {
log.info(getContext().dispatcher().toString());
senderActorRef.tell((String) message, ActorRef.noSender());
}
public OnSuccessExtension(ActorRef senderActorRef,Object message) {
this.senderActorRef = senderActorRef;
this.message=message;
}
}
ActorRef senderActorRef = getSender(); //never close over a future
if (message instanceof String) {
Future<String> f =akka.dispatch.Futures.future(new Callable<String>() {
public String call() {
String result;
try(Jedis jedis=JedisWrapper.redisPool.getResource()) {
result = jedis.get("name");
}
return result;
}
}, ex);
f.onSuccess(new OnSuccessExtension(senderActorRef,message), ex);
}
rau diếp
ExecutorService executorService = Executors.newFixedThreadPool(10);
public void onReceive(Object message) throws Exception {
ActorRef senderActorRef = getSender(); //never close over a future
if (message instanceof String) {
final RedisFuture<String> future = lettuce.connection.get("name");
future.addListener(new Runnable() {
final ActorRef sender = senderActorRef;
final String msg =(String) message;
@Override
public void run() {
try {
String value = future.get();
log.info(value);
sender.tell(message, ActorRef.noSender());
} catch (Exception e) {
}
}
}, executorService);
Nếu rau diếp là một lựa chọn tốt hơn cho các cuộc gọi async. Sau đó, loại người thực hiện tôi nên đi với trong môi trường sản xuất. Nếu có thể, tôi có thể sử dụng một điều phối viên Akka như một bối cảnh thực hiện cho cuộc gọi tương lai Letture.