Skip to content

Commit d152cbc

Browse files
committed
序列化优化
1 parent fc70cf0 commit d152cbc

26 files changed

Lines changed: 140 additions & 163 deletions

tx-client/src/main/java/com/codingapi/txlcn/client/aspectlog/AspectLog.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
import lombok.Data;
2020
import lombok.NoArgsConstructor;
2121

22+
import java.io.Serializable;
23+
2224
/**
2325
* Description: 事务日志数据
2426
* Company: CodingApi
@@ -29,7 +31,7 @@
2931
@Data
3032
@AllArgsConstructor
3133
@NoArgsConstructor
32-
public class AspectLog {
34+
public class AspectLog implements Serializable {
3335

3436
/**
3537
* id自增主键

tx-client/src/main/java/com/codingapi/txlcn/client/message/GetAspectLogService.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,10 @@
1515
*/
1616
package com.codingapi.txlcn.client.message;
1717

18-
import com.alibaba.fastjson.JSON;
18+
import com.codingapi.txlcn.client.aspectlog.AspectLog;
19+
import com.codingapi.txlcn.client.aspectlog.AspectLogHelper;
1920
import com.codingapi.txlcn.client.message.helper.RpcExecuteService;
2021
import com.codingapi.txlcn.client.message.helper.TransactionCmd;
21-
import com.codingapi.txlcn.client.aspectlog.AspectLogHelper;
22-
import com.codingapi.txlcn.client.aspectlog.AspectLog;
2322
import com.codingapi.txlcn.commons.bean.TransactionInfo;
2423
import com.codingapi.txlcn.commons.exception.SerializerException;
2524
import com.codingapi.txlcn.commons.exception.TxClientException;
@@ -28,6 +27,7 @@
2827
import org.springframework.beans.factory.annotation.Autowired;
2928
import org.springframework.stereotype.Component;
3029

30+
import java.io.Serializable;
3131
import java.util.Objects;
3232

