fix - starter same method name invoke error

This commit is contained in:
wangli 2025-03-05 16:53:50 +08:00
parent 8838462f8a
commit fd735dd90a
3 changed files with 52 additions and 4 deletions

View File

@ -5,6 +5,7 @@ import cn.axzo.workflow.common.model.response.mq.WorkflowEngineStarterRpcInvokeD
import cn.axzo.workflow.starter.WorkflowEngineStarterProperties;
import cn.axzo.workflow.starter.common.exception.WorkflowEngineStarterException;
import cn.axzo.workflow.starter.mq.retry.producer.RpcInvokeEventProducer;
import cn.axzo.workflow.starter.util.MD5;
import cn.azxo.framework.common.model.CommonResponse;
import com.alibaba.fastjson.JSON;
import feign.Client;
@ -106,7 +107,7 @@ public class ComplexInvokeClient implements Client {
event.setMethodName(metadata.method().getName());
Class<?>[] parameterTypes = metadata.method().getParameterTypes();
event.setParameterTypesMd5(StringUtils.collectionToCommaDelimitedString(Arrays.stream(parameterTypes).map(Class::getName).collect(Collectors.toList())));
event.setParameterTypesMd5(MD5.encrypt(StringUtils.collectionToCommaDelimitedString(Arrays.stream(parameterTypes).map(Class::getName).collect(Collectors.toList()))));
List<String> args = new ArrayList<>();
event.setParameters(args);

View File

@ -10,6 +10,7 @@ import cn.axzo.workflow.starter.WorkflowEngineStarterProperties;
import cn.axzo.workflow.starter.api.WorkflowCoreService;
import cn.axzo.workflow.starter.api.WorkflowManageService;
import cn.axzo.workflow.starter.common.exception.WorkflowNoMethodException;
import cn.axzo.workflow.starter.util.MD5;
import com.alibaba.fastjson.JSON;
import lombok.SneakyThrows;
import org.slf4j.Logger;
@ -100,9 +101,9 @@ public class WorkflowEngineStarterRetryEventListener implements EventHandler, In
Method[] methods = coreService.getDeclaredMethods();
for (Method method : methods) {
String parameterStr = StringUtils.collectionToCommaDelimitedString(Arrays.stream(method.getParameterTypes()).map(Class::getName).collect(Collectors.toList()));
Map<String, InterfaceMapping> methodCache = multiMethodCache.getOrDefault(parameterStr, new HashMap<>());
methodCache.put(parameterStr, new InterfaceMapping(workflowCoreService, method));
String parameterTypesMd5 = MD5.encrypt(StringUtils.collectionToCommaDelimitedString(Arrays.stream(method.getParameterTypes()).map(Class::getName).collect(Collectors.toList())));
Map<String, InterfaceMapping> methodCache = multiMethodCache.getOrDefault(method.getName(), new HashMap<>());
methodCache.put(parameterTypesMd5, new InterfaceMapping(workflowCoreService, method));
multiMethodCache.put(method.getName(), methodCache);
}
}

View File

@ -0,0 +1,46 @@
package cn.axzo.workflow.starter.util;
import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
/**
* Starter 专用的 MD5小工具
*
* @author wangli
* @since 2025-03-05 16:45
*/
public class MD5 {
public static String encrypt(String data) {
if (data == null) {
return null;
}
try {
// 获取 MD5 算法实例
MessageDigest md = MessageDigest.getInstance("MD5");
// 将输入字符串转换为字节数组并进行加密
byte[] digest = md.digest(data.getBytes(StandardCharsets.UTF_8));
// 将字节数组转换为 BigInteger
BigInteger bigInt = new BigInteger(1, digest);
// BigInteger 转换为十六进制字符串
String hashText = bigInt.toString(16);
// 不足 32 位时前面补 0
while (hashText.length() < 32) {
hashText = "0" + hashText;
}
return hashText;
} catch (NoSuchAlgorithmException e) {
// 处理算法不可用的异常
e.printStackTrace();
return null;
}
}
public static void main(String[] args) {
String encrypt = encrypt("123");
System.out.println("encrypt = " + encrypt);
}
}