This commit is contained in:
Redkale
2020-06-04 14:06:35 +08:00
parent b6d5fc02dc
commit e365dae9e4
5 changed files with 132 additions and 69 deletions

View File

@@ -7,7 +7,7 @@ package org.redkale.mq;
import java.util.*; import java.util.*;
import java.util.concurrent.*; import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.*;
import java.util.logging.Logger; import java.util.logging.Logger;
import javax.annotation.Resource; import javax.annotation.Resource;
import org.redkale.boot.*; import org.redkale.boot.*;
@@ -54,8 +54,8 @@ public abstract class MessageAgent {
public void init(AnyValue config) { public void init(AnyValue config) {
} }
public final CompletableFuture<MessageRecord> createSncpRespFuture(MessageRecord message) { public final CompletableFuture<MessageRecord> createSncpRespFuture(AtomicLong counter, MessageRecord message) {
return this.sncpRespProcessor.createFuture(message.getSeqid()); return this.sncpRespProcessor.createFuture(message.getSeqid(), counter);
} }
public final synchronized void startSncpRespConsumer() { public final synchronized void startSncpRespConsumer() {

View File

@@ -6,6 +6,7 @@
package org.redkale.mq; package org.redkale.mq;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
import java.util.concurrent.atomic.AtomicLong;
/** /**
* MQ管理器 * MQ管理器
@@ -23,10 +24,13 @@ public class MessageRespFutureNode {
protected final long createtime; protected final long createtime;
protected final AtomicLong counter;
protected final CompletableFuture<MessageRecord> future; protected final CompletableFuture<MessageRecord> future;
public MessageRespFutureNode(long seqid, CompletableFuture<MessageRecord> future) { public MessageRespFutureNode(long seqid, AtomicLong counter, CompletableFuture<MessageRecord> future) {
this.seqid = seqid; this.seqid = seqid;
this.counter = counter;
this.future = future; this.future = future;
this.createtime = System.currentTimeMillis(); this.createtime = System.currentTimeMillis();
} }
@@ -39,6 +43,10 @@ public class MessageRespFutureNode {
return createtime; return createtime;
} }
public AtomicLong getCounter() {
return counter;
}
public CompletableFuture<MessageRecord> getFuture() { public CompletableFuture<MessageRecord> getFuture() {
return future; return future;
} }

View File

@@ -6,6 +6,7 @@
package org.redkale.mq; package org.redkale.mq;
import java.util.concurrent.*; import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicLong;
import java.util.logging.*; import java.util.logging.*;
/** /**
@@ -38,12 +39,13 @@ public class SncpRespProcessor implements MessageProcessor {
logger.log(Level.WARNING, SncpRespProcessor.class.getSimpleName() + " process " + message + " error"); logger.log(Level.WARNING, SncpRespProcessor.class.getSimpleName() + " process " + message + " error");
return; return;
} }
if (node.getCounter() != null) node.getCounter().decrementAndGet();
node.future.complete(message); node.future.complete(message);
} }
public CompletableFuture<MessageRecord> createFuture(long seqid) { public CompletableFuture<MessageRecord> createFuture(long seqid, AtomicLong counter) {
CompletableFuture<MessageRecord> future = new CompletableFuture<>(); CompletableFuture<MessageRecord> future = new CompletableFuture<>();
MessageRespFutureNode node = new MessageRespFutureNode(seqid, future); MessageRespFutureNode node = new MessageRespFutureNode(seqid, counter, future);
respNodes.put(seqid, node); respNodes.put(seqid, node);
return future; return future;
} }

View File

@@ -13,6 +13,7 @@ import java.util.concurrent.atomic.AtomicLong;
import java.util.function.*; import java.util.function.*;
import java.util.logging.*; import java.util.logging.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import org.redkale.convert.Convert;
import org.redkale.convert.json.*; import org.redkale.convert.json.*;
import org.redkale.net.sncp.*; import org.redkale.net.sncp.*;
import org.redkale.service.*; import org.redkale.service.*;
@@ -481,11 +482,21 @@ public class CacheMemorySource<V extends Object> extends AbstractService impleme
set(CacheEntryType.OBJECT, key, value); set(CacheEntryType.OBJECT, key, value);
} }
@Override
public <T> void set(String key, Convert convert, T value) {
set(CacheEntryType.OBJECT, key, value);
}
@Override @Override
public <T> void set(String key, Type type, T value) { public <T> void set(String key, Type type, T value) {
set(CacheEntryType.OBJECT, key, value); set(CacheEntryType.OBJECT, key, value);
} }
@Override
public <T> void set(String key, Convert convert, Type type, T value) {
set(CacheEntryType.OBJECT, key, value);
}
@Override @Override
public void setString(String key, String value) { public void setString(String key, String value) {
@@ -499,18 +510,26 @@ public class CacheMemorySource<V extends Object> extends AbstractService impleme
} }
@Override @Override
public CompletableFuture<Void> setAsync(String key, V value) { public CompletableFuture<Void> setAsync(String key, V value) {
return CompletableFuture.runAsync(() -> set(key, value), getExecutor()).whenComplete(futureCompleteConsumer); return CompletableFuture.runAsync(() -> set(key, value), getExecutor()).whenComplete(futureCompleteConsumer);
} }
@Override
public <T> CompletableFuture<Void> setAsync(String key, Convert convert, T value) {
return CompletableFuture.runAsync(() -> set(key, convert, value), getExecutor()).whenComplete(futureCompleteConsumer);
}
@Override @Override
public <T> CompletableFuture<Void> setAsync(String key, Type type, T value) { public <T> CompletableFuture<Void> setAsync(String key, Type type, T value) {
return CompletableFuture.runAsync(() -> set(key, type, value), getExecutor()).whenComplete(futureCompleteConsumer); return CompletableFuture.runAsync(() -> set(key, type, value), getExecutor()).whenComplete(futureCompleteConsumer);
} }
@Override @Override
public <T> CompletableFuture<Void> setAsync(String key, Convert convert, Type type, T value) {
return CompletableFuture.runAsync(() -> set(key, convert, type, value), getExecutor()).whenComplete(futureCompleteConsumer);
}
@Override
public CompletableFuture<Void> setStringAsync(String key, String value) { public CompletableFuture<Void> setStringAsync(String key, String value) {
return CompletableFuture.runAsync(() -> setString(key, value), getExecutor()).whenComplete(futureCompleteConsumer); return CompletableFuture.runAsync(() -> setString(key, value), getExecutor()).whenComplete(futureCompleteConsumer);
} }
@@ -540,13 +559,22 @@ public class CacheMemorySource<V extends Object> extends AbstractService impleme
set(CacheEntryType.OBJECT, expireSeconds, key, value); set(CacheEntryType.OBJECT, expireSeconds, key, value);
} }
@Override
public <T> void set(final int expireSeconds, String key, Convert convert, T value) {
set(CacheEntryType.OBJECT, expireSeconds, key, value);
}
@Override @Override
public <T> void set(final int expireSeconds, String key, Type type, T value) { public <T> void set(final int expireSeconds, String key, Type type, T value) {
set(CacheEntryType.OBJECT, expireSeconds, key, value); set(CacheEntryType.OBJECT, expireSeconds, key, value);
} }
@Override @Override
public <T> void set(final int expireSeconds, String key, Convert convert, Type type, T value) {
set(CacheEntryType.OBJECT, expireSeconds, key, value);
}
@Override
public void setString(int expireSeconds, String key, String value) { public void setString(int expireSeconds, String key, String value) {
set(CacheEntryType.STRING, expireSeconds, key, value); set(CacheEntryType.STRING, expireSeconds, key, value);
} }
@@ -563,13 +591,22 @@ public class CacheMemorySource<V extends Object> extends AbstractService impleme
return CompletableFuture.runAsync(() -> set(expireSeconds, key, value), getExecutor()).whenComplete(futureCompleteConsumer); return CompletableFuture.runAsync(() -> set(expireSeconds, key, value), getExecutor()).whenComplete(futureCompleteConsumer);
} }
@Override
public <T> CompletableFuture<Void> setAsync(int expireSeconds, String key, Convert convert, T value) {
return CompletableFuture.runAsync(() -> set(expireSeconds, key, convert, value), getExecutor()).whenComplete(futureCompleteConsumer);
}
@Override @Override
public <T> CompletableFuture<Void> setAsync(int expireSeconds, String key, Type type, T value) { public <T> CompletableFuture<Void> setAsync(int expireSeconds, String key, Type type, T value) {
return CompletableFuture.runAsync(() -> set(expireSeconds, key, type, value), getExecutor()).whenComplete(futureCompleteConsumer); return CompletableFuture.runAsync(() -> set(expireSeconds, key, type, value), getExecutor()).whenComplete(futureCompleteConsumer);
} }
@Override @Override
public <T> CompletableFuture<Void> setAsync(int expireSeconds, String key, Convert convert, Type type, T value) {
return CompletableFuture.runAsync(() -> set(expireSeconds, key, convert, type, value), getExecutor()).whenComplete(futureCompleteConsumer);
}
@Override
public CompletableFuture<Void> setStringAsync(int expireSeconds, String key, String value) { public CompletableFuture<Void> setStringAsync(int expireSeconds, String key, String value) {
return CompletableFuture.runAsync(() -> setString(expireSeconds, key, value), getExecutor()).whenComplete(futureCompleteConsumer); return CompletableFuture.runAsync(() -> setString(expireSeconds, key, value), getExecutor()).whenComplete(futureCompleteConsumer);
} }

View File

@@ -9,7 +9,7 @@ import java.lang.reflect.Type;
import java.util.*; import java.util.*;
import java.util.concurrent.*; import java.util.concurrent.*;
import java.util.function.Function; import java.util.function.Function;
import org.redkale.convert.ConvertColumn; import org.redkale.convert.*;
import org.redkale.convert.json.JsonFactory; import org.redkale.convert.json.JsonFactory;
import org.redkale.util.ConstructorParameters; import org.redkale.util.ConstructorParameters;
@@ -70,12 +70,20 @@ public interface CacheSource<V extends Object> {
public void set(final String key, final V value); public void set(final String key, final V value);
public <T> void set(final String key, final Convert convert, final T value);
public <T> void set(final String key, final Type type, final T value); public <T> void set(final String key, final Type type, final T value);
public <T> void set(final String key, final Convert convert, final Type type, final T value);
public void set(final int expireSeconds, final String key, final V value); public void set(final int expireSeconds, final String key, final V value);
public <T> void set(final int expireSeconds, final String key, final Convert convert, final T value);
public <T> void set(final int expireSeconds, final String key, final Type type, final T value); public <T> void set(final int expireSeconds, final String key, final Type type, final T value);
public <T> void set(final int expireSeconds, final String key, final Convert convert, final Type type, final T value);
public void setExpireSeconds(final String key, final int expireSeconds); public void setExpireSeconds(final String key, final int expireSeconds);
public void remove(final String key); public void remove(final String key);
@@ -219,12 +227,20 @@ public interface CacheSource<V extends Object> {
public CompletableFuture<Void> setAsync(final String key, final V value); public CompletableFuture<Void> setAsync(final String key, final V value);
public <T> CompletableFuture<Void> setAsync(final String key, final Convert convert, final T value);
public <T> CompletableFuture<Void> setAsync(final String key, final Type type, final T value); public <T> CompletableFuture<Void> setAsync(final String key, final Type type, final T value);
public <T> CompletableFuture<Void> setAsync(final String key, final Convert convert, final Type type, final T value);
public CompletableFuture<Void> setAsync(final int expireSeconds, final String key, final V value); public CompletableFuture<Void> setAsync(final int expireSeconds, final String key, final V value);
public <T> CompletableFuture<Void> setAsync(final int expireSeconds, final String key, final Convert convert, final T value);
public <T> CompletableFuture<Void> setAsync(final int expireSeconds, final String key, final Type type, final T value); public <T> CompletableFuture<Void> setAsync(final int expireSeconds, final String key, final Type type, final T value);
public <T> CompletableFuture<Void> setAsync(final int expireSeconds, final String key, final Convert convert, final Type type, final T value);
public CompletableFuture<Void> setExpireSecondsAsync(final String key, final int expireSeconds); public CompletableFuture<Void> setExpireSecondsAsync(final String key, final int expireSeconds);
public CompletableFuture<Void> removeAsync(final String key); public CompletableFuture<Void> removeAsync(final String key);