3333
/**
@@ -47,14 +47,16 @@ public GetAspectLogService(AspectLogHelper txLogHelper) {
4747
}
4848

4949
@Override
50-
public Object execute(TransactionCmd transactionCmd) throws TxClientException {
50+
public Serializable execute(TransactionCmd transactionCmd) throws TxClientException {
5151
try {
52-
GetAspectLogParams getAspectLogParams =transactionCmd.getMsg().loadData(GetAspectLogParams.class);
52+
GetAspectLogParams getAspectLogParams =transactionCmd.getMsg().loadBean(GetAspectLogParams.class);
5353
AspectLog txLog = txLogHelper.getTxLog(getAspectLogParams.getGroupId(), getAspectLogParams.getUnitId());
5454
if (Objects.isNull(txLog)) {
5555
throw new TxClientException("non exists aspect log.");
5656
}
57-
return JSON.toJSON(SerializerContext.getInstance().deSerialize(txLog.getBytes(), TransactionInfo.class));
57+
58+
TransactionInfo transactionInfo = SerializerContext.getInstance().deSerialize(txLog.getBytes(), TransactionInfo.class);
59+
return transactionInfo.toJsonObject();
5860
} catch (SerializerException e) {
5961
throw new TxClientException(e);
6062
}

tx-client/src/main/java/com/codingapi/txlcn/client/message/RpcNotifyConnectService.java

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,14 @@
1717

1818
import com.codingapi.txlcn.client.message.helper.RpcExecuteService;
1919
import com.codingapi.txlcn.client.message.helper.TransactionCmd;
20-
import com.codingapi.txlcn.commons.exception.SerializerException;
2120
import com.codingapi.txlcn.commons.exception.TxClientException;
22-
import com.codingapi.txlcn.spi.message.params.NotifyConnectParams;
2321
import com.codingapi.txlcn.spi.message.RpcClientInitializer;
22+
import com.codingapi.txlcn.spi.message.params.NotifyConnectParams;
2423
import lombok.extern.slf4j.Slf4j;
2524
import org.springframework.beans.factory.annotation.Autowired;
2625
import org.springframework.stereotype.Service;
2726

27+
import java.io.Serializable;
2828
import java.net.InetSocketAddress;
2929

3030
/**
@@ -46,20 +46,12 @@ public RpcNotifyConnectService(RpcClientInitializer rpcClientInitializer) {
4646
}
4747

4848
@Override
49-
public Object execute(TransactionCmd transactionCmd) throws TxClientException {
50-
try {
51-
52-
log.info("transactionCmd->{}", transactionCmd);
53-
54-
NotifyConnectParams notifyConnectParams = transactionCmd.getMsg().loadData(NotifyConnectParams.class);
55-
56-
log.info("notifyConnectParams->{}", notifyConnectParams);
49+
public Serializable execute(TransactionCmd transactionCmd) throws TxClientException {
50+
log.info("transactionCmd->{}", transactionCmd);
5751

58-
rpcClientInitializer.connect(new InetSocketAddress(notifyConnectParams.getHost(), notifyConnectParams.getPort()));
59-
} catch (SerializerException e) {
60-
throw new TxClientException(e);
61-
}
52+
NotifyConnectParams notifyConnectParams = transactionCmd.getMsg().loadBean(NotifyConnectParams.class);
6253

54+
rpcClientInitializer.connect(new InetSocketAddress(notifyConnectParams.getHost(), notifyConnectParams.getPort()));
6355
return null;
6456
}
6557
}

tx-client/src/main/java/com/codingapi/txlcn/client/message/helper/ClientRpcAnswer.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.springframework.beans.factory.annotation.Autowired;
2727
import org.springframework.stereotype.Service;
2828

29+
import java.io.Serializable;
2930
import java.util.Objects;
3031

3132
/**
@@ -59,7 +60,7 @@ public void callback(RpcCmd rpcCmd) {
5960
transactionBeanHelper.loadRpcExecuteService(transactionType, transactionCmd.getType());
6061
MessageDto messageDto = null;
6162
try {
62-
Object message = executeService.execute(transactionCmd);
63+
Serializable message = executeService.execute(transactionCmd);
6364
messageDto = MessageCreator.notifyUnitOkResponse(message,action);
6465
} catch (TxClientException e) {
6566
log.error("message > execute error.", e);

tx-client/src/main/java/com/codingapi/txlcn/client/message/helper/MessageCreator.java

Lines changed: 12 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -15,27 +15,18 @@
1515
*/
1616
package com.codingapi.txlcn.client.message.helper;
1717

18-
import com.codingapi.txlcn.spi.message.params.*;
19-
import com.codingapi.txlcn.commons.exception.SerializerException;
20-
import com.codingapi.txlcn.commons.util.serializer.SerializerContext;
2118
import com.codingapi.txlcn.spi.message.MessageConstants;
2219
import com.codingapi.txlcn.spi.message.dto.MessageDto;
20+
import com.codingapi.txlcn.spi.message.params.*;
2321

24-
import java.util.Objects;
22+
import java.io.Serializable;
2523

