优化mq
This commit is contained in:
@@ -19,6 +19,7 @@ public enum ConvertType {
|
|||||||
BSON(2),
|
BSON(2),
|
||||||
PROTOBUF(64),
|
PROTOBUF(64),
|
||||||
PROTOBUF_JSON(64 + 1),
|
PROTOBUF_JSON(64 + 1),
|
||||||
|
PROTOBUF_BSON(64 + 2),
|
||||||
DIY(256),
|
DIY(256),
|
||||||
ALL(1023);
|
ALL(1023);
|
||||||
|
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ public class HttpMessageClient extends MessageClient {
|
|||||||
protected HttpMessageClient(MessageAgent messageAgent) {
|
protected HttpMessageClient(MessageAgent messageAgent) {
|
||||||
super(messageAgent);
|
super(messageAgent);
|
||||||
if (messageAgent != null) { // //RPC方式下无messageAgent
|
if (messageAgent != null) { // //RPC方式下无messageAgent
|
||||||
this.respTopic = messageAgent.generateApplicationHttpRespTopic();
|
this.appRespTopic = messageAgent.generateAppHttpRespTopic();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -377,11 +377,6 @@ public abstract class MessageAgent implements Resourcable {
|
|||||||
return "sncp.req.module." + resourceType.getSimpleName().replaceAll("Service.*$", "").toLowerCase() + (resourceName.isEmpty() ? "" : ("-" + resourceName));
|
return "sncp.req.module." + resourceType.getSimpleName().replaceAll("Service.*$", "").toLowerCase() + (resourceName.isEmpty() ? "" : ("-" + resourceName));
|
||||||
}
|
}
|
||||||
|
|
||||||
//格式: consumer-sncp.req.module.user 不提供外部使用
|
|
||||||
protected final String generateSncpConsumerid(String topic, Service service) {
|
|
||||||
return "consumer-" + topic;
|
|
||||||
}
|
|
||||||
|
|
||||||
//格式: http.req.module.user
|
//格式: http.req.module.user
|
||||||
public static String generateHttpReqTopic(String module) {
|
public static String generateHttpReqTopic(String module) {
|
||||||
return "http.req.module." + module.toLowerCase();
|
return "http.req.module." + module.toLowerCase();
|
||||||
@@ -393,12 +388,12 @@ public abstract class MessageAgent implements Resourcable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//格式: sncp.resp.app.node10
|
//格式: sncp.resp.app.node10
|
||||||
protected String generateApplicationSncpRespTopic() {
|
protected String generateAppSncpRespTopic() {
|
||||||
return "sncp.resp.app." + (Utility.isEmpty(nodeName) ? "node" : nodeName) + "-" + nodeid;
|
return "sncp.resp.app." + (Utility.isEmpty(nodeName) ? "node" : nodeName) + "-" + nodeid;
|
||||||
}
|
}
|
||||||
|
|
||||||
//格式: http.resp.app.node10
|
//格式: http.resp.app.node10
|
||||||
protected String generateApplicationHttpRespTopic() {
|
protected String generateAppHttpRespTopic() {
|
||||||
return "http.resp.app." + (Utility.isEmpty(nodeName) ? "node" : nodeName) + "-" + nodeid;
|
return "http.resp.app." + (Utility.isEmpty(nodeName) ? "node" : nodeName) + "-" + nodeid;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -413,6 +408,11 @@ public abstract class MessageAgent implements Resourcable {
|
|||||||
return new String[]{"http.req.module." + module + (resname.isEmpty() ? "" : ("-" + resname))};
|
return new String[]{"http.req.module." + module + (resname.isEmpty() ? "" : ("-" + resname))};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//格式: consumer-sncp.req.module.user 不提供外部使用
|
||||||
|
protected final String generateSncpConsumerid(String topic, Service service) {
|
||||||
|
return "consumer-" + topic;
|
||||||
|
}
|
||||||
|
|
||||||
//格式: consumer-http.req.module.user
|
//格式: consumer-http.req.module.user
|
||||||
protected String generateHttpConsumerid(String[] topics, Service service) {
|
protected String generateHttpConsumerid(String[] topics, Service service) {
|
||||||
String resname = Sncp.getResourceName(service);
|
String resname = Sncp.getResourceName(service);
|
||||||
|
|||||||
@@ -37,9 +37,9 @@ public abstract class MessageClient {
|
|||||||
|
|
||||||
protected MessageClientConsumer respConsumer;
|
protected MessageClientConsumer respConsumer;
|
||||||
|
|
||||||
protected String respTopic;
|
protected String appRespTopic;
|
||||||
|
|
||||||
protected String respConsumerid;
|
protected String appRespConsumerid;
|
||||||
|
|
||||||
private final String clazzName;
|
private final String clazzName;
|
||||||
|
|
||||||
@@ -67,8 +67,8 @@ public abstract class MessageClient {
|
|||||||
if (this.respConsumer == null) {
|
if (this.respConsumer == null) {
|
||||||
lock.lock();
|
lock.lock();
|
||||||
try {
|
try {
|
||||||
if (this.respConsumerid == null) {
|
if (this.appRespConsumerid == null) {
|
||||||
this.respConsumerid = "consumer-" + this.respTopic;
|
this.appRespConsumerid = "consumer-" + this.appRespTopic;
|
||||||
}
|
}
|
||||||
if (this.respConsumer == null) {
|
if (this.respConsumer == null) {
|
||||||
MessageClientProcessor processor = (msg, callback) -> {
|
MessageClientProcessor processor = (msg, callback) -> {
|
||||||
@@ -100,7 +100,7 @@ public abstract class MessageClient {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
long ones = System.currentTimeMillis();
|
long ones = System.currentTimeMillis();
|
||||||
MessageClientConsumer one = messageAgent.createMessageClientConsumer(new String[]{respTopic}, respConsumerid, processor);
|
MessageClientConsumer one = messageAgent.createMessageClientConsumer(new String[]{appRespTopic}, appRespConsumerid, processor);
|
||||||
one.startup().join();
|
one.startup().join();
|
||||||
long onee = System.currentTimeMillis() - ones;
|
long onee = System.currentTimeMillis() - ones;
|
||||||
if (finest) {
|
if (finest) {
|
||||||
@@ -113,7 +113,7 @@ public abstract class MessageClient {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (needresp && (message.getRespTopic() == null || message.getRespTopic().isEmpty())) {
|
if (needresp && (message.getRespTopic() == null || message.getRespTopic().isEmpty())) {
|
||||||
message.setRespTopic(respTopic);
|
message.setRespTopic(appRespTopic);
|
||||||
}
|
}
|
||||||
if (counter != null) {
|
if (counter != null) {
|
||||||
counter.increment();
|
counter.increment();
|
||||||
@@ -129,11 +129,10 @@ public abstract class MessageClient {
|
|||||||
} else {
|
} else {
|
||||||
future.complete(null);
|
future.complete(null);
|
||||||
}
|
}
|
||||||
} catch (Exception ex) {
|
} catch (Throwable ex) {
|
||||||
future.completeExceptionally(ex);
|
future.completeExceptionally(ex);
|
||||||
} finally {
|
|
||||||
return future;
|
|
||||||
}
|
}
|
||||||
|
return future;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected MessageRecord formatRespMessage(MessageRecord message) {
|
protected MessageRecord formatRespMessage(MessageRecord message) {
|
||||||
|
|||||||
@@ -55,9 +55,10 @@ public abstract class MessageClientConsumer {
|
|||||||
|
|
||||||
public abstract CompletableFuture<Void> startup();
|
public abstract CompletableFuture<Void> startup();
|
||||||
|
|
||||||
|
public abstract CompletableFuture<Void> shutdown();
|
||||||
|
|
||||||
public boolean isClosed() {
|
public boolean isClosed() {
|
||||||
return closed;
|
return closed;
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract CompletableFuture<Void> shutdown();
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,9 +35,10 @@ public abstract class MessageClientProducer {
|
|||||||
|
|
||||||
public abstract CompletableFuture<Void> startup();
|
public abstract CompletableFuture<Void> startup();
|
||||||
|
|
||||||
|
public abstract CompletableFuture<Void> shutdown();
|
||||||
|
|
||||||
public boolean isClosed() {
|
public boolean isClosed() {
|
||||||
return closed.get();
|
return closed.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract CompletableFuture<Void> shutdown();
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,20 +0,0 @@
|
|||||||
/*
|
|
||||||
* To change this license header, choose License Headers in Project Properties.
|
|
||||||
* To change this template file, choose Tools | Templates
|
|
||||||
* and open the template in the editor.
|
|
||||||
*/
|
|
||||||
package org.redkale.mq;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* <p>
|
|
||||||
* 详情见: https://redkale.org
|
|
||||||
*
|
|
||||||
* @author zhangjx
|
|
||||||
*
|
|
||||||
* @since 2.1.0
|
|
||||||
*/
|
|
||||||
public interface MessageResponse {
|
|
||||||
|
|
||||||
public void finish(MessageRecord message);
|
|
||||||
}
|
|
||||||
@@ -20,7 +20,7 @@ public class SncpMessageClient extends MessageClient {
|
|||||||
|
|
||||||
protected SncpMessageClient(MessageAgent messageAgent) {
|
protected SncpMessageClient(MessageAgent messageAgent) {
|
||||||
super(messageAgent);
|
super(messageAgent);
|
||||||
this.respTopic = messageAgent.generateApplicationSncpRespTopic();
|
this.appRespTopic = messageAgent.generateAppSncpRespTopic();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -28,8 +28,8 @@ public class SncpMessageClient extends MessageClient {
|
|||||||
return messageAgent.getSncpMessageClientProducer();
|
return messageAgent.getSncpMessageClientProducer();
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getRespTopic() {
|
public String getAppRespTopic() {
|
||||||
return this.respTopic;
|
return this.appRespTopic;
|
||||||
}
|
}
|
||||||
|
|
||||||
//只发送消息,不需要响应
|
//只发送消息,不需要响应
|
||||||
|
|||||||
@@ -29,5 +29,5 @@ public class SncpMessageRequest extends SncpRequest {
|
|||||||
this.createTime = System.currentTimeMillis();
|
this.createTime = System.currentTimeMillis();
|
||||||
readHeader(ByteBuffer.wrap(message.getContent()), null);
|
readHeader(ByteBuffer.wrap(message.getContent()), null);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,14 +5,14 @@
|
|||||||
*/
|
*/
|
||||||
package org.redkale.util;
|
package org.redkale.util;
|
||||||
|
|
||||||
import java.lang.annotation.*;
|
import java.lang.annotation.Annotation;
|
||||||
import java.lang.ref.*;
|
import java.lang.ref.WeakReference;
|
||||||
import java.lang.reflect.*;
|
import java.lang.reflect.*;
|
||||||
import java.math.*;
|
import java.math.*;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.*;
|
import java.util.concurrent.*;
|
||||||
import java.util.concurrent.atomic.*;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
import java.util.concurrent.locks.*;
|
import java.util.concurrent.locks.ReentrantLock;
|
||||||
import java.util.function.*;
|
import java.util.function.*;
|
||||||
import java.util.logging.*;
|
import java.util.logging.*;
|
||||||
import org.redkale.annotation.*;
|
import org.redkale.annotation.*;
|
||||||
@@ -46,8 +46,6 @@ public final class ResourceFactory {
|
|||||||
|
|
||||||
public static final String RESOURCE_SELF_TYPE = "@type";
|
public static final String RESOURCE_SELF_TYPE = "@type";
|
||||||
|
|
||||||
private static final boolean skipCheckRequired = Boolean.getBoolean("redkale.resource.skip.check");
|
|
||||||
|
|
||||||
private static final Logger logger = Logger.getLogger(ResourceFactory.class.getSimpleName());
|
private static final Logger logger = Logger.getLogger(ResourceFactory.class.getSimpleName());
|
||||||
|
|
||||||
private final ReentrantLock lock = new ReentrantLock();
|
private final ReentrantLock lock = new ReentrantLock();
|
||||||
@@ -56,7 +54,7 @@ public final class ResourceFactory {
|
|||||||
|
|
||||||
private final List<WeakReference<ResourceFactory>> chidren = new CopyOnWriteArrayList<>();
|
private final List<WeakReference<ResourceFactory>> chidren = new CopyOnWriteArrayList<>();
|
||||||
|
|
||||||
private final ConcurrentHashMap<Type, ResourceAnnotationProvider> resAnnotationProviderMap = new ConcurrentHashMap();
|
private final ConcurrentHashMap<Class<? extends Annotation>, ResourceAnnotationProvider> resAnnotationProviderMap = new ConcurrentHashMap();
|
||||||
|
|
||||||
private final ConcurrentHashMap<Type, ResourceTypeLoader> resTypeLoaderMap = new ConcurrentHashMap();
|
private final ConcurrentHashMap<Type, ResourceTypeLoader> resTypeLoaderMap = new ConcurrentHashMap();
|
||||||
|
|
||||||
@@ -814,7 +812,7 @@ public final class ResourceFactory {
|
|||||||
try {
|
try {
|
||||||
list.add(srcObj);
|
list.add(srcObj);
|
||||||
Class clazz = srcObj.getClass();
|
Class clazz = srcObj.getClass();
|
||||||
final boolean diyloaderflag = !parentRoot().resAnnotationProviderMap.isEmpty();
|
final boolean diyLoaderFlag = !parentRoot().resAnnotationProviderMap.isEmpty();
|
||||||
do {
|
do {
|
||||||
if (java.lang.Enum.class.isAssignableFrom(clazz)) {
|
if (java.lang.Enum.class.isAssignableFrom(clazz)) {
|
||||||
break;
|
break;
|
||||||
@@ -853,13 +851,12 @@ public final class ResourceFactory {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (flag && diyloaderflag) {
|
if (flag && diyLoaderFlag) {
|
||||||
parentRoot().resAnnotationProviderMap.values().stream().forEach(iloader -> {
|
parentRoot().resAnnotationProviderMap.values().stream().forEach(iloader -> {
|
||||||
Annotation ann = field.getAnnotation(iloader.annotationType());
|
Annotation ann = field.getAnnotation(iloader.annotationType());
|
||||||
if (ann == null) {
|
if (ann != null) {
|
||||||
return;
|
iloader.load(this, srcResourceName, srcObj, ann, field, attachment);
|
||||||
}
|
}
|
||||||
iloader.load(this, srcResourceName, srcObj, ann, field, attachment);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (ns == null) {
|
if (ns == null) {
|
||||||
@@ -1002,7 +999,7 @@ public final class ResourceFactory {
|
|||||||
if (rs != null) {
|
if (rs != null) {
|
||||||
field.set(srcObj, rs);
|
field.set(srcObj, rs);
|
||||||
}
|
}
|
||||||
if (rs == null && !skipCheckRequired && rc1 != null && rc1.required()) {
|
if (rs == null && rc1 != null && rc1.required()) {
|
||||||
String t = srcObj.getClass().getName();
|
String t = srcObj.getClass().getName();
|
||||||
if (srcObj.getClass().getSimpleName().startsWith("_Dyn")) {
|
if (srcObj.getClass().getSimpleName().startsWith("_Dyn")) {
|
||||||
t = srcObj.getClass().getSuperclass().getName();
|
t = srcObj.getClass().getSuperclass().getName();
|
||||||
|
|||||||
Reference in New Issue
Block a user