2624
/**
2725
* @author lorne
2826
*/
2927
public class MessageCreator {
3028

3129

32-
private static byte[] serialize(Object obj) {
33-
try {
34-
return SerializerContext.getInstance().serialize(obj);
35-
} catch (SerializerException e) {
36-
throw new RuntimeException(e);
37-
}
38-
}
3930

4031
/**
4132
* 创建事务组
@@ -60,7 +51,7 @@ public static MessageDto joinGroup(JoinGroupParams joinGroupParams) {
6051
MessageDto msg = new MessageDto();
6152
msg.setGroupId(joinGroupParams.getGroupId());
6253
msg.setAction(MessageConstants.ACTION_JOIN_GROUP);
63-
msg.setBytes(serialize(joinGroupParams));
54+
msg.setData(joinGroupParams);
6455
return msg;
6556
}
6657

@@ -74,7 +65,7 @@ public static MessageDto notifyGroup(NotifyGroupParams notifyGroupParams) {
7465
MessageDto msg = new MessageDto();
7566
msg.setGroupId(notifyGroupParams.getGroupId());
7667
msg.setAction(MessageConstants.ACTION_NOTIFY_GROUP);
77-
msg.setBytes(serialize(notifyGroupParams));
68+
msg.setData(notifyGroupParams);
7869
return msg;
7970
}
8071

@@ -85,11 +76,11 @@ public static MessageDto notifyGroup(NotifyGroupParams notifyGroupParams) {
8576
* @param action action
8677
* @return MessageDto
8778
*/
88-
public static MessageDto notifyUnitOkResponse(Object message,String action) {
79+
public static MessageDto notifyUnitOkResponse(Serializable message, String action) {
8980
MessageDto messageDto = new MessageDto();
9081
messageDto.setAction(action);
9182
messageDto.setState(MessageConstants.STATE_OK);
92-
messageDto.setBytes(Objects.isNull(message) ? null : (message instanceof byte[] ? (byte[]) message : serialize(message)));
83+
messageDto.setData(message);
9384
return messageDto;
9485
}
9586

@@ -100,11 +91,11 @@ public static MessageDto notifyUnitOkResponse(Object message,String action) {
10091
* @param action action
10192
* @return MessageDto
10293
*/
103-
public static MessageDto notifyUnitFailResponse(Object message,String action) {
94+
public static MessageDto notifyUnitFailResponse(Serializable message,String action) {
10495
MessageDto messageDto = new MessageDto();
10596
messageDto.setAction(action);
10697
messageDto.setState(MessageConstants.STATE_EXCEPTION);
107-
messageDto.setBytes(Objects.isNull(message) ? null : serialize(message));
98+
messageDto.setData(message);
10899
return messageDto;
109100
}
110101

@@ -119,7 +110,7 @@ public static MessageDto askTransactionState(String groupId, String unitId) {
119110
MessageDto messageDto = new MessageDto();
120111
messageDto.setGroupId(groupId);
121112
messageDto.setAction(MessageConstants.ACTION_ASK_TRANSACTION_STATE);
122-
messageDto.setBytes(serialize(new AskTransactionStateParams(groupId, unitId)));
113+
messageDto.setData(new AskTransactionStateParams(groupId, unitId));
123114
return messageDto;
124115
}
125116

@@ -133,7 +124,7 @@ public static MessageDto writeTxException(TxExceptionParams txExceptionParams) {
133124
MessageDto messageDto = new MessageDto();
134125
messageDto.setAction(MessageConstants.ACTION_WRITE_EXCEPTION);
135126
messageDto.setGroupId(txExceptionParams.getGroupId());
136-
messageDto.setBytes(serialize(txExceptionParams));
127+
messageDto.setData(txExceptionParams);
137128
return messageDto;
138129
}
139130

@@ -146,8 +137,8 @@ public static MessageDto initClient(String appName) {
146137
InitClientParams initClientParams = new InitClientParams();
147138
initClientParams.setAppName(appName);
148139
MessageDto messageDto = new MessageDto();
149-
messageDto.setGroupId("INITCLIENTGROUPID");
150-
messageDto.setBytes(serialize(initClientParams));
140+
messageDto.setGroupId(MessageConstants.ACTION_INIT_GROUPID);
141+
messageDto.setData(initClientParams);
151142
messageDto.setAction(MessageConstants.ACTION_INIT_CLIENT);
152143
return messageDto;
153144
}

tx-client/src/main/java/com/codingapi/txlcn/client/message/helper/MessageParser.java

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@
1515
*/
1616
package com.codingapi.txlcn.client.message.helper;
1717

18-
import com.codingapi.txlcn.commons.exception.SerializerException;
19-
import com.codingapi.txlcn.commons.util.serializer.SerializerContext;
2018
import com.codingapi.txlcn.spi.message.LCNCmdType;
2119
import com.codingapi.txlcn.spi.message.MessageConstants;
2220
import com.codingapi.txlcn.spi.message.dto.RpcCmd;
@@ -32,13 +30,6 @@
3230
public class MessageParser {
3331

3432

35-
private static <T> T deserialize(byte[] data, Class<T> type) {
36-
try {
37-
return SerializerContext.getInstance().deSerialize(data, type);
38-
} catch (SerializerException e) {
39-
throw new RuntimeException(e);
40-
}
41-
}
4233

4334
public static TransactionCmd parser(RpcCmd rpcCmd) {
4435
TransactionCmd cmd = new TransactionCmd();
@@ -47,7 +38,7 @@ public static TransactionCmd parser(RpcCmd rpcCmd) {
4738
cmd.setGroupId(rpcCmd.getMsg().getGroupId());
4839

4940
if (rpcCmd.getMsg().getAction().equals(MessageConstants.ACTION_NOTIFY_UNIT)) {
50-
NotifyUnitParams notifyUnitParams = deserialize(rpcCmd.getMsg().getBytes(), NotifyUnitParams.class);
41+
NotifyUnitParams notifyUnitParams = rpcCmd.getMsg().loadBean(NotifyUnitParams.class);
5142
cmd.setTransactionType(notifyUnitParams.getUnitType());
5243
}
5344

tx-client/src/main/java/com/codingapi/txlcn/client/message/helper/RpcExecuteService.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818

1919
import com.codingapi.txlcn.commons.exception.TxClientException;
2020

21+
import java.io.Serializable;
22+
2123
/**
2224
* LCN分布式事务资源控制
2325
* @author lorne
@@ -30,6 +32,6 @@ public interface RpcExecuteService {
3032
* @throws TxClientException TxClientException
3133
* @return object
3234
*/
33-
Object execute(TransactionCmd transactionCmd) throws TxClientException;
35+
Serializable execute(TransactionCmd transactionCmd) throws TxClientException;
3436

3537
}

tx-client/src/main/java/com/codingapi/txlcn/client/message/init/TxClientClientInitCallBack.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
import com.codingapi.txlcn.client.config.TxClientConfig;
1919
import com.codingapi.txlcn.client.message.helper.MessageCreator;
20-
import com.codingapi.txlcn.commons.exception.SerializerException;
2120
import com.codingapi.txlcn.spi.message.ClientInitCallBack;
2221
import com.codingapi.txlcn.spi.message.RpcClient;
2322
import com.codingapi.txlcn.spi.message.dto.MessageDto;
@@ -66,14 +65,14 @@ public void connected(String remoteKey) {
6665
try {
6766
log.info("send--->{}", remoteKey);
6867
MessageDto msg = rpcClient.request(remoteKey, MessageCreator.initClient(appName + "-" + port));
69-
if (msg.getBytes() != null) {
68+
if (msg.getData() != null) {
7069
//每一次建立连接时将会获取最新的时间
71-
InitClientParams resParams = msg.loadData(InitClientParams.class);
70+
InitClientParams resParams = msg.loadBean(InitClientParams.class);
7271
long dtxTime = resParams.getDtxTime();
7372
txClientConfig.setDtxTime(dtxTime);
7473
log.info("set dtx time finish. time:{}", dtxTime);
7574
}
76-
} catch (RpcException | SerializerException e) {
75+
} catch (RpcException e) {
7776
throw new RuntimeException(e);
7877
}
7978
});

tx-client/src/main/java/com/codingapi/txlcn/client/support/DefaultNotifiedUnitService.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,14 @@
2020
import com.codingapi.txlcn.client.support.cache.DTXGroupContext;
2121
import com.codingapi.txlcn.client.support.cache.TransactionAttachmentCache;
2222
import com.codingapi.txlcn.client.support.template.TransactionCleanTemplate;
23-
import com.codingapi.txlcn.commons.exception.SerializerException;
2423
import com.codingapi.txlcn.commons.exception.TransactionClearException;
2524
import com.codingapi.txlcn.commons.exception.TxClientException;
2625
import com.codingapi.txlcn.commons.util.Transactions;
2726
import com.codingapi.txlcn.logger.TxLogger;
2827
import com.codingapi.txlcn.spi.message.params.NotifyUnitParams;
2928

29+
import java.io.Serializable;
30+
3031
/**
3132
* Description: 默认RPC命令业务
3233
* Date: 2018/12/20
@@ -50,9 +51,9 @@ public DefaultNotifiedUnitService(TransactionCleanTemplate transactionCleanTempl
5051
}
5152

5253
@Override
53-
public Object execute(TransactionCmd transactionCmd) throws TxClientException {
54+
public Serializable execute(TransactionCmd transactionCmd) throws TxClientException {
5455
try {
55-
NotifyUnitParams notifyUnitParams = transactionCmd.getMsg().loadData(NotifyUnitParams.class);
56+
NotifyUnitParams notifyUnitParams = transactionCmd.getMsg().loadBean(NotifyUnitParams.class);
5657
// 保证业务线程执行完毕后执行事务清理操作
5758
if (transactionAttachmentCache.hasContext(transactionCmd.getGroupId())) {
5859
DTXGroupContext groupContext = transactionAttachmentCache.context(transactionCmd.getGroupId());
@@ -69,7 +70,7 @@ public Object execute(TransactionCmd transactionCmd) throws TxClientException {
6970
notifyUnitParams.getUnitType(),
7071
notifyUnitParams.getState());
7172
return null;
72-
} catch (SerializerException | TransactionClearException | InterruptedException e) {
73+
} catch (TransactionClearException | InterruptedException e) {
7374
throw new TxClientException(e);
7475
}
7576
}

tx-client/src/main/java/com/codingapi/txlcn/client/support/checking/SimpleDTXChecking.java

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,20 +17,18 @@
1717

1818
import com.codingapi.txlcn.client.aspectlog.AspectLogger;
1919
import com.codingapi.txlcn.client.config.TxClientConfig;
20+
import com.codingapi.txlcn.client.message.helper.MessageCreator;
21+
import com.codingapi.txlcn.client.message.helper.TxMangerReporter;
2022
import com.codingapi.txlcn.client.support.cache.DTXGroupContext;
2123
import com.codingapi.txlcn.client.support.cache.TransactionAttachmentCache;
22-
import com.codingapi.txlcn.spi.message.RpcClient;
23-
import com.codingapi.txlcn.spi.message.dto.MessageDto;
24-
import com.codingapi.txlcn.spi.message.exception.RpcException;
25-
import com.codingapi.txlcn.spi.message.params.TxExceptionParams;
2624
import com.codingapi.txlcn.client.support.template.TransactionCleanTemplate;
27-
import com.codingapi.txlcn.client.message.helper.MessageCreator;
28-
import com.codingapi.txlcn.client.message.helper.TxMangerReporter;
29-
import com.codingapi.txlcn.commons.exception.SerializerException;
3025
import com.codingapi.txlcn.commons.exception.TransactionClearException;
3126
import com.codingapi.txlcn.commons.util.Transactions;
32-
import com.codingapi.txlcn.commons.util.serializer.SerializerContext;
3327
import com.codingapi.txlcn.logger.TxLogger;
28+
import com.codingapi.txlcn.spi.message.RpcClient;
29+
import com.codingapi.txlcn.spi.message.dto.MessageDto;
30+
import com.codingapi.txlcn.spi.message.exception.RpcException;
31+
import com.codingapi.txlcn.spi.message.params.TxExceptionParams;
3432
import lombok.extern.slf4j.Slf4j;
3533
import org.springframework.beans.factory.annotation.Autowired;
3634
import org.springframework.stereotype.Component;
@@ -110,7 +108,7 @@ public void startDelayCheckingAsync(String groupId, String unitId, String transa
110108
}
111109
MessageDto messageDto = TxMangerReporter.requestUntilNonManager(rpcClient,
112110
MessageCreator.askTransactionState(groupId, unitId), "ask transaction state error.");
113-
int state = SerializerContext.getInstance().deSerialize(messageDto.getBytes(), Short.class);
111+
int state = messageDto.loadBean(Short.class);
114112
log.debug("support > ask transaction transactionState:{}", state);
115113
txLogger.trace(groupId, unitId, Transactions.TAG_TASK, "ask transaction transactionState " + state);
116114
if (state == -1) {
@@ -123,7 +121,7 @@ public void startDelayCheckingAsync(String groupId, String unitId, String transa
123121

124122
} catch (RpcException e) {
125123
onAskTransactionStateException(groupId, unitId, transactionType);
126-
} catch (TransactionClearException | SerializerException | InterruptedException e) {
124+
} catch (TransactionClearException | InterruptedException e) {
127125
log.error("{} > [transaction transactionState message] error or [clean transaction] error.", transactionType);
128126
}
129127
}, clientConfig.getDtxTime(), TimeUnit.MILLISECONDS);

0 commit comments

Comments
 (